【问题标题】:Docx4j - Replacing Word merge field with HTML contentDocx4j - 用 HTML 内容替换 Word 合并字段
【发布时间】:2015-01-24 16:04:50
【问题描述】:

我正在尝试用 HTML 内容替换 Word 合并字段“测试”:

String myText = "<html><body><h1>Hello</h1></body></html>"; 

使用 Docx4j。

  String myText = "<html><body><h1>Hello</h1></body></html>";
  try {
        WordprocessingMLPackage docxOut =
                WordprocessingMLPackage.load(new java.io.File("/tmp/template.docx"));
        Map<DataFieldName, String> data = new HashMap<>();
        data.put(new DataFieldName("test"), myText);
        org.docx4j.model.fields.merge.MailMerger.performMerge(docxOut, data, true);
        docxOut.save(new java.io.File("/tmp/newTemplate.docx"));
    } catch (Docx4JException e) {
        LOGGER.error(e.getMessage());
    }

因此,我的输出 (newTemplate.docx) 被替换为

"<html><body><h1>Hello</h1></body></html>" 

不会被解释为 HTML。我尝试添加:

docxOut.getContentTypeManager().addDefaultContentType("html", "text/html");

但它仍然没有工作。我什至不确定在替换 Word 合并字段时解释 HTML 是否可以使用 Docx4j 完成,或者我是否遗漏了什么。

欢迎任何帮助。

【问题讨论】:

    标签: html docx docx4j mergefield


    【解决方案1】:

    您可以使用 OpenDoPE 方法将内容控件绑定到包含转义 XHTML 的自定义 XML 元素。

    【讨论】:

    • 这是否意味着Docx4j单独无法注入html?
    • 这意味着如果你想自动转换 XHTML,而不是 MERGEFIELD,你应该使用 docx4j 来做内容控制数据绑定。或者,您可以使用 ImportXHTML 代码手动转换 XHTML。
    • 我也想过,但是 xhtmlImporterImpl.convert(htmlContent, null)) 返回一个 List,而我需要使用 Map 替换合并字段。我没有在 XHTMLImporterImpl 中找到可以返回字符串的方法,除非有办法从 List 中获取字符串?
    • @JennaSMITH 让 XHTML 导入器返回一个字符串是没有意义的,因为您需要将 XHTML 实体解析为正确的 docx 结构(即图像、段落、运行等)——XHTML 导入器代码返回这些实体的集合,您可以将其写入 docx 文件以代替相关的合并字段。
    • @JennaSMITH 明白了。邮件合并代码旨在用文本内容替换占位符。但正如您所发现的,这对于导入的标记是不够的:您需要自定义代码来将邮件合并字段占位符替换为相关实体。
    猜你喜欢
    • 2014-01-09
    • 2014-02-02
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多