wie erstellen Sie ein neues word aus Vorlage mit docx4j
Ich habe Folgendes Szenario und brauchen einige Ratschläge:
Dem Benutzer wird die Eingabe eines word-Dokuments als Vorlage, und geben Sie einige Parameter in der runtime, so kann ich die Abfrage meiner Datenbank und Daten zum ausfüllen des Dokuments.
Also, es gibt zwei grundlegende Dinge, die ich tun muss:
- Ersetzen Sie jede Taste in das Dokument mit dem entsprechenden Ergebnis aus dem aktuellen Abfrage-Linie.
- "Merge" (Kopie? doppelte?) das vorhandene Dokument unverändert in sich selbst (append), je nachdem, wie viele Zeilen habe ich aus der Abfrage, und ersetzen Sie die Schlüssel aus dieser neuen Kopie mit der nächsten Zeile Werte.
Was ist die beste aprroach, dies zu tun? Ich habe es geschafft, den ersetzen Teil für die nun, mit der unmarshallfromtemplate bietet es eine hashmap.
Aber dieser Weg ist ein bisschen schwierig, weil ich brauchen, um hinzuzufügen, "${variable_name}" in das Dokument, und manchmal word trennt "${" und "}" in verschiedenen tags, verursacht Probleme.
Ive Lesen Sie über die benutzerdefinierte xml binding, aber nicht verstehen es vollständig. Ich brauche zum erstellen einer benutzerdefinierten XML, injizieren es in dem Dokument (alle dieses un-runtime) und rufen Sie die applybindings?? Wenn dies wahr ist, wie kann ich das binden der Felder im Dokument mit der xml ? Mit Namen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
docx4j enthält VariablePrepare, kann tidy up Ihre Eingabe docx-Format, so dass Sie Ihre Schlüssel nicht verteilt über getrennte Läufe.
Aber, Sie wäre immer noch besser ausschalten zu content control data binding, besonders wenn Sie wiederholt werden (man denke z.B. an die Einzelposten einer Rechnung). Offenlegung: ich champion dieser Ansatz in docx4j.
Zu erlassen, um die content-control-data-binding-Ansatz:
Traum ein XML-format, die Sinn macht für Ihre Daten und code schreiben, konvertieren Sie die Ergebnisse Ihrer Datenbank-Abfrage in diesem format.
ändern Sie Ihre Vorlage, so dass die content-Steuerelemente gebunden sind, um Elemente in Ihrer XML-Dokument. normalerweise würden Sie verwenden eine authoring-add-in für Word zu helfen, mit diesem. (Die Technologie, die Microsoft verwendet, für die Bindung ist XPath, so wie Sie binden, hängt von Ihrer XML-Struktur, aber, ja, Sie würden in der Regel binden sich an den element-Namen oder-ID).
nun haben Sie Ihre XML-Datei und ein geeignetes intput docx, ContentControlsMergeXML die den code enthält, müssen Sie erstellen eine Instanz-Dokument zur Laufzeit. Es gibt auch eine version für die servlet-Umgebung bei https://github.com/plutext/OpenDoPE-WAR
Als alternative zu 1 & 2, gibt es auch org.docx4j.Modell.datastorage.migration.FromVariableReplacement in den aktuellen nightlies, die können konvertieren Sie Ihre vorhandenen "${" Dokument. Nur mit einem standardisierten Ziel-XML-format wenn.
Wenn Sie weitere Fragen haben, gibt es ein forum diesem Thema gewidmet an http://www.docx4java.org/forums/data-binding-java-f16/