Apache poi版本:4.0
我有2个文档(docx),带有注释和格式。
如何从第一到第二复制所有文本(带有注释)?
当我阅读here时,我们无法通过XWPFDocument编写comments.xml部分-它是开放的注释部分,仅供阅读。
当我将一个文档复制到第二个like this时:
private void copyDoc(XWPFDocument to_document, XWPFDocument from_document) {
for (IBodyElement bodyElement : to_document.getBodyElements()) {
BodyElementType elementType = bodyElement.getElementType();
if (elementType.equals(BodyElementType.PARAGRAPH)) {
...
} else if (elementType.equals(BodyElementType.TABLE)) {
...
}
}
}
我使用段落并在注释部分中运行,但是在目标文件的comment.xml中没有注释。
所以我的文件已损坏,并且打开时出现错误(“有些地方没有注释”),其中有红色的注释部分。
有没有一种方法可以将所有注释正确地复制到一个doc文件中?
---更新---
我曾经用this example复制评论,但遇到了一些问题。
首先,我尝试从源文件中获取所有段落,并通过@ axel-richter方法获取所有注释。但是在结果文档中,我有2个文件的注释,其中一些具有相同的ID。
如果MS-Word打开文件没有问题-所有注释都正确,则LibreOffice会将每个相同ID注释写为一个。
例如:
结果:
什么时候,我重写了段落的副本并为comment_id制作了幻灯片(+10)。
CTP paragraph_object = insert_paragraph.getCTP();
if (!paragraph_object.getCommentRangeStartList().isEmpty()) {
CTMarkupRange comment_start = paragraph_object.getCommentRangeStartArray(0);
BigInteger current_comment_id = comment_start.getId();
BigInteger new_comment_id = current_comment_id.add(slide);
comment_start.setId(new_comment_id);
paragraph_object.getCommentRangeEndArray(0).setId(new_comment_id);
}
但是从段落开始,我无法更改commentReference和MS-Word打开的新结果docx,其中包含错误和插入的注释已损坏。
在Word文件的comments.xml和document.xml中,我具有所有具有新ID的新注释(在comment.xml中)和正确的commentStart / End(在document.xml中)。
但是commentReference仍然很老,我不知道如何更改它,也不知道它将对我有帮助