2016-04-15 4 views
1

Итак, я пытаюсь использовать docx4j. Я сделал простой шаблон, использую его и программно заменяю.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, но я пытался использовать его просто потому, что это то, что пост в интернете в настоящее время используют.

Вот мой код.

Защиту конфиг = grailsApplication.config.template.invoiceSample как Map

Защиту Строка templateFileName = "$ {grailsApplication.config.template.dir}/$ {config.doc.templateFileName}"

WordprocessingMLPackage template = WordprocessingMLPackage.load (новый файл (templateFileName));

Map map = new HashMap();

map.put (новое имя DataFieldName ("@ myName"), "Jean");

map.put (новое имя DataFieldName ("@ myAge"), "30");

map.put (новое имя DataFieldName ("@ myAddress"), "Sampaloc");

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

org.docx4j.model.fields.merge.MailMerger.performMerge (шаблон, карта, ложь);

template.save (новый файл ("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 - делает то же самое с УДАЛЕННЫМ.

Пожалуйста, не стесняйтесь обновлять мой ответ, если вы думаете, что я сказал что-то не так.

 Смежные вопросы

  • Нет связанных вопросов^_^