2016-04-15 86 views
1

所以我試圖使用docx4j。我做了一個簡單的模板,使用它並以編程方式替換th值。docx4j:使用docx模板並替換MergeField變量的值

這是我的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配置= grailsApplication.config.template.invoiceSample作爲地圖

DEF STRING templateFileName = 「$ {grailsApplication.config.template.dir}/$ {config.doc.templateFileName}」

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

Map map = new HashMap(); (新的DataFieldName(「@ myName」),「Jean」); (新的DataFieldName(「@ myAge」),「30」); (新的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(new File(「C:/temp/OUT_SIMPLE.docx」));

但是,它不會替換輸出文件中的值。你能告訴我我的代碼有什麼問題嗎?

回答

0

我發現這個問題很容易解決。

基本上這條線會影響輸出。

MailMerger.setMERGEFIELDInOutput(MailMerger.OutputField.KEEP_MERGEFIELD);

根據我的觀察,這些選項執行以下操作:

  • MailMerger.OutputField.KEEP_MERGEFIELD - 替換值的字段,但您需要點擊切換域代碼來揭示它。
  • MailMerger.OutputField。REMOVED - 代碼會消失,但最重要的價值將被替換,而無需單擊切換域代碼
  • MailMerger.OutputField.AS_FORMTEXT_REGULAR - 老實說,我不知道那是什麼,它只是顯示{FORMTEXT }這個詞。
  • MailMerger.OutputField.DEFAULT - 與REMOVED做同樣的事情。

如果您認爲我說錯了什麼,請隨時更新我的​​答案。