Apache poi версия: 4.0
У меня есть 2 документа (docx) с комментариями и форматированием.
Как скопировать весь текст (с комментариями) с первого на второй?
Пока я читаю здесь мы не можем написать раздел comments.xml от XWPFDocument - это открытый раздел комментариев только для чтения.
Когда я скопировал один документ во второй как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)) {
...
}
}
}
Я беру абзацы и работаю с разделами комментариев, но у меня нет их комментариев в comments.xml файла назначения.
Так что мой файл повреждени открытие с ошибками (стиль «где нет комментариев для некоторого уведомления»), где у меня есть красные разделы неработающих комментариев.
Есть ли способ исправить копирование всех комментариев в один файл документа?
--- ОБНОВЛЕНО ---
Я использовал этот пример для копирования комментариев, но у меня есть некоторые проблемы.
Сначала я попытался взять все параграфыиз исходных файлов и всех комментариев методом @ axel-richter.Но в результате doc, где у меня есть комментарии из 2 файлов, некоторые из них имеют одинаковый идентификатор.
И если MS-Word открывает файл без проблем - все комментарии верны, LibreOffice записывает каждый комментарий с одинаковым идентификатором как один.
Например:
- комментарий от 1.docx с идентификатором 1 и текстом «некоторый комментарий 1»
- комментарий от 2.docx с идентификатором 1 и текстом"some comment 2"
Результат:
- "Некоторый текст из 1.docx из полученного docx" <- с комментарием "некоторый комментарий 1 некоторый комментарий 2" </li>
- "Некоторый текст из 2.docx из полученного документа" <- с комментарием "некоторый комментарий 1 некоторый комментарий 2" </li>
Когда я переписываю копирование абзацев и делаю слайд (+10)для comment_id.
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 с ошибками и неработающими вставленными комментариями.
В comments.xml и document.xml файла слов у меня есть все новые комментарии с новым идентификатором (в comments.xml) и корректным commentStart / End (в document.xml).
НоcommentReference осталось старым, и я понятия не имею, как я могу это изменить, и не знаю, поможет ли это мне