我创建了一个带有 2x2 表格的 *.docx 文件,每个单元格都包含= 行号和= 列号Cell x-y
的文本。x
y
当我通过一个简单的转换过程传递这个文档时,docx4j 的Differencer.diff()
方法报告没有差异(即没有w:ins
或w: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
?是使用/调用错误吗?漏洞?
任何指导表示赞赏。