java - Docx4j 添加 w :sdt content control programmatically

标签 java ms-word openxml docx docx4j

我正在构建一个小型 Java 程序来测试我需要用 docx4j 覆盖的所有“文档相关”功能以满足我的项目要求。摘要:能够创建带有“内容控件”的模板,这些模板将作为“原始模板”提供给用户。让用户增强它们,最终用数据填充它们。由于“重复和条件”功能,我正在处理“docx4j”。

这是我的进步,以编程方式:

1) 创建一个空白文档(完成)

2) 添加带有 xml 数据的自定义 xml 部分(发票示例中的 part3.xml)。 (完成)

3) 添加带有 xml xpaths 引用的自定义 xml 部分(发票示例中的 part4.xml)。 (完成)

4) 添加内容控件(PENDING)

它必须类似于发票示例中的摘录:

<w:sdt>
  <w:sdtPr>
    <w:alias w:val="Customer name" />
    <w:tag w:val="od:xpath=x1&customer name=customer name" />
    <w:id w:val="1418037941" />
    <w:placeholder>
      <w:docPart w:val="DefaultPlaceholder_22675703" />
    </w:placeholder>
    <w:dataBinding w:xpath="/invoice[1]/customer[1]/name[1]" w:storeItemID="{8B049945-9DFE-4726-9DE9-CF5691E53858}" />
    <w:text />
  </w:sdtPr>
  <w:sdtContent>
    <w:p>
      <w:r>
        <w:t>Joe Bloggs</w:t>
     </w:r>
    </w:p>
  </w:sdtContent>
</w:sdt>

这是我的问题:如何生成这个 xml?可以通过 Java 代码完成还是只能从 Word 完成? “1418037941”和“DefaultPlaceholder_22675703”值是什么以及如何生成?我想我不能“发明”它们,并且在其他地方被引用。 我在 MainDocumentPart 类中寻找一些方法来这样做,但找不到它。 我是不是误会了什么?

其他步骤对我来说几乎没问题:

5) 执行“预处理”(完成)

6) 执行“处理”(完成)

7) 执行“剥离”(完成,除了移除 repat 标签)

非常感谢您的帮助! 大卫

最佳答案

您当然可以使用 docx4j 以编程方式创建内容控件。也就是说,创建"template"的常用方法是使用创作工具,例如 this one .

回答您的具体问题:-

  • 您可以省略 w:placeholder。

  • 规范说 w:id 是 xsd:int 类型,是介于 -2147483648 和 2147483647。你可以随机生成它,或者你 may be able也将其省略。

关于java - Docx4j 添加 w :sdt content control programmatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12903781/

相关文章:

c# - 自动化 Microsoft Word 时的 RPC_E_SERVERFAULT

list - Word 2010 从多级列表中创建目录

c# - `WordprocessingDocument.Open` 后损坏的文件

java - springboot api 不工作。

java - Selenium 没有检测到 IE 中的第二个窗口

java - 在 T 类型的泛型类上,如果 T 是 List<E> 如何找到 E

java - java中Deque pollFirst()的返回结果

c# - 如何在 MS Word 中用红色波浪线给文本加下划线?

java - docx4j 中的 RangeFinder ("CTBookmark"、 "CTMarkupRange") 是什么?

java - 如何修复 Java2Word 生成的 ms-word 文档中的错误