Gibt es eine Java-API, mit der umfangreiche Word-Dokumente erstellt werden können? [geschlossen]

111

Ich habe eine neue App, an der ich arbeiten werde, um ein Word-Dokument zu generieren, das Tabellen, Grafiken, ein Inhaltsverzeichnis und Text enthält. Was ist eine gute API dafür? Wie sicher sind Sie, dass es Diagramme, Inhaltsverzeichnisse und Tabellen unterstützt? Was sind einige versteckte Fallstricke, wenn man sie benutzt?

Einige Klarstellungen:

  • Ich kann kein PDF ausgeben, sie möchten ein Word-Dokument.
  • Sie verwenden MS Word 2003 (oder 2007), nicht OpenOffice
  • Die Anwendung läuft auf dem * nix App-Server

Es wäre schön, wenn ich mit einem Vorlagendokument beginnen und nur einige Bereiche mit Tabellen, Grafiken usw. ausfüllen könnte.

Bearbeiten: Einige gute Antworten unten, jede mit ihren eigenen Fehlern in Bezug auf meine aktuelle Situation. Es ist schwer, eine "endgültige Antwort" von ihnen zu finden. Ich denke, ich lasse es offen und hoffe auf bessere Lösungen.

Bearbeiten: Das OpenOffice UNO-Projekt scheint dem, was ich verlangt habe, am nächsten zu kommen. Während POI sicherlich mehr Mainstream ist, ist es zu unreif für das, was ich will.

billjamesdev
quelle
26
Ich bin mir nicht sicher, wie das Schließen dieser Frage 30 Monate nach ihrer letzten Bearbeitung und über 3 Jahre nach ihrer ursprünglichen Beantwortung sehr produktiv sein wird. Wenn ich den Titel in "Wie erstelle ich Rich Word-Dokumente mit einer Java-API?" Geändert habe. würde das das beheben?
Billjamesdev
1
Für den Fall, dass jemand
Supun Sameera
Sie können einen Blick auf docxtemplater werfen, https://github.com/edi9999/docxtemplater/ , eine Bibliothek, die ich erstellt habe, um docx aus docx-Vorlagen zu generieren
edi9999
1
Die Frage sollte erneut geöffnet werden. Die Frage wurde umformuliert, um den Regeln zu entsprechen. Daher möchte ich denjenigen anrufen, der die Befugnis hat, diese Frage erneut zu öffnen. Vorher war die Frage: Was ist eine gute Java-API zum Erstellen von Word-Dokumenten? Die Frage ist nun: Gibt es eine Java-API, mit der umfangreiche Word-Dokumente erstellt werden können? Die Frage zeigt jetzt deutlich, was die fragende Person möchte: Erstellen von Word-Dokumenten mit Diagrammen, Inhaltsverzeichnissen und Tabellen. Die Frage fragt auch nicht mehr nach einer "guten" Java-API. Gut ist für jeden anders.
Sjoerd Pottuit

Antworten:

56

2007 verwendete mein Projekt erfolgreich die UNO-Schnittstelle ( Universal Network Objects ) von OpenOffice.org, um programmgesteuert MS-Word-kompatible Dokumente (* .doc) sowie entsprechende PDF-Dokumente aus einer Java-Webanwendung (einem Struts / JSP-Framework) zu generieren.

Mit OpenOffice UNO können Sie auch MS-Office-kompatible Diagramme, Tabellenkalkulationen, Präsentationen usw. erstellen. Wir konnten anspruchsvolle Word-Dokumente, einschließlich Diagramme und Tabellen, dynamisch erstellen.

Wir haben den Prozess vereinfacht, indem wir MS-Word-Vorlagen mit Lesezeicheneinfügungen verwendet haben, in die die Software Inhalte eingefügt hat. Sie können jedoch Dokumente vollständig von Grund auf neu erstellen. Ziel war es, dass die Software Berichtsdokumente generiert, die von Endbenutzern gemeinsam genutzt und weiter optimiert werden können, bevor sie zur endgültigen Lieferung und Archivierung in PDF konvertiert werden.

Sie können optional Dokumente in OpenOffice-Formaten erstellen, wenn Benutzer OpenOffice anstelle von MS-Office verwenden sollen. In unserem Fall möchten die Benutzer MS-Office-Tools verwenden.

