如何将自定义XML存储部件添加到Word doc - 最好使用docx4j

时间:2015-07-23 09:12:28

标签: java ms-word openxml docx docx4j

我正在尝试使用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中准备模板,因为稍后这些模板必须由非技术用户编辑,如果可能的话,我不想用额外的工具来加重它们。

1 个答案:

答案 0 :(得分:0)

您说您“通过Word 2010开发工具创建了内容控件”。除非你的意思是内容控制工具包,否则你需要使用那个或更好的OpenDoPE Word插件。不是两个。

这些工具将自定义xml部件添加到docx中,并允许您通过XPath数据绑定将其与内容控件相关联。

然后,在运行时调用Docx4J.bind,docx4j会找到现有的自定义xml部件,并将其替换为您提供的包含运行时数据的xml文件。