【问题标题】:How do I extract images from an odt document using Odf Toolkit?如何使用 Odf Toolkit 从 odt 文档中提取图像?
【发布时间】:2015-10-01 22:22:49
【问题描述】:

首先,我对 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 上,然后将其从光盘中删除。

提前致谢

【问题讨论】:

    标签: java image odftoolkit


    【解决方案1】:

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

    【讨论】:

    • 图像并不总是叶子元素,它可能有像 text:p 这样的子元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    相关资源
    最近更新 更多