【问题标题】:docx4j Differencer Showing More Differences Than Expecteddocx4j 差异器显示出比预期更多的差异
【发布时间】:2012-07-10 18:17:09
【问题描述】:

我有两个文件:

  1. Document 1 (input)
  2. Document 2 (output)

文档 2 是通过转换过程传递文档 1 的结果,该过程使任何内容和格式保持不变(通过 Word 中的并排比较验证)。

但是,该过程会从 .docx 文件中删除许多 ID 号。

例如,

变成

根据每个文档的转储通过以下代码:

正文 = ((Document)newerPackage.getMainDocumentPart().getJaxbElement()).getBody(); 节点 node = org.docx4j.XmlUtils.marshaltoW3CDomDocument(body).getDocumentElement(); TransformerFactory tf = TransformerFactory.newInstance(); 变压器变压器 = tf.newTransformer(); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.INDENT, "是"); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.transform(新 DOMSource(节点), 新的 StreamResult(新的 OutputStreamWriter(System.out, "UTF-8")));

使用docx4j Differencer comparison method recommended here,所有内容(除了没有应用格式的第一行)都显示为修改。

问题是:差异是由于缺少 id、格式还是其他原因造成的?

如果它很重要,我们在这种情况下使用 docx4j 对我们的往返过程执行自动健全性/回归测试(即应用“无损失”过程并期望没有差异)

【问题讨论】:

  • Google Docs 不会显示 Document 1。
  • 您是否从 Google 文档收到此消息? “很抱歉,我们目前无法生成文档视图,请稍后再试。您也可以点击此处尝试下载原始文档。”如果是这样,您可以使用链接的“此处”文本来获取 docx。我仔细检查了共享,似乎没问题。

标签: docx4j


【解决方案1】:

披露:我在 docx4j 工作

如果段落之间的唯一区别是 rsid 属性,它们仍将被检测为不同。

您可以在执行比较之前“清理”文档,这样 docx 都没有 rsid 属性。请参阅Filter sample

顺便说一句,查看对象(例如单个段落或整个正文)的 XML 的更简单方法是使用 XmlUtils.marshaltoString

【讨论】:

  • 清理文档给出了准确的比较。谢谢你,杰森....以及XMLUtils.marshalToString() 上的提示:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
相关资源
最近更新 更多