MS office 在所有文档中生成此元素,并具有一些基本知识,即必须在一定程度上强制执行 NS 约束......
MS 文档示例:
<w:document
xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml"
<!--whatever-->
</w:document>
请注意 MC:IGNORABLE 元素已移动...手动修改 docx 存档中的此元素本身“修复”了 MSOffice 程序抛出的错误,该错误在第 2 行第 0 列中指定了一个错误。
到目前为止,我已经尝试过:
xwpfDocument.getDocument().getDomNode()
^ 已尝试以正确的顺序修改、删除和添加属性...不起作用,因为这种转变似乎发生在 XWPFDocument.write() 过程中的某处。
我还尝试从 docx 存档中提取 document.xml 文件,对其进行修改并将其注入回存档中……这似乎不起作用……CRC问题……
有没有办法访问 OPCPackage 或部分或任何东西以允许直接调用此元素中的内置“recalculateAttributesRelativeToNS”?
...或者作为替代方案..我如何在存档内的文档 xml 文件中自动更改 dom 并仍然确保 ms 兼容性?
[编辑:“XY”]
这种行为在以下场景中很明显:
fis = new FileInputStream(new File(path));
XWPFPicture picture = imageRun.addPicture(fis, XWPFDocument.PICTURE_TYPE_PNG, path, Units.toEMU(450), Units.toEMU(290));
文档打开正常。问题不存在。
添加这一行(我知道它在技术上不正确,但是不应该在第 2 行第 0 列报告错误,因为它应该在 xml 的下方进一步报告)搞砸了一切。
picture.getCTPicture().getSpPr().addNewEffectLst().addNewOuterShdw().setBlurRad(10000);
添加此行后,w:document 属性变为状态 2(poi 示例),从而触发 ms Office 的 MS 架构 NS 失效例程。
属性是正确的。顺序是错误的。手动将 mc:ignorable 属性移动到属性列表的末尾可以解决问题,并且文档加载没有问题。
这很可能是因为(在正确的实现中)xmlns:mc 属性在属性列表中的 mc:ignorable 属性之前,而在 poi 输出中它没有(mc:Ignorable 是列表中的第一个元素)。
拉莫斯之舞
相关分类