it-swarm.com.de

Gibt es eine Java-API, die Rich-Word-Dokumente erstellen kann?

Ich habe eine neue App, an der ich arbeiten werde, wo ich ein Word-Dokument erstellen muss, das Tabellen, Diagramme, ein Inhaltsverzeichnis und Text enthält. Was ist eine gute API dafür? Wie sicher sind Sie, dass Diagramme, ToCs und Tabellen unterstützt werden? Was sind einige versteckte Gotchas, die sie benutzen?

Einige Klarstellungen:

  • Ich kann kein PDF ausgeben, sie wollen 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 könnte und einige Felder mit Tabellen, Diagrammen usw. füllen würde.

Edit: Einige gute Antworten unten, jede mit ihren eigenen Fehlern in Bezug auf meine aktuelle Situation. Schwer, eine "endgültige Antwort" von ihnen auszuwählen. Ich denke, ich lasse es offen und hoffe auf bessere Lösungen.

Edit: Das OpenOffice-UNO-Projekt scheint meinem Wunsch am nächsten zu sein. POI ist zwar mehr Mainstream, aber zu unreif für das, was ich will.

108
billjamesdev

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

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 Sie MS-Word-Vorlagen mit Lesezeicheneinlagen verwenden, in die die Software Inhalte eingefügt hat. Sie können jedoch Dokumente von Grund auf neu erstellen. Ziel war es, dass die Software Berichtsdokumente generiert, die von Endbenutzern geteilt und weiter optimiert werden können, bevor sie für die endgültige Auslieferung und Archivierung in PDF konvertiert werden. 

Sie können optional Dokumente in OpenOffice-Formaten erstellen, wenn Sie möchten, dass Benutzer OpenOffice anstelle von MS-Office verwenden. 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 die neueste OpenOffice-UNO Open XML-Dokumentformate von Microsoft Office 2007 generieren kann.

Die wichtigsten 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: 

54
Rob Garverick

Ich denke, Apache POI kann den Job machen. Ein mögliches Problem in Abhängigkeit von der Nutzung, die Sie anstreben, kann durch die Tatsache verursacht werden, dass sich HWPF noch in der Entwicklung befindet.

HWPF ist der Satz von APIs zum Lesen und Schreiben von Microsoft Word 97 (-XP) Dokumente, die (nur) Java verwenden.

30
Jorge Ferreira

Sie könnten Folgendes verwenden: http://code.google.com/p/Java2Word

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

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. Geben Sie mir Bescheid, wenn Sie weitere Informationen zur Einrichtung benötigen.

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

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

beifall Leonardo

Bearbeiten: Projekt in Link verschoben nach https://github.com/leonardoanalista/Java2Word

9
Leonardo

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) anstelle von Dokumenten im OLE2-Format (doc) erstellen müssen. Dies ist das Standardformat für Word 2007, jedoch müssen Benutzer von Word 2003 und früheren Versionen ein Kompatibilitätspaket installieren.

4
Joshua Born

Testen Sie Aspose.Words für Java. Es kann auf jedem Betriebssystem ausgeführt werden, auf dem Java installiert ist.

Das Dokument wird in 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, sprichwörtlich aus Knoten erstellen, und deren Formatierungseigenschaften festlegen. Sie können auch einen DocumentBuilder verwenden, der Methoden auf höherer Ebene bereitstellt, z. B. Erstellen einer Tabellenzeile, Einfügen eines Felds usw. Sie können auch Teile zwischen vorhandenen, vorab erstellten Dokumenten kopieren/zusammenfügen/verschieben, sagen Sie möchten einen Vertrag zusammenstellen, greifen und kopieren Teile aus mehreren Dokumenten und Aspose.Words werden Stile, Listenformatierung usw. im resultierenden Dokument ordnungsgemäß zusammenführen.

Sie können ein Inhaltsverzeichnis-Feld mit Aspose.Words einfügen. Das Inhaltsverzeichnis-Feld erfordert jedoch ab heute ein Feldupdate, wenn das Dokument in Microsoft Word geöffnet wird. Wir werden jedoch Anfang 2010 die volle Unterstützung für TOC-Felder freigeben. Es erstellt ein vollständiges Inhaltsverzeichnis, wie es MS Word tut.

Ich bin im Aspose.Words-Team.

4
romeok

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 erstellen, ändern und konvertieren, ohne Microsoft Word zu verwenden. 

3
mutley

Es gibt ein Tool namens JODConverter, das in Open Office eingebunden wird, um die Dateiformatkonverter verfügbar zu machen. Es gibt Versionen, die als Webapp verfügbar sind (in Tomcat), in die Sie posten, und ein Befehlszeilenprogramm. Ich habe html darauf geschossen und in .doc und pdf konvertiert. Es ist erfolgreich in einem ziemlich großen Projekt, noch nicht live gegangen, aber ich denke, ich werde es verwenden . http: // sourceforge.net/projects/jodconverter/

2
Andrew Hancox

Sie können eine Java-COM-Bridge wie JACOB verwenden. Wenn es sich um eine Client-Seite handelt, könnte Javascript verwendet werden.

2
Gulzar Nazim

Ich habe Aspose.Words verwendet, um den Seriendruck in .NET durchzuführen. Ich glaube, dass sie auch eine Java-Version haben.

2
tvanfosson

iText ist wirklich einfach zu bedienen.

Wenn Sie doc-Dateien anfordern, können Sie abiword (freier Lightweigh-Multi-OS-Textprozessor) von der Befehlszeile aus aufrufen. Es gibt mehrere Konvertierungsformate.

2
cam2574

Nach ein wenig mehr Recherche stieß ich auf iText, eine PDF und eine RTF-Dateierstellungs-API. Ich denke, ich kann die RTF Generation 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?

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

Mit iText haben Sie den Vorteil, dass Sie mit geringfügigen Änderungen am Code zwischen Formaten (RTF und PDF) wechseln können. Wenn ich mich richtig erinnere, wird der Inhalt mit den gleichen Aufrufen angelegt und dann unter Verwendung einiger Zeilen Code 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 erweiterten Funktionen (Tabellen, Inline-Bilder) ohne großen Aufwand implementieren können, wenn überhaupt. 

In Anbetracht dessen, was Sie über HWPF gesagt haben, das nicht über genügend Funktionalität für Ihre Bedürfnisse verfügt (ich habe mich nur mit der Excel-Seite des POI befasst), ist Ihre beste Wette die Überzeugung der Befugnisse, dass PDF das ist beste Technologie für den Job

1
James McMahon

Ich habe in der Vergangenheit reine XML-basierte Word-Dateien entwickelt. Ich habe .NET verwendet, aber die Sprache sollte keine Rolle spielen, da es wirklich XML ist. Dies war nicht das Einfachste (ein Projekt, das vor einigen Jahren erforderlich war). Diese funktionieren nur in Word 2007 oder höher - aber alles, was Sie brauchen, ist das Whitepaper von Microsoft, in dem beschrieben wird, was jedes Tag bewirkt. Sie können mit den Tags alles erreichen, was Sie möchten, als ob Sie Word verwenden würden (natürlich etwas schmerzhafter anfangs).

1
schmoopy

docx4j oder poi, beide sind ASL v2

@wondersofcomputing: iText ist tatsächlich frei und Open Source

1
JasonPlutext

Auch wenn dies viel später als die Anfrage ist, kann es anderen helfen. Docmosis bietet eine Java-API zum Erstellen von Dokumenten im Format doc, pdf, odt unter Verwendung von Dokumenten als Vorlage. Es verwendet OpenOffice als Engine, um die Formatkonvertierungen durchzuführen. Dokumentmanipulation und Bestückung werden von Docmosis selbst durchgeführt.

0
Paul Jowett

Eine weitere Möglichkeit, da es sich um eine Web-App handelt. 

Ich konnte eine HTML-Seite mit dem MIME-Typ "application/msword" rendern, wodurch der Browser Word hervorbrachte, mit dem die HTML-Datei importiert wurde. Dies erlaubte Änderungen und das Speichern, als ob ich ein echtes Word-Dokument ausgeben würde.

Tabellen funktionieren gut, aber Bilder, die ich noch nicht arbeiten konnte. Es kann so einfach sein wie ein Tag im HTML-Code, oder ich muss einen separaten Teil der Antwort mit den Bilddaten in Binärdateien oder eine andere Methode streamen, die ich noch nicht gefunden habe. :)

0
billjamesdev

Nach etwas mehr Recherche stieß ich auf iText , eine PDF und eine RTF-Dateierstellungs-API. Ich denke, ich kann die RTF Generation 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?

0
billjamesdev