2

首先,我对 Java 和编程很陌生,所以如果我的问题或解决它的尝试很天真,我深表歉意。

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

这是我尝试将图像从 odt 中取出的方法之一:

 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 中提取文本的代码。我可以看到两个问题,即我尝试使用的方法在它们的变量所属的类中不存在,但我花了几天时间试图找到合适的方法或其他提取图像的方法,并画了一个空白。

如果有人可以提供任何示例代码甚至是指针,我将不胜感激。如果我可以获取图像并将它们以 jpeg 或 png 格式保存到光盘上,那很好,因为我已经有代码可以拍摄这样的图像,将其显示在 jlabel 上,然后将其从光盘中删除。

提前致谢

4

1 回答 1

3

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);
       }

}
于 2017-12-10T05:59:46.687 回答