Docx4j - Как заменить заполнитель значением

Я пытался работать с примерамиFieldMailMerge а такжеVariableReplace но не могу запустить локальный тестовый пример. Я в основном пытаюсь начать с одного документа шаблона docx и заставить его создавать документы x docx из этого одного шаблона с заменой переменных.

В коде нижеdocx4jReplaceSimpleTest() пытается заменить одну переменную, но не может это сделать. Значения $ {} в файлах шаблонов удаляются как часть обработки, поэтому я считаю, что он находит их, но по какой-то причине не заменяет их. Я понимаю, что это может быть связано с форматированием, как объяснено в комментариях примера кода, но для устранения неполадок, просто чтобы что-то работало, я все равно пробую.

В коде нижеdocx4jReplaceTwoPeopleTest()Я хочу получить работу, я пытаюсь сделать это так, как я считаю, правильным способом, но это ничего не находит и не заменяет. Он даже не удаляет $ {} из файла docx.

public static void main(String[] args) throws Exception
{
    docx4jReplaceTwoPeopleTest();
    docx4jReplaceSimpleTest();
}

private static void docx4jReplaceTwoPeopleTest() throws Exception
{
      String docxFile = "C:/temp/template.docx";

      WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(docxFile));

      List<Map<DataFieldName, String>> data = new ArrayList<Map<DataFieldName, String>>();

      Map<DataFieldName, String> map1 = new HashMap<DataFieldName, String>();
      map1.put(new DataFieldName("Person.Firstname"), "myFirstname");
      map1.put(new DataFieldName("Person.Lastname"), "myLastname");
      data.add(map1);

      Map<DataFieldName, String> map2 = new HashMap<DataFieldName, String>();
      map2.put(new DataFieldName("Person.Firstname"), "myFriendsFirstname");
      map2.put(new DataFieldName("Person.Lastname"), "myFriendsLastname");
      data.add(map2);

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

      int x=0;
      for(Map<DataFieldName, String> docMapping: data) 
      {
        org.docx4j.model.fields.merge.MailMerger.performMerge(wordMLPackage, docMapping, true);
        wordMLPackage.save(new java.io.File("C:/temp/OUT__MAIL_MERGE_" + x++ + ".docx") );
      }
}

private static void docx4jReplaceSimpleTest() throws Exception
{
      String docxFile = "C:/temp/template.docx";

      WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(docxFile));

      HashMap<String, String> mappings = new HashMap<String, String>();
      mappings.put("Person.Firstname", "myFirstname");
      mappings.put("Person.Lastname", "myLastname");

      MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
      documentPart.variableReplace(mappings);

    wordMLPackage.save(new java.io.File("C:/temp/OUT_SIMPLE.docx") );
}

Файл docx состоит из следующего текста (форматирование не выполняется):

This is a letter to someone
Hi ${Person.Firstname} ${Person.Lastname},
How are you?
Thank you again. I wish to see you soon ${Person.Firstname}
Regards,
Someone

Обратите внимание, что я также пытаюсь заменить Person.Firstname как минимум вдвое. Поскольку фамилия даже не заменена, я не думаю, что это как-то связано с этим, но я добавляю ее на всякий случай.

Ответы на вопрос(2)

Ваш ответ на вопрос