Я использую Apache POI для манипулирования файлами Microsoft Word .docx - т.е. открываю документ, который был изначально создан в Microsoft Word, изменяю его, сохраняю в новом документе.
Я заметил, что в новых абзацах, созданных Apache POI, отсутствует идентификатор сохранения ревизии , часто известный как RSID или rsidR . Это используется Word для определения изменений, внесенных в документ за один сеанс, скажем, между сохранениями. Это необязательно - пользователи могут отключить его в Microsoft Word, если захотят, - но на самом деле это есть практически у всех, поэтому почти в каждом документе полно RSID. Прочитайте это превосходное объяснение RSID , чтобы узнать больше об этом.
В документе Microsoft Word word/document.xml
содержит такие абзацы:
<w:p w:rsidR="007809A1" w:rsidRDefault="007809A1" w:rsidP="00191825">
<w:r>
<w:t>Paragraph of text here.</w:t>
</w:r>
</w:p>
Однако тот же абзац, созданный POI, будет выглядеть так в word/document.xml
:
<w:p>
<w:r>
<w:t>Paragraph of text here.</w:t>
</w:r>
</w:p>
Я понял, что могу заставить POI добавить RSID к каждому абзацу, используя такой код:
byte[] rsid = ???;
XWPFParagraph paragraph = document.createParagraph();
paragraph.getCTP().setRsidR(rsid);
paragraph.getCTP().setRsidRDefault(rsid);
Однако я не знаю, как мне генерировать RSID.
Есть ли у POI способ или генерировать и / или отслеживать RSID? Если нет, могу ли я гарантировать, что сгенерированный RSID не конфликтует с тем, который уже есть в документе?