1

我创建了一个带有 2x2 表格的 *.docx 文件,每个单元格都包含= 行号和= 列号Cell x-y的文本。xy

当我通过一个简单的转换过程传递这个文档时,docx4j 的Differencer.diff()方法报告没有差异(即没有w:insw:del标记)。

尽管 .docx 在<w:tc> -> <w:p>标签内将原始文档的文本像这样分解,但这是可以预料到的并且处理得非常干净:

<w:r>
  <w:t>单元格</w:t>
</w:r>
<w:r>
  <w:t xml:space="preserve"> 1-1</w:t>
</w:r>

这在转换后的文档中:

<w:r>
  <w:t xml:space="preserve">单元格 1-1</w:t>
</w:r>

但是,如果我在文档中的表格上方添加文本“表格标题”,则原始文档的内容(Word 的处理,我对此无能为力)单元格合并为一个<w:r>

<w:r>
  <w:t>1-1 单元格</w:t>
</w:r>

转换后的文档的唯一区别xml:space="preserve"是插入:

<w:r>
  <w:t xml:space="preserve">单元格 1-1</w:t>
</w:r>

但是,docx4j 的Differencer.diff()方法现在报告每个单元格的内容已插入,并在生成的 diff 文档中显示以下内容作为每个单元格的w:tc内容w:p

<w:ins xmlns:xalan="http://xml.apache.org/xalan" xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage" w:date="2009-03 -11T17:57:00Z" w:author="someone" w:id="1">
  <w:r>
    <w:t xml:space="preserve">单元格 1-1</w:t>
  </w:r>
</w:ins>

并将每个单元格的内容显示为已删除,紧跟在结束<w:tbl>标记之后:

    <!--处理简单的删除 w:p-->
    <w:p xmlns:xalan="http://xml.apache.org/xalan" xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
        <w:del w:date="2009-03-11T17:57:00Z" w:author="someone" w:id="5">
            <w:r>
                <w:delText>单元格 1-1
            </w:r>
        </w:del>
    </w:p>

我知道 Differencer 能够忽略xml:space="preserve"属性,因为它会在表格之前插入文本,所以我怀疑这是原因。

这些表格场景是否超出了预期的用例Differencer?是使用/调用错误吗?漏洞?

任何指导表示赞赏。

4

0 回答 0