Wie öffne und manipuliere ich Word Dokumente / Vorlagen in Java?

8

Ich muss ein .doc/.dot/.docx/.dotx öffnen (ich bin nicht wählerisch, ich möchte nur, dass es funktioniert), parse es für Platzhalter (oder etwas ähnliches), setze meine eigenen Daten, und dann generierte .doc/.docx/.pdf Dokument zurückgeben.

Und obendrein brauche ich die Werkzeuge, um das zu erreichen.

Ich habe nach etwas gesucht, das meine Bedürfnisse ruinieren würde, aber ich kann nichts finden. Tools wie Docmosis, Javadocx, Aspose usw. sind kommerziell. Von dem, was ich gelesen habe, Apache POI ist bei weitem nicht erfolgreich implementieren dies (sie haben derzeit keinen offiziellen Entwickler arbeiten an Word Teil des Frameworks).

Das Einzige, was den Trick ausmacht, ist OpenOffice UNO API. Aber das ist ein ziemlich großes Byte für jemanden, der diese API nie benutzt hat (wie ich).

Wenn ich also in dieses Thema einsteigen will, muss ich sicherstellen, dass ich auf dem richtigen Weg bin.

Kann mir jemand dazu einen Rat geben?

    
kensvebary 21.02.2012, 14:49
quelle

5 Antworten

23

Ich weiß, dass es lange her ist, seit ich diese Frage gestellt habe, und ich sagte, dass ich meine Lösung veröffentlichen würde, wenn ich fertig bin. Also hier ist es.

Ich hoffe, dass es jemandem irgendwann helfen wird. Dies ist eine vollständige Arbeitsklasse, und Sie müssen es nur in Ihre Anwendung einfügen und das Verzeichnis TEMPLATE_DIRECTORY_ROOT mit .docx-Vorlagen in Ihrem Stammverzeichnis platzieren.

Die Verwendung ist sehr einfach. Sie platzieren Platzhalter (Schlüssel) in Ihrer DOCX-Datei und übergeben dann den Dateinamen und die Map mit den entsprechenden Schlüssel / Wert-Paaren für diese Datei.

Viel Spaß!

%Vor%     
kensvebary 12.04.2012, 11:38
quelle
4

Da eine docx-Datei lediglich ein zip-Archiv von xml-Dateien (plus Binärdateien für eingebettete Objekte wie Bilder) ist, erfüllten wir diese Anforderung, indem wir die zip-Datei entpackten und die document.xml einer Template-Engine zuführten (wir verwendet freemarker ), der die Zusammenführung für uns vornimmt und dann das Ausgabedokument löscht, um die neue docx-Datei zu erhalten.

Das Vorlagen-Dokument ist dann einfach ein gewöhnliches Dokument mit eingebetteten Freimarker-Ausdrücken / Anweisungen und kann in Word bearbeitet werden.

Da das (Un-) Zippen mit dem JDK durchgeführt werden kann und Freemarker Open Source ist, entstehen keine Lizenzgebühren, nicht einmal für das Wort selbst.

Die Einschränkung besteht darin, dass dieser Ansatz nur docx- oder rtf-Dateien ausgeben kann und das Ausgabedokument denselben Dateityp wie die Vorlage hat. Wenn Sie das Dokument in ein anderes Format (z. B. PDF) konvertieren müssen, müssen Sie dieses Problem separat lösen.

    
meriton 21.02.2012 19:53
quelle
3

Am Ende habe ich mich auf Apache Poi 3.12 verlassen und Absätze verarbeitet (Absätze auch aus Tabellen, Kopf- / Fußzeilen und Fußnoten getrennt extrahiert, da solche Absätze von XWPFDocument.getParagraphs () ).

Der Verarbeitungscode ( ~ 100 Zeilen ) und Unit Tests sind hier auf github .

    
Fabrizio 07.08.2015 16:47
quelle
0

Ich war in mehr oder weniger der gleichen Situation wie Sie, ich musste eine ganze Reihe von MS Word Merge Templates auf einmal ändern. Nachdem ich viel gegoogelt hatte, um eine Java-Lösung zu finden, habe ich endlich Visual Studio 2010 Express installiert, das kostenlos ist und den Job in C # erledigt hat.

    
stbas 21.02.2012 19:33
quelle
0

Ich habe kürzlich ein ähnliches Problem behandelt: "Ein Werkzeug, das eine .docx-Vorlage akzeptiert, verarbeitet die Datei durch Auswertung des übergebenen Parameterkontexts und gibt als Ergebnis des Prozesses eine '.docx'-Datei aus."

Schließlich brachte uns Gott Scriptlet4dox :). Die wichtigsten Merkmale für dieses Produkt sind: 1. Groovy-Code-Injection als Skripte in Template-Datei (Parameter-Injection, etc.) 2. Schleife über Sammlungselemente in Tabelle

und so viele andere Funktionen. Aber als ich überprüft habe, dass das letzte Commit für das Projekt vor ungefähr einem Jahr durchgeführt wurde, ist es wahrscheinlich, dass das Projekt nicht für neue Features und neue Bugfixes unterstützt wird. das ist deine Wahl, es zu benutzen oder nicht.

    
Ehsan Soleimani 06.02.2017 11:13
quelle

Tags und Links