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

问题描述 投票:0回答:2

我正在尝试使用 docx4j(版本 3.2.1)用 XML 数据填充 Word 内容控件。我正在对此进行评估,以便将其用于发票生成。我们想要生成的文档不是很复杂,所以这对我来说似乎是一个很好的方法。

我通过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中准备模板,因为以后这些模板必须由非技术用户编辑,如果可能的话,我不想给他们增加额外的工具负担。

java ms-word openxml docx docx4j
2个回答
1
投票

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

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

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


0
投票

对于像我一样遇到这个帖子的人。此更新可能会有所帮助,因为自原始响应中提到的这些 2010 年工具以来,许多事情已经成熟。

从 Word 16 版本开始,制作模板时直接在 Word 中进行自定义 XML xpath 绑定变得更加容易。这是在打开 XML 映射侧窗格的开发人员选项卡中完成的。您只需通过单击下拉菜单并添加新的 xml 部分来加载自定义 xml。您的 XML 结构将出现,您可以通过右键单击并添加相关控件类型直接将元素作为内容控件添加到文档中,或者您可以先添加控件并使用映射面板将 xml 元素绑定到控件。

作为一个开始,这通常已经足够好了,并且在 ooxml 中调整在文档中出现内容控件的位置手动添加/编辑绑定并不困难。例如,如果您在 Word 中添加所需的所有内容控件并将文件另存为 docx,则可以将其作为 zip 存档打开并打开页眉/页脚/文档 xml。然后搜索 ,它是内容控件属性的开始标记。 其可选子项是

如果您的 customXML 不需要命名空间,则不需要 prefiMappings 属性。有关其属性的更多具体详细信息,请参阅 learn.microsoft.com 数据绑定文档

© www.soinside.com 2019 - 2024. All rights reserved.