docx4j:使用docx模板并替换MergeField变量

时间:2016-04-15 07:56:42

标签: docx4j

所以我试图使用docx4j。我制作了一个简单的模板,使用它并以编程方式替换值。

这是我的docx模板。

My Name is «myName»
I’m «myAge» years old.
My address is «myAddress»

当我点击切换字段代码时,它看起来像这样。

My Name is {MERGEFIELD myName \* MERGEFORMAT}
I’m {MERGEFIELD myAge \* MERGEFORMAT} years old.
My address is {MERGEFIELD myAddress \* MERGEFORMAT}

我不知道使用 MERGEFIELD ,但我试图使用它只是因为那是互联网目前使用的帖子。

这是我的代码。

  

def config = grailsApplication.config.template.invoiceSample as Map

     

def String templateFileName =   " $ {grailsApplication.config.template.dir} / $ {config.doc.templateFileName}"

     

WordprocessingMLPackage template = WordprocessingMLPackage.load(new File(templateFileName));

     

Map map = new HashMap();

     

map.put(新的DataFieldName(" @ myName")," Jean");

     

map.put(new DataFieldName(" @ myAge")," 30");

     

map.put(new DataFieldName(" @ myAddress")," Sampaloc");

     

org.docx4j.model.fields.merge.MailMerger.setMERGEFIELDInOutput(MailMerger.OutputField.KEEP_MERGEFIELD);

     

org.docx4j.model.fields.merge.MailMerger.performMerge(template,map,false);

     

template.save(新文件(" C:/temp/OUT_SIMPLE.docx"));

但是,它不会替换输出文件中的值。你能告诉我我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

我发现这个问题很容易解决。

这条线基本上会影响输出。

  

MailMerger.setMERGEFIELDInOutput(MailMerger.OutputField.KEEP_MERGEFIELD);

根据我的观察,这些选项执行以下操作:

  • MailMerger.OutputField.KEEP_MERGEFIELD - 用值替换字段,但您需要点击切换字段代码才能显示它。
  • MailMerger.OutputField.REMOVED - 代码将消失,但最重要的是,该值将被替换而无需单击切换字段代码
  • MailMerger.OutputField.AS_FORMTEXT_REGULAR - 老实说,我不知道它的作用,只是在单词中显示{FORMTEXT}。
  • MailMerger.OutputField.DEFAULT - 与REMOVED做同样的事情。

如果您认为我说错了,请随时更新我的​​回答。