Apache POI: XWPFDocument Как копировать текст с комментариями из одного документа в другой - PullRequest
0 голосов
/ 11 сентября 2018

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 осталось старым, и я понятия не имею, как я могу это изменить, и не знаю, поможет ли это мне

...