如何使用Odf Toolkit从odt文档中提取图像?

时间:2015-10-01 22:22:50

标签: java image odftoolkit

首先,我对Java和编程非常陌生,如果我的问题或尝试解决它是天真的,那么道歉。

我正在尝试创建一个程序,该程序在Javax.Swing界面中显示存储在Open Document Text(.odt)文档中的图像。为此,我试图使用Odf Toolkit从odt中提取图像。我确信必须有办法这样做,因为Odf Toolkit可以插入图像,所以它肯定能够提取它们吗?

以下是我试图从图像中获取图像的方法之一:

 package odftoolkittrial;

 import java.util.Iterator;
 import org.odftoolkit.simple.TextDocument;
 import org.odftoolkit.simple.draw.Image;

 /**
  *
  * @author ------
  */
 public class odftrial {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

String filePath = "/Users/...../imagetest6";

 Image allImages;

 try {
      TextDocument odt = TextDocument.loadDocument(filePath);

      Iterator<Image> ii = odt.getImageIterator();  

           while (ii.hasNext()) {  

                Image image = ip.next();

                allImages = image.getImageContent;
                System.out.println(allImages);
            }
 }
 catch (Exception ex)
 {
      ex.printStackTrace();
 }
 }
 }

这是根据我成功用于从odt中提取文本的代码改编而来的。我可以看到两个问题,我试图使用的方法不存在于它们的变量所属的类中,但我花了几天时间试图找到合适的方法或其他方法来提取图像并绘制了一个空白。

如果有人可以提供任何示例代码甚至指针,我将非常感激。如果我可以获取图像并将其作为jpegs或png保存到光盘,那就没问题了,因为我已经有代码可以拍摄这样的图像,将其显示在jlabel上,然后将其从光盘中删除。

提前致意并表示感谢

1 个答案:

答案 0 :(得分:2)

ODT文档以XML格式和包存储..我们可以遍历XML树并获取图像.. 这是示例代码..

   public void storeAllImages(){             
        TextDocument td = TextDocument.loadDocument(new File("multilingual.odt"));
        OdfContentDom conDom=td.getContentDom();
        Node n1=conDom.getFirstChild();
        OdfPackage pack=td.getPackage();
        parseXMl(n1,pack);
   }
   public   void parseXMl(Node n,OdfPackage pack) throws Exception{
       NodeList nl = n.getChildNodes();
       if(nl==null || nl.getLength()==0){//leaf element
        NamedNodeMap  map=n.getAttributes();
        if("draw:image".equals(n.getNodeName())){
            byte b[]=pack.getBytes(n.getAttributes().getNamedItem("xlink:href").getNodeValue());

            //image data in bytes
            FileOutputStream fos=new FileOutputStream(new File("output/output.jpg"));

            IOUtils.write(b, fos);
            fos.close();


        }
        return;
    }

      for (int i=0; i < nl.getLength(); i++) {
          Node   an = nl.item(i);
          parseXMl(an,pack);
       }

}