Docx4j - So ersetzen Sie Platzhalter durch Wert

Ich habe versucht, die Beispiele durchzuarbeitenFieldMailMerge undVariableReplace kann aber scheinbar keinen lokalen Testfall zum Laufen bringen. Ich versuche grundsätzlich, mit einem docx-Vorlagendokument zu beginnen und x docx-Dokumente aus dieser einen Vorlage mit den ersetzten Variablen zu erstellen.

Im Code untendocx4jReplaceSimpleTest() versucht, eine einzelne Variable zu ersetzen, schlägt jedoch fehl. Die $ {} -Werte in den Vorlagendateien werden im Rahmen der Verarbeitung entfernt, daher glaube ich, dass sie gefunden, aber aus irgendeinem Grund nicht ersetzt werden. Ich verstehe, dass es an der Formatierung liegen könnte, wie in den Kommentaren des Beispielcodes erläutert, aber zur Fehlerbehebung, nur um etwas zum Laufen zu bringen, versuche ich es trotzdem.

Im Code untendocx4jReplaceTwoPeopleTest()Ich versuche, es so zu machen, wie ich es für richtig halte, aber das ist nicht das Finden oder Ersetzen von irgendetwas. Es wird nicht einmal das $ {} aus der docx-Datei entfernt.

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") );
}

Die docx-Datei besteht aus folgendem Text (keine Formatierung erfolgt):

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

Beachten Sie, dass ich auch versuche, Person.Firstname mindestens zweimal zu ersetzen. Da der Nachname nicht einmal ersetzt wird, glaube ich nicht, dass dies irgendetwas damit zu tun hat, aber ich füge es nur für den Fall hinzu.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage