Шаблон docx Docx4j заменяет текст в Java

Я новичок в Docx4j, и моя задача - заменить некоторый текст шаблона docx. Я прочитал руководство по началу работы с docx4j, но не думаю, что полностью понял всю концепцию. Ну, в любом случае... Я уже пробовал [разборный шаблон Docx4j][1], который отлично работал с данным docx, но затем у меня возникла та же проблема, когда я попробовал его самостоятельно template Исключения говорят, что HashMap не содержит действительных ключей или значений , и поэтому он не заменяет заполнители.

я заменил

<w:proofErr w:type="spellEnd"/>

отключив проверку орфографии, но это все равно не сработало... Да и запуск приложения занимает довольно много времени.

Я не понял пример с привязкой данных в файле Getting_Started.pdf, поэтому у меня заканчиваются варианты...

Как я могу просто заменить некоторые строковые тексты из docx?

РЕДАКТИРОВАТЬ: я обнаружил, что если я добавлю некоторый текст в unmarshallFromTemplate.docx и сохраню его, он не заменит новые строки текста. - Теги каким-то образом разделены на несколько тегов:

<w:p w:rsidR="002512F8" w:rsidRDefault="002512F8" w:rsidP="002512F8"><w:r><w:t>My</w:t></w:r><w:r w:rsidR="001A5174"><w:t xml:space="preserve"> favourite ice cream is ${DEGREE</w:t></w:r><w:r><w:t>}.</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/></w:p>

редактирование текста в document.xml и добавление отсутствующей информации не очень помогло.

в любом случае, вот document.xml Template.docx, который я использую: http://uploaded.net/file/vz4qr23o

РЕДАКТИРОВАТЬ 2:

Ну, ребята. Нашел для себя вполне подходящий обходной путь и не знаю, почему так долго разбирался. Как я уже говорил: пробеги разделились, и, на мой взгляд, причиной этого были ${}. Поэтому я просто поставил # перед моими заполнителями и переписал каждый заполнитель, чтобы все это было за один прогон.

Приходилось пару раз переключаться на document.xml и переписывать отрывки, но потом заработало. Затем я просто использовал замену (заполнитель, xml) и заменил текст упорядоченного документа document.xml, а затем снова распаковал его. Работал. Конец истории, к черту ночной билд или маппинг. Спасибо


person user2286154    schedule 16.04.2013    source источник
comment
Пожалуйста, заполните этот вопрос всеми необходимыми данными; размещение ссылки на другие форумы, на которых вы спрашивали, не является хорошей практикой.   -  person Dariusz    schedule 16.04.2013


Ответы (2)


Исходный код docx4j уже некоторое время находится на GitHub; этот репозиторий svn устарел.

Эквивалентный пример теперь называется VariableReplace. . Этот код немного более эффективен, но вам нужно собрать его самостоятельно или использовать текущую ночную сборку.

Вы, вероятно, обнаружите запуск VariablePrepare решает вашу проблему.

person JasonPlutext    schedule 16.04.2013
comment
Привет! Спасибо за совет. Я попытался заставить его работать, как в этом потоке: stackoverflow.com/questions/15664726 / Но это все еще не работает. Теперь я даже не вижу свою текстовую область, где хранятся мои заполнители. Нет ли более простого подхода? Может быть, просто замена обычного текста? - person user2286154; 16.04.2013
comment
Вам нужно разархивировать docx и опубликовать содержимое word/document.xml, чтобы мы могли видеть, о чем вы говорите. Отредактируйте вопрос и добавьте его туда. - person JasonPlutext; 16.04.2013
comment
Я обнаружил, что ›эта ссылка‹ полезно также после того, как обнаружил, что ссылка VariableReplace выше мертва - person StartupGuy; 12.10.2013
comment
См. сейчас github.com/ plutext/docx4j/blob/master/src/samples/docx4j/org/ - person JasonPlutext; 13.10.2013
comment
Работает для меня, довольно удивительно. Просто нужно было добавить filterSettings.setRemoveBookmarks(true); - person clemens; 07.11.2017

Код поиска и замены заполнителей, встроенный в docx4j, работает просто отлично, но если у вас возникают проблемы с разбивкой заполнителей на rsid объектов, вам необходимо убедиться, что у вас отключена проверка грамматики и орфографии при сохранении вашего «шаблона» ( т.е. исходный) документ. Это поможет предотвратить фрагментацию ваших текстовых прогонов (обратите внимание, что вы также можете отключить корректуру, так как при этом теги закладок вставляются здесь и везде).

После того, как вы выполнили поиск и замену и получили новый/обновленный документ, вы можете достаточно легко снова включить проверку орфографии. В этой ветке больше информации об RSID: отключить проверку орфографии и грамматики rsid в сгенерированном xml

person Ben    schedule 12.06.2013