Где информация List хранится в XWPFDocument ApachePoi? - PullRequest
0 голосов
/ 18 января 2020

Я хочу объединить два или более файлов docx (добавлять их друг за другом) или переместить одну часть документа (XWPFParagraph) в другое место.

Проблема в том, что списки всегда прерываются после такой операции , Скажем, у нас есть листинг в документе с порядковыми номерами, тогда как у нас есть другой листинг в другом документе, в котором есть маркеры или буквы. Чем после копирования все маркеры становятся числами (или худшими числами, начинающимися с того места, где заканчивался предыдущий листинг).

Я пробовал несколько решений:
- обход BodyElements и копирование параграфов и таблиц с помощью рука, как здесь .
- присоединение нового тела к существующему, как здесь здесь

Помимо стилей, ограниченных областью страницы, они работают хорошо. Но списки никогда. Означает ли это, что листинговые символы хранятся в виде информации области страницы (в противном случае они будут успешно скопированы с XWPFParagraph)? Если да, то чем, почему и где?

Я копался в javado c: https://poi.apache.org/apidocs/dev/org/apache/poi/xwpf/usermodel/XWPFDocument.html
Но ничего не смог найти в списках.

1 Ответ

2 голосов
/ 18 января 2020

Нумерации Word (нумерованные списки, но также списки с маркерами) в формате Office Open XML хранятся в /word/numbering.xml архива *.docx ZIP. Есть элементы abstractNum, описывающие формат списка, и элементы num, ссылающиеся на abstractNum. numId элементов num упоминаются в параграфах /word/document.xml, чтобы установить, какие форматы нумерации должны использоваться в этом параграфе. Параграфы, ссылающиеся на один и тот же numId, находятся в одном списке. Параграфы, ссылающиеся на разные numId, находятся в разных списках.

В apache poi есть XWPFNumbering , представляющий часть документа /word/numbering.xml и XWPFAbstractNum , представляющий abstractNum .

До сих пор нет способа создать XWPFAbstractNum с нуля без использования классов ooxml-schemas низкого уровня.

Также, насколько я знаю, не существует простого способа слияния /word/numbering.xml документируют части различных Word документов из-за необходимости обработки различных Id s в /word/numbering.xml, а также их вхождений в /word/document.xml. Это очень сложно, и я не знаю ни одной бесплатной библиотеки, которая могла бы сделать это правильно.

В общем, насколько я знаю, не существует простого способа объединить разные Word документы из-за сложной хранение в Word форматах файлов. Все предоставляемые возможности с использованием бесплатного кода являются лишь наполовину полезными (обход и копирование), если не ошибаются и бесполезны (просто присоединение нескольких тел документа один за другим) вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...