Как добавить пользовательскую часть для хранения 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, который содержит ваши данные времени выполнения.