Шаблон Docx Docx4j заменяет текст в Java
Я новичок в Docx4j, и моя задача - заменить текст шаблона docx. Я прочитал руководство по началу работы с docx4j, но не думаю, что полностью понял всю концепцию. Ну, в любом случае... Я уже попробовал [разобранный шаблон Docx4j][1], который отлично работал с данным docx, но потом я получил ту же проблему, когда попробовал его на своем собственном шаблоне. Исключения говорят, что HashMap не содержат допустимые ключи или значения, и, следовательно, он не заменяет заполнители.
Я заменил
<w:proofErr w:type="spellEnd"/>
отключив проверку орфографии, но она все равно не сработала... И для запуска приложения также требуется довольно много времени.
Я не понял пример базы данных в Getting_Started.pdf, поэтому у меня заканчиваются варианты...
Как я могу просто заменить некоторые текстовые строки из документа?
РЕДАКТИРОВАТЬ: Я обнаружил, что если я добавлю текст в 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 и переписать отрывки, но потом все заработало. Затем я просто использовал replace (placeholder, xml) и заменил текст маршаллированного document.xml, затем снова распаковал его. Работал. Конец истории, трахни ночные сборки или сопоставления. Спасибо
2 ответа
Исходный код docx4j уже некоторое время находится на GitHub; этот репозиторий svn устарел.
Эквивалентный образец теперь называется VariableReplace. Этот код немного более эффективен, но вам нужно создать его самостоятельно или использовать текущую ночную сборку.
Вы, вероятно, найдете запуск VariablePrepare для решения вашей проблемы.
Поиск и замена кода заполнителя, встроенного в docx4j, прекрасно работает, но если у вас возникли проблемы с заполнителями, rsid
сущности, вы должны убедиться, что у вас отключена грамматика и проверка орфографии при сохранении вашего "шаблона" (т.е. исходного) документа. Это поможет предотвратить фрагментацию текста (обратите внимание, что вы, возможно, захотите отключить чтение корректуры, так как здесь и везде будут вставлены теги закладок).
После того как вы выполнили поиск и замену и получили новый / обновленный документ, вы можете достаточно легко снова включить проверку орфографии. Этот поток имеет больше о RSID: проверка орфографии rsid и проверка грамматики в сгенерированном XML