【发布时间】: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