【问题标题】:Apache POI - read docx with image in headerApache POI - 在标题中读取带有图像的 docx
【发布时间】:2015-07-16 19:03:04
【问题描述】:

我正在尝试使用 Apache POI 处理 docx 文件。只需简单地读取然后写入文件(只是现在)。这是我的简单代码:

FileInputStream fileInputStream = new FileInputStream(inputFile);   
XWPFDocument document = new XWPFDocument(OPCPackage.open(fileInputStream)); 
FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
document.write(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
fileInputStream.close();

问题是输入文件的标题中有小图像。因此,在使用 POI 处理输入文件并在 Microsoft Word 中打开输出文件后,出现文件损坏错误:

Microsoft Office cannot open this file because some parts are missing or invalid.
Location: Part: /word/settings.xml, Line: 2, Column: 0

在 OO Writer 中一切正常,但在办公室中却不行。

问题是:出了什么问题? apache POI 是否不处理标题中带有图像的文件?你知道有什么办法可以解决这个问题吗?

需要使用Apache POI,我不考虑其他工具。我也使用 POI 3.8

【问题讨论】:

  • 首先,我想验证它确实是导致问题的标题。创建一个仅在标题中包含想象而没有其他内容的测试文档。那会失败吗?如果是,那么 POI 处理前后的 XML 有什么区别?
  • 确实是标题没有引起问题。标题中带有图像的其他文件被处理,没有错误。当我运行 diff 时,我看到 mc:Ignorable="w14" 参数已从 w:settings 标记中删除...
  • 如果升级到最新版本的 Apache POI 会发生什么? (目前是 3.10)
  • 很遗憾,在使用POI 3.10-FINAL 处理后,Word 仍然无法读取文件。 Diff 显示 mc:Ignorable="w14" 没有被删除,而是从 w:settings 标记的末尾移动到它的开头。
  • 我无法编辑评论所以...有什么办法可以强制POI 不编辑settings.xml 吗?

标签: java apache-poi docx


【解决方案1】:

问题不在于图像标题,而在于 Apache POI jar 版本。使用最新的罐子。

poi-3.10-FINAL.jar
poi-ooxml-3.10-FINAL.jar
poi-ooxml-schemas-3.10-FINAL.jar
ooxml-schemas-1.1.jar

上面的 jars 为我解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    相关资源
    最近更新 更多