在 Sdt Content 中编辑 MS Word“文档信息”字段 by docx4j

Editing MS Word "Document Info" field in Sdt Content by docx4j

提问人:Michael 提问时间:6/29/2023 更新时间:6/30/2023 访问量:66

问:

我有一个 docx 文档的模板,使用 docx4j 我想更改 .包含MS Word“文档信息”字段中的文档标题,该标题显示在页眉和第一页上。 不幸的是,当我尝试更改 XML 头文件中的值时,生成的文档中的值不会更新。在没有的情况下编辑其他元素对我来说效果很好。Sdt ContentSdt Block<w:t><w:sdtContent><w:t>Sdt Block

我想问一下,如何更新包含“文档信息”字段的文本? 这些标题和首页字段在源文件中如何相互关联(它们始终显示相同的值)?Std Content

docx4j

评论


答:

1赞 JasonPlutext 6/30/2023 #1

这样的 SDT 将如下所示:

<w:sdt>
  <w:sdtPr>
    <w:alias w:val="Title"/>
    <w:dataBinding w:prefixMappings="xmlns:ns0='http://purl.org/dc/elements/1.1/' xmlns:ns1='http://schemas.openxmlformats.org/package/2006/metadata/core-properties' " w:xpath="/ns1:coreProperties[1]/ns0:title[1]" w:storeItemID="{6C3C8BC8-F283-45AE-878A-BAB7291924A1}"/>
    <w:text/>
  </w:sdtPr>
  <w:sdtContent>
    <w:p>
      <w:r>
        <w:t>My title</w:t>
      </w:r>
    </w:p>
  </w:sdtContent>
</w:sdt>

请注意 databinding 元素;属性为 w:xpath=“/ns1:coreProperties[1]/ns0:title[1]”

Word 将尝试从其相应的存储区(由 w:storeItemID 提供)更新任何具有数据绑定元素的 SDT 的内容。(也就是说,仅当没有数据绑定元素时,才可以按照所描述的方式更新文本)

在本例中,它使用在 /docProps/core.xml 中找到的内容更新此 SDT,如下所示:

<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" >
  <dc:title>My title</dc:title>

有关如何使用 docx4j 处理该部件的线索,请参阅 https://github.com/plutext/docx4j/blob/VERSION_11_4_8/docx4j-samples-docx4j/src/main/java/org/docx4j/samples/DocProps.java

评论

0赞 Michael 7/3/2023
感谢您清晰全面的解释,澄清了我的问题。