Как добавить пользовательскую часть для хранения XML в Word doc - желательно с docx4j

Я пытаюсь заполнить элемент управления содержимым Word данными XML с помощью docx4j (версия 3.2.1). Я оцениваю это, чтобы использовать это для генерации счета. Документы, которые мы хотим сгенерировать, не очень сложны, поэтому для меня это хороший подход.

Я создал управление контентом с помощью инструментов разработки Word 2010. Вот как я пытаюсь внедрить XML в docx (взятый из этого примера):

WordprocessingMLPackage wordMLPackage = Docx4J.load(new File(input_DOCX));

FileInputStream xmlStream = new FileInputStream(new File(input_XML));

Docx4J.bind(wordMLPackage, xmlStream, Docx4J.FLAG_BIND_INSERT_XML & Docx4J.FLAG_BIND_BIND_XML);

Я получаю следующее исключение:

org.docx4j.openpackaging.exceptions.Docx4JException: Couldn't find CustomXmlDataStoragePart! exiting..
    at org.docx4j.Docx4J.bind(Docx4J.java:300)
    at org.docx4j.Docx4J.bind(Docx4J.java:271)

Как я могу добавить CustomXmlDataStoragePart с docx4j, если он еще не существует? Или я должен / могу ли я сделать это в Word напрямую?

Примечание: я решил подготовить шаблоны в Word напрямую, потому что позже эти шаблоны должны редактироваться нетехническими пользователями, и я не хочу обременять их дополнительными инструментами, если это возможно.

1 ответ

Решение

Вы говорите, что "создали управление контентом с помощью средств разработки Word 2010". Если вы не имеете в виду инструментарий управления контентом, вам нужно использовать его или лучше, любой из дополнений OpenDoPE Word. Не оба.

Эти инструменты добавляют пользовательскую часть XML в docx и позволяют связать ее с вашими элементами управления контентом через привязки данных XPath.

Затем, когда во время выполнения вы вызываете Docx4J.bind, docx4j находит эту существующую пользовательскую часть XML и заменяет ее предоставленным вами файлом XML, который содержит ваши данные времени выполнения.

Другие вопросы по тегам