UNO ist in der OpenOffice-Suite enthalten. Wir haben unsere Java-App einfach mit UNO-bezogenen Bibliotheken innerhalb der Suite verknüpft. Ein OpenOffice Software Development Kit (SDK) mit Beispielanwendungen und dem UNO-Entwicklerhandbuch ist verfügbar.

Ich habe nicht untersucht, ob das neueste OpenOffice UNO MS-Office 2007 Open XML-Dokumentformate generieren kann.

Die wichtigen Dinge bei OpenOffice UNO sind:

  1. Es ist Freeware
  2. Es unterstützt mehrere Sprachen (z. B. Visual Basic, Java, C ++ und andere).
  3. Es ist plattformunabhängig (Windows, Linux, Unix usw.).

Hier sind einige nützliche Websites:

Glücklich
quelle
1
Bisher ist dies am besten mit dem von mir angeforderten Toolset kompatibel. Ich werde es als "akzeptiert" markieren. Obwohl ich voll und ganz erkenne, dass POI mehr Mainstream ist, hat es einfach noch nicht die Funktionalität, die ich möchte.
Billjamesdev
30

Ich denke, Apache POI kann den Job machen. Ein mögliches Problem, das von der angestrebten Verwendung abhängt, kann durch die Tatsache verursacht werden, dass sich HWPF noch in der frühen Entwicklung befindet.

HWPF ist eine Reihe von APIs zum Lesen und Schreiben von Microsoft Word 97 (-XP) -Dokumenten mit (nur) Java.

Jorge Ferreira
quelle
Kenntnisse über Grafik- und Tabellenmöglichkeiten? Wie wäre es mit Inhaltsverzeichnissen? Hat jemand echte Erfahrung mit diesen Dingen im POI?
Billjamesdev
1
Wenn man sich die Dokumentation für POI ansieht, scheint es, dass diese HWPF sehr früh in der Entwicklung ist und hauptsächlich das Lesen von Text aus einem DOC ermöglicht, nicht wirklich das dynamische Erstellen "komplexer" Dokumente.
Billjamesdev
Ich glaube nicht, dass es die komplexeren Grafiken / Tabellen usw. behandelt
Brian Agnew
POI oder docx4j? stackoverflow.com/questions/15013837/…
JasonPlutext
9

Sie können dies verwenden: http://code.google.com/p/java2word

Ich habe diese API namens Java2Word implementiert. Mit wenigen Codezeilen können Sie ein Microsoft Word-Dokument generieren.

Z.B.:

IDocument myDoc = new Document2004();
myDoc.getBody().addEle(new Heading1("Heading01"));
myDoc.getBody().addEle(new Paragraph("This is a paragraph...")

Es gibt einige Beispiele zur Verwendung. Grundsätzlich benötigen Sie eine JAR-Datei. Lassen Sie mich wissen, wenn Sie weitere Informationen zum Einrichten benötigen.

* Ich habe das geschrieben, weil wir eine echte Notwendigkeit in einem Projekt hatten. Mehr in meinem Blog:

http: //leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html *

Prost Leonardo

Bearbeiten : Das Projekt im Link wurde auf https://github.com/leonardoanalista/java2word verschoben

Leonardo
quelle
1
Haben Sie es mit MS Word getestet? Ich habe es geschafft, Dateien zu erstellen, die OpenOffice und LibreOffice lesen können, aber nicht MSWord unter Windows. (Ich habe dieses Problem unter code.google.com/p/java2word/issues/detail?id=16 gemeldet. )
Stein G. Strindhaug
2
Ich kann mit OpenOffice generierte java2word-Dateien nicht öffnen. Funktioniert gut mit Office 2010
Ashika Umanga Umagiliya
Unterstützt es die Erstellung von DOCX-Dateien? @ Leonardo
MaheshVarma
Ne wproject home: github.com/leonardoanalista/java2word
vhunsicker
4

Probieren Sie Aspose.Words für Java aus. Es läuft auf jedem Betriebssystem, auf dem Java installiert ist.

Das Dokument wird an DOC, DOCX oder RTF ausgegeben, wenn Sie ein MS Word-Ausgabeformat benötigen. Alle werden gleich gut unterstützt.

Mit dieser API können Sie ein Dokument von Grund auf neu erstellen, buchstäblich aus Knoten, und deren Formatierungseigenschaften festlegen. Sie können auch einen DocumentBuilder verwenden, der übergeordnete Methoden wie das Erstellen einer Tabellenzeile, das Einfügen eines Felds usw. bereitstellt. Oder Sie können Teile zwischen vorhandenen vorgefertigten Dokumenten kopieren / verbinden / verschieben, z. B. einen Vertrag zusammenstellen, einfach greifen und kopieren Teile aus mehreren Dokumenten und Aspose.Words führen Stile, Listenformatierungen usw. im resultierenden Dokument ordnungsgemäß zusammen.

Sie können ein Inhaltsverzeichnisfeld mit Aspose.Words einfügen. Ab heute erfordert das Inhaltsverzeichnisfeld eine Feldaktualisierung, wenn das Dokument in Microsoft Word geöffnet wird. Wir werden jedoch Anfang 2010 die vollständige Unterstützung für Inhaltsverzeichnisfelder veröffentlichen. Beispielsweise wird das vollständige Inhaltsverzeichnis so erstellt, wie es MS Word tut.

Ich bin im Aspose.Words-Team.

Romeok
quelle
4

Es wurde nur einmal kurz erwähnt, daher möchte ich die docx4j-Bibliothek aufrufen, da ich mit docx4j mehr Erfolg hatte als alles andere. Die Unterstützung von Apache POI für Word-Dokumente ist nicht sehr gut. Im Gegensatz zu Aspose.Words ist docx4j eine Open-Source-Bibliothek.

Der einzige Nachteil besteht darin, dass Sie mit docx4j Dokumente im Office Open XML-Format (docx) und keine Dokumente im OLE2-basierten Format (doc) erstellen müssen. Dies ist das Standardformat für Word 2007, aber Benutzer von Word 2003 und früheren Versionen müssen ein Kompatibilitätspaket installieren.

Joshua Born
quelle
3

Versuchen Sie Aspose.Words für Java.

Aspose.Words for Java ist eine erweiterte (kommerzielle) Klassenbibliothek für Java, mit der Sie eine Vielzahl von Dokumentverarbeitungsaufgaben direkt in Ihren Java-Anwendungen ausführen können.

Aspose.Words für Java unterstützt die Formate DOC, OOXML, RTF, HTML und OpenDocument. Mit Aspose.Words können Sie Dokumente ohne Microsoft Word generieren, ändern und konvertieren.

Seki
quelle
2

Sie können eine Java COM-Brücke wie JACOB verwenden . Wenn es von Client-Seite ist, wäre eine andere Option die Verwendung von Javascript.

Gulzar Nazim
quelle
Vielen Dank, aber es sieht so aus, als müsste dies auf einem Windows-Computer ausgeführt werden, oder? Ich habe das Betriebssystem des Host-Computers nach dem Lesen geklärt, aber danke für die Info.
Billjamesdev
Für die Verwendung von JACOB auf dem Webserver-Computer muss Microsoft Word selbst installiert sein, da zum Erstellen und Bearbeiten von Word-Dokumenten über die COM-Schnittstelle tatsächliche Instanzen der Word-Anwendung aufgerufen werden müssen. Im Allgemeinen ist eine solche Verwendung von Word + COM auf einem Mehrbenutzerserver ziemlich problematisch, da Word nicht für eine solche Verwendung ausgelegt ist. Beispielsweise erfolgt das Duplizieren von Teilen des Dokuments traditionell mithilfe des Auswahlobjekts und der Windows-Zwischenablage, was im Web undenkbar ist. Server-Maschineneinstellung. Ich bin ziemlich verbrannt (obwohl ich einige
Verbesserungen
2

Es gibt ein Tool namens JODConverter, das sich in Open Office einbindet, um die Dateiformatkonverter verfügbar zu machen. Es gibt Versionen als Webapp (befindet sich in Tomcat), auf die Sie posten, und ein Befehlszeilentool. Ich habe HTML darauf abgefeuert und erfolgreich in .doc und pdf konvertiert. Es ist ein ziemlich großes Projekt. Ich bin noch nicht live gegangen, aber ich denke, ich werde es verwenden. http://sourceforge.net/projects/jodconverter/

Andrew Hancox
quelle
2

iText ist sehr einfach zu bedienen.

Wenn Sie Dokumentdateien anfordern, können Sie abiword (kostenloser Lightweigh-Multi-OS-Textprozessor) über die Befehlszeile aufrufen. Es stehen mehrere Konvertierungsoptionen für das Konvertierungsformat zur Verfügung.

cam2574
quelle
1

docx4j oder poi, beide sind ASL v2

@wondersofcomputing: iText ist eigentlich kostenlos und Open Source

JasonPlutext
quelle
1

Nach ein wenig mehr Recherche stieß ich auf iText, eine API zur Erstellung von PDF- und RTF-Dateien. Ich denke, ich kann die RTF-Generation verwenden, um eine von Doc lesbare Datei zu erstellen, die dann mit Doc bearbeitet und erneut gespeichert werden kann.

Hat jemand Erfahrung mit iText, das auf diese Weise verwendet wird?

Bill, der POI und die iText-API sind sich aus Programmiersicht sehr ähnlich. Ich habe in der Vergangenheit mit beiden gearbeitet und fand sie einfach zu bedienen und gut dokumentiert.

Mit iText erhalten Sie den Vorteil, dass Sie mit geringfügigen Änderungen am Code zwischen den Formaten (RTF und PDF) wechseln können. Wenn ich mich richtig erinnere, wird der Inhalt mit denselben Aufrufen angelegt und dann mit einigen Codezeilen als PDF oder RTF festgelegt.

Ich glaube jedoch, dass die Formatierung in RTF im Vergleich zu DOC begrenzt ist. Ich weiß nicht, ob Sie die von Ihnen gesuchten erweiterten Funktionen (Tabellen, Inline-Bilder) ohne großen Aufwand implementieren können, wenn überhaupt.

Angesichts dessen, was Sie gesagt haben, dass HWPF nicht über genügend Funktionen für Ihre Anforderungen verfügt (ich habe mich nur mit der Excel-Seite des POI befasst), ist es möglicherweise am besten, die Befugnisse davon zu überzeugen, dass PDF die beste Technologie für diesen Job ist .

James McMahon
quelle
1

Ich habe in der Vergangenheit reine XML-basierte Word-Dateien entwickelt. Ich habe .NET verwendet, aber die Sprache sollte keine Rolle spielen, da es sich wirklich um XML handelt. Es war nicht die einfachste Sache (hatte ein Projekt, das es vor ein paar Jahren erforderte). Diese funktionieren nur in Word 2007 oder höher - aber alles, was Sie brauchen, ist das Whitepaper von Microsoft, das beschreibt, was jedes Tag tut. Sie können mit den Tags alles erreichen, was Sie wollen, als ob Sie Word verwenden würden (anfangs natürlich etwas schmerzhafter).

schmoopy
quelle
0

Nach ein wenig mehr Recherche stieß ich auf iText , eine API zur Erstellung von PDF- und RTF-Dateien. Ich denke, ich kann die RTF-Generierung verwenden, um eine Doc-lesbare Datei zu erstellen, die dann mit Doc bearbeitet und erneut gespeichert werden kann.

Hat jemand Erfahrung mit iText, das auf diese Weise verwendet wird?

billjamesdev
quelle
Ich habe iText zum Exportieren in RTF verwendet und es ist ein bisschen schuppig: TOC zum Beispiel funktioniert nicht so gut und es ist wirklich nicht sehr einfach zu bedienen (Dokumente fehlen)
AlfaTeK
0

Noch eine andere Möglichkeit, da dies eine Web-App ist.

Ich konnte eine HTML-Seite mit dem MIME-Typ "application / msword" rendern, was dazu führte, dass der Browser Word erzeugte, das den HTML-Code einwandfrei importierte, Änderungen ermöglichte und speicherte, als würde ich ein echtes Word-Dokument ausgeben.

Tabellen funktionieren gut, aber Bilder, die ich noch nicht zum Laufen gebracht hatte. Es kann so einfach sein wie nur ein Tag im HTML, oder ich muss möglicherweise einen separaten Teil der Antwort streamen, der die Bilddaten in Binärform enthält, oder eine andere Methode, die ich mir noch nicht ausgedacht habe. :) :)

billjamesdev
quelle
0

Auch wenn dies viel später als die Anfrage ist, kann es anderen helfen. Docmosis bietet eine Java-API zum Erstellen von Dokumenten im Dokument-, PDF- und ODT-Format unter Verwendung von Dokumenten als Vorlagen. Es verwendet OpenOffice als Engine, um die Formatkonvertierungen durchzuführen. Die Manipulation und Auffüllung von Dokumenten wird von Docmosis selbst durchgeführt.

Paul Jowett
quelle