如何将自定义 XML 存储部分添加到 Word 文档 - 最好使用 docx4j
How to add custom XML storage part to Word doc - preferrably with 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 的 CustomXmlDataStoragePart?或者 should/can 我直接在 Word 中做这个?
注意:我决定直接在 Word 中准备模板,因为以后这些模板必须由非技术用户编辑,如果可能的话,我不想给他们增加额外的工具负担。
你说你"created the content control through Word 2010 dev tools"。除非你指的是内容控制工具包,否则你需要使用它或更好的 OpenDoPE Word 插件。两者都不是。
这些工具将自定义 xml 部分添加到 docx 中,并允许您通过 XPath 数据绑定将其与内容控件相关联。
然后,当您在运行时调用 Docx4J.bind 时,docx4j 会找到现有的自定义 xml 部分,并将其替换为您提供的包含运行时数据的 xml 文件。
我正在尝试使用 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 的 CustomXmlDataStoragePart?或者 should/can 我直接在 Word 中做这个?
注意:我决定直接在 Word 中准备模板,因为以后这些模板必须由非技术用户编辑,如果可能的话,我不想给他们增加额外的工具负担。
你说你"created the content control through Word 2010 dev tools"。除非你指的是内容控制工具包,否则你需要使用它或更好的 OpenDoPE Word 插件。两者都不是。
这些工具将自定义 xml 部分添加到 docx 中,并允许您通过 XPath 数据绑定将其与内容控件相关联。
然后,当您在运行时调用 Docx4J.bind 时,docx4j 会找到现有的自定义 xml 部分,并将其替换为您提供的包含运行时数据的 xml 文件。