Erstellung von Word-Dokumenten in Java

7

Ich möchte ein Word-Dokument mit einer Vorlage erstellen, einige Variablen (Felder) ersetzen und als neues Word-Dokument speichern.

Ich dachte, Apache POI zu verwenden, Ссылка ist es das beste für diesen Zweck? Kannst du deine Eindrücke davon teilen?

    
Eran Medan 02.01.2010, 08:57
quelle

8 Antworten

8

Ich habe vorher mit POI gearbeitet und kann Word-Dokumente erstellen. Aber der Teufel steckt im Detail.

Word hat Tausende von Features: Sie können nummerierte Listen ab # 13 mit negativen Einzügen in zwei verbundene Zellen einer Tabelle einfügen, die in einer anderen Tabelle enthalten ist, die selbst Teil einer Aufzählungsliste ist ... Sie erhalten die Idee. Wenn die POI-Dokumentation besagt, dass es sich um eine in Arbeit befindliche Arbeit handelt, spiegelt das wider, was wahrscheinlich ein ewiger Zustand des Versuchs sein wird, der (uns undokumentierten) Spezifikation von Word nachzukommen.

Dokumente mit einem vernünftig "normalen" Satz gebrauchter Features werden von POI gut unterstützt, deren Schnittstellen und Methoden vernünftig und konsistent sind, aber manchmal ein wenig Arbeit erfordern. Aber wie Pascal sagt, werden auch Dokumente mit nicht zu vielen Features von RTF unterstützt. Ich habe fast keine Erfahrung, RTF zu machen, aber es ist wahrscheinlich ein bisschen einfacher als die Arbeit mit POI.

Wenn Sie in einer Umgebung oder für einen Kunden arbeiten, der darauf besteht, dass Ihre produzierten Dokumente .DOC anstatt .RTF sind, dann ist POI Ihre einzige Wahl, es sei denn, Sie können einen Schritt einführen, in dem Sie einen verwenden bisschen Office-Automatisierung, um RTF in DOC zu konvertieren.

Update: Ich habe in der Zwischenzeit noch ein paar Ideen gehabt.

Das Verwenden von POI oder das Erstellen von RTF-Dokumenten ist etwas, was Sie auf praktisch jeder Plattform tun können. In meinem Job laufen auf allen Servern, die solche Prozesse ausführen, beispielsweise Linux.

Im wahrscheinlichsten Fall, dass Ihre Programme unter Windows laufen, gibt es jedoch noch eine Alternative: Jacob Ссылка

Jacob ist eine COM Schnittstelle für Java; Es ermöglicht Ihnen im Wesentlichen Windows-Programme wie Word und Excel "fern zu steuern". Das Dokument, mit dem ich oben verlinkt habe, ist nicht auf Jacobs eigener Website, sondern auf einer einzigen Seite mit "Cookie-Cutter" -Rezepten für die Verwendung von Jacob. Das Projekt selbst ist auf SourceForge: Ссылка Aber die Leute behaupten, und zu Recht, dass die Dokumentation ein bisschen fehlt.

Jacob hat den Vorteil gegenüber allen anderen Lösungen, die Sie mit den "echten" Word- und damit allen Funktionen von Word zu tun haben. Dies wäre eine Alternative, wenn es Detailaspekte Ihres Dokuments gibt, die nicht mit POI oder über das RTF-Format behandelt werden können.

    
Carl Smotricz 02.01.2010, 10:47
quelle
4

Das ist natürlich viel zu spät. Aber seit 2013 gibt es eine viel bessere, flexiblere Lösung für die Erstellung von Word-Dokumenten.

Ссылка

Ich hatte viel mehr Glück mit docx4j als mit POI.

    
Yonkee 18.09.2014 19:42
quelle
3

Wenn Sie eine Vorlage verwenden und das Word-Dokument nicht von Grund auf neu erstellen möchten, ist POI nach meiner Kenntnis eine ziemlich gute Lösung. Sie öffnen die Vorlage und wählen die Zonen aus, die Sie ersetzen möchten.

Sie sagen POI ist immer noch Entwicklung, aber ich habe es in der Produktionsumgebung verwendet und es funktioniert im Moment ziemlich gut.

    
Valentin Rocher 02.01.2010 10:23
quelle
2

Ich bin mir nicht sicher über den genauen Status des Word-Dokumenten-Supports in POI, aber laut der POI-Website wird noch gearbeitet (kann nicht sagen, was genau das bedeutet). Zu diesem Zeitpunkt würde ich POI nicht verwenden, sondern versuchen, ein RTF-Dokument zu generieren. Dafür könnten Sie:

  • Verwenden Sie RTFTemplate . Dies ist eine RTF to RTF Engine, die RTF-Dokumente als Ergebnis der Zusammenführung eines RTF-Modells und von Daten generieren kann .
  • Verwenden Sie iText , das in erster Linie ein PDF-Generator ist, aber auch generieren RTF .
  • Erstellen Sie Ihre eigene benutzerdefinierte Lösung (aber ich würde das nicht tun).

Ich würde für iText gehen.

    
Pascal Thivent 02.01.2010 09:38
quelle
2

Ich weiß, dass diese Frage ein bisschen alt ist, aber ich denke, viele Leute finden das immer noch bei Suchmaschinen, also poste ich eine andere Möglichkeit, genau das zu tun, was Sie wollen:

Wenn das einzige Ziel darin besteht, eine Word-Vorlage zu haben und einige Werte darin zu ersetzen, könnten Sie eine Word-Vorlage als einzelnes XML (nicht als docx) speichern und dann mit einfachem Java und ohne Framework verarbeiten. Wenn Sie mehr tun möchten (z. B. Erstellen von Listen oder Tabellen), sollten Sie möglicherweise auch das xml-Format verstehen und Ihre eigenen Helfer schreiben, bevor Sie ein Framework wie POI laden.

Hier ist ein Beispiel, wie man das macht: Ссылка

Dies ist die schnelle Version, wenn Sie eine schöne Version möchten, können Sie versuchen, einen XML-Prozessor zu verwenden.

PS: Benutzer bemerken vielleicht, dass die Dateierweiterung nicht doc, sondern xml ist und sie können Ihnen dafür die Schuld geben, aber das ist in Ordnung ... benennt es einfach in doc um, Word erkennt das Format und alle sind wieder glücklich;)

    
UniversE 12.10.2011 10:43
quelle
1

Sie sollten sich die Aspose.Words-Komponenten ansehen. Sie haben kürzlich mit der Bereitstellung einer Java-Version der Komponente begonnen.

Siehe folgenden Link: Aspose.Word for Java

Dies unterstützt Word-Automatisierung, -Erstellung und erweiterte Funktionen wie Mail-Zusammenführung, ohne dass eine Instanz von Microsoft Word auf dem Computer benötigt wird. Der eigentliche Vorteil besteht darin, dass Sie im Kontext eines tatsächlichen Word-Dokuments arbeiten können und keine Kompromisse eingehen müssen, indem Sie RTFs usw. erstellen.

Die Java-Version ist derzeit nicht so umfassend wie die .Net-Version, aber die Hauptfunktionalität ist da und sie drängen darauf, bald eine funktionsgleiche Version zu haben.

Wenn Sie die Java-Version erwerben, erhalten Sie außerdem ein Jahr lang kostenlose Upgrades / Support, da die neuen Versionen erstellt werden.

    
Brian Scott 02.01.2010 11:28
quelle
1

Wenn Sie mit docx-Dokumenten arbeiten, ist docx4j eine Option. Wie POI, seine Open Source.

    
JasonPlutext 02.01.2010 20:43
quelle
1

Ich habe Folgendes erstellt und verwendet: Ссылка

    
Leonardo 26.07.2010 07:07
quelle

Tags und Links