我正在尝试使用docx4j(版本3.2.1)使用XML数据填充Word内容控件。我正在对此进行评估,以便将其用于发票生成。我们想要生成的文档并不复杂,所以这看起来对我很好。
我已经通过Word 2010开发工具创建了内容控件。这就是我尝试将XML注入docx(取自this example):
的方法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中准备模板,因为稍后这些模板必须由非技术用户编辑,如果可能的话,我不想用额外的工具来加重它们。
答案 0 :(得分:0)
您说您“通过Word 2010开发工具创建了内容控件”。除非你的意思是内容控制工具包,否则你需要使用那个或更好的OpenDoPE Word插件。不是两个。
这些工具将自定义xml部件添加到docx中,并允许您通过XPath数据绑定将其与内容控件相关联。
然后,在运行时调用Docx4J.bind,docx4j会找到现有的自定义xml部件,并将其替换为您提供的包含运行时数据的xml文件。