我需要在java中操作docx文档,我刚刚开始评估docx4j。到目前为止,我已经设法对我的文档执行一些操作(添加文本,删除段落,隔离文档的一部分......)但我仍然有管理Trackchanges(插入和删除)的问题。如果有人对这个问题有所了解,我将不胜感激,因为到目前为止this是我在这个问题上找到的最合适的文件。
为了说明这个问题,我将举例说明我想要实现的目标。我有以下平板OPC格式的docx:
<w:pPr>
<w:pStyle w:val="Normal"/>
</w:pPr>
<w:sdt>
<w:sdtContent>
<w:r>
<w:t>First deleted part</w:t>
</w:r>
</w:sdtContent>
</w:sdt>
<w:sdt>
<w:sdtContent>
<w:r>
<w:t>(</w:t>
</w:r>
<w:r>
<w:t>(second deleted part)</w:t>
</w:r>
</w:sdtContent>
</w:sdt>
我需要添加trackchanges(代码是由Word本身生成的,而不是以编程方式生成):
<w:pPr>
<w:pStyle w:val="Normal"/>
</w:pPr>
<w:customXmlDelRangeStart w:id="4" w:author="AddedProgramatically" w:date="2014-11-06T18:22:00Z"/>
<w:sdt>
<w:sdtContent>
<w:customXmlDelRangeEnd w:id="4"/>
<w:del w:id="5" w:author="AddedProgramatically" w:date="2014-11-06T18:22:00Z">
<w:r>
<w:delText>First deleted part</w:delText>
</w:r>
</w:del>
<w:customXmlDelRangeStart w:id="8" w:author="AddedProgramatically" w:date="2014-11-06T18:22:00Z"/>
</w:sdtContent>
</w:sdt>
<w:customXmlDelRangeEnd w:id="8"/>
<w:customXmlDelRangeStart w:id="9" w:author="AddedProgramatically" w:date="2014-11-06T18:22:00Z"/>
<w:sdt>
<w:sdtEndPr/>
<w:sdtContent>
<w:customXmlDelRangeEnd w:id="9"/>
<w:del w:id="10" w:author="AddedProgramatically" w:date="2014-11-06T18:22:00Z">
<w:r>
<w:delText>(second deleted part)</w:delText>
</w:r>
</w:del>
<w:customXmlDelRangeStart w:id="15" w:author="AddedProgramatically" w:date="2014-11-06T18:22:00Z"/>
</w:sdtContent>
</w:sdt>
<w:customXmlDelRangeEnd w:id="15"/>
<w:sdt>
<w:sdtContent>
<w:ins w:id="16" w:author="AddedProgramatically" w:date="2014-11-06T18:21:00Z">
<w:r>
<w:t>First inserted part</w:t>
</w:r>
</w:ins>
</w:sdtContent>
</w:sdt>
<w:sdt>
<w:sdtContent>
<w:ins w:id="19" w:author="AddedProgramatically" w:date="2014-11-06T18:21:00Z">
<w:r>
<w:t>(second inserted part)</w:t>
</w:r>
</w:ins>
</w:sdtContent>
</w:sdt>
在我的java代码中,我设法复制sdt并将其添加到最终文档中。我缺少的是最复杂的部分:添加trackchanges。到目前为止我的代码:
ObjectFactory factory = Context.getWmlObjectFactory();
CTTrackChange cttc = factory.createCTTrackChangeRange();
cttc.setParent(para);
cttc.setAuthor(userPhraseology);
final SdtRun copy = XmlUtils.deepCopy(sdt); // And now? How to add the trackchanges into the sdt?
非常感谢您的启发。