java - Apache POI Word 添加字段

标签 java apache-poi

背景:使用 Microsoft Word 时,可以定义字段,然后将其替换为某些值。

例如添加以下内容,然后激活字段功能将显示文档的标题(在属性中定义)。

Word field

问题:在使用 Apache POI 生成 Word 文档时,有什么方法可以添加此类字段,以便最终用户看到正确的值(我还将提供这些字段的值)。我查看了 Document 对象上定义的方法,但没有看到任何有用的东西。仅在文档中写入此字符串是行不通的(很明显......)

编辑:某些字段的 XML 如下所示(在本例中为文档的作者)

<w:p w:rsidRDefault="00AB5E40" w:rsidR="009B15AD">
  <w:fldSimple w:instr=" AUTHOR \* MERGEFORMAT ">
    <w:r>
      <w:rPr>
        <w:noProof/>
      </w:rPr>
      <w:t>My Name</w:t>
    </w:r>
  </w:fldSimple>
</w:p>

最佳答案

回答我自己的问题,以防有人遇到类似的问题。正如 Gagravarr 指出的那样,没有为此提供高级 API,但通过查看 XML 结构,我得出了以下结论:

private static void addField(XWPFParagraph paragraph, String fieldName) {
    CTSimpleField ctSimpleField = paragraph.getCTP().addNewFldSimple();
    ctSimpleField.setInstr(fieldName + " \\* MERGEFORMAT ");
    ctSimpleField.addNewR().addNewT().setStringValue("<<fieldName>>");
}

使用手头的某个段落和字段名称调用此方法将在文档中呈现此字段(使用正确的值或使用 << fieldName >>)

关于java - Apache POI Word 添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919328/

相关文章:

java - JDialog 模式的问题(主窗口的鼠标事件均被触发和缓冲)

java - Android:如何获取绘制路径的区域大小?

java - 如何在 Java (Selenium) 设置中使用 Apache POI 多个线程(并行测试用例)同时访问同一个 Excel 文件?

java - 组合框中的 Apache POI 双值

java - 无法使用spring + apache-poi上传excel文件

java - 如何使用 Spring Boot 编写集成/系统测试以使用存储库测试服务

java - JUnit 测试 : Improvement to test case, 测试数组列表的长度?

java - 如何向通过 SendGrid(Java 中)从 Google App Engine 发送的电子邮件添加附件?

java - 如何在 Java 中找到 MS Word 文档的页面大小、页面高度和宽度?

android - 使用 Apache POI 在 Android 中读取 MS Excel 2010 文件