Esiste un'API Java in grado di creare ricchi documenti Word? [chiuso]


111

Ho una nuova app su cui lavorerò in cui devo generare un documento Word che contiene tabelle, grafici, un sommario e testo. Qual è una buona API da utilizzare per questo? Quanto sei sicuro che supporti grafici, ToC e tabelle? Quali sono alcuni trucchi nascosti nell'usarli?

Alcuni chiarimenti:

  • Non riesco a produrre un PDF, vogliono un documento di Word.
  • Stanno usando MS Word 2003 (o 2007), non OpenOffice
  • L'applicazione è in esecuzione su * nix app-server

Sarebbe bello se potessi iniziare con un modello di documento e riempire solo alcuni spazi con tabelle, grafici, ecc.

Modifica: diverse buone risposte di seguito, ognuna con i propri difetti per quanto riguarda la mia situazione attuale. Difficile scegliere una "risposta finale" da loro. Penso che lo lascerò aperto e spero che vengano create soluzioni migliori.

Modifica: il progetto OpenOffice UNO sembra essere il più vicino a quello che ho chiesto. Sebbene il POI sia sicuramente più mainstream, è troppo immaturo per quello che voglio.


26
Non sono sicuro di come chiudere questa domanda 30 mesi dopo l'ultima modifica e oltre 3 anni dopo che è stata inizialmente posta sarà molto produttivo. Se ho cambiato il titolo in "Come faccio a creare ricchi documenti Word con un'API Java?" questo risolverebbe questo problema?
billjamesdev

1
nel caso qualcuno abbia bisogno di una revisione completa dell'api
Supun Sameera

Potresti dare un'occhiata a docxtemplater, https://github.com/edi9999/docxtemplater/ che è una libreria che ho creato per generare docx da modelli docx
edi9999

1
La domanda dovrebbe essere riaperta. La domanda è stata riformulata per adattarla alle regole, quindi, vorrei chiamare chi ha il potere di riaprire la domanda. Prima che la domanda fosse: qual è una buona API Java per la creazione di documenti di Word? La domanda è: esiste un'API Java in grado di creare ricchi documenti Word? La domanda ora indica chiaramente ciò che la persona che fa la domanda vuole: creare documenti di Word con grafici, ToC e tabelle. La domanda inoltre non richiede più una "buona" API Java. Il bene è diverso per tutti.
Sjoerd Pottuit

Risposte:


56

Nel 2007 il mio progetto ha utilizzato con successo l' interfaccia UNO ( Universal Network Objects ) di OpenOffice.org per generare programmaticamente documenti compatibili con MS-Word (* .doc), nonché i corrispondenti documenti PDF, da un'applicazione Web Java (un framework Struts / JSP).

OpenOffice UNO consente inoltre di creare grafici, fogli di calcolo, presentazioni e così via compatibili con MS-Office. Siamo stati in grado di creare dinamicamente documenti Word sofisticati, inclusi grafici e tabelle.

Abbiamo semplificato il processo utilizzando modelli di documenti MS-Word con inserti di segnalibri in cui il software inseriva il contenuto, tuttavia è possibile creare documenti completamente da zero. L'obiettivo era fare in modo che il software generasse documenti di report che potessero essere condivisi e ulteriormente ottimizzati dagli utenti finali prima di convertirli in PDF per la consegna finale e l'archiviazione.

Facoltativamente, puoi produrre documenti nei formati OpenOffice se desideri che gli utenti utilizzino OpenOffice invece di MS-Office. Nel nostro caso gli utenti desiderano utilizzare gli strumenti di MS-Office.

UNO è incluso nella suite OpenOffice. Abbiamo semplicemente collegato la nostra app Java alle librerie relative a UNO all'interno della suite. È disponibile un OpenOffice Software Development Kit (SDK) contenente applicazioni di esempio e UNO Developer's Guide.

Non ho verificato se l'ultimo OpenOffice UNO può generare formati di documenti Open XML di MS-Office 2007.

Le cose importanti di OpenOffice UNO sono:

  1. È freeware
  2. Supporta più linguaggi (ad esempio Visual Basic, Java, C ++ e altri).
  3. È indipendente dalla piattaforma (Windows, Linux, Unix, ecc.).

Ecco alcuni siti web utili:


1
Finora, questo è il più compatibile con il set di strumenti che ho richiesto. Lo contrassegnerò come "accettato". Sebbene riconosca pienamente che il POI è più mainstream, semplicemente non ha ancora la funzionalità che desidero.
billjamesdev

30

Penso che Apache POI possa fare il lavoro. Un possibile problema a seconda dell'utilizzo a cui si mira potrebbe essere causato dal fatto che HWPF è ancora in fase di sviluppo iniziale.

HWPF è l'insieme di API per la lettura e la scrittura di documenti Microsoft Word 97 (-XP) utilizzando (solo) Java.


Qualche conoscenza delle possibilità di grafici e tabelle? E i sommari? Qualcuno ha una vera esperienza nel fare queste cose in POI?
billjamesdev

1
Guardando la documentazione per i POI, sembra che questo HWPF sia agli inizi dello sviluppo, consentendo principalmente la lettura di testo da un .doc, non proprio per la creazione dinamica di documenti "complessi".
billjamesdev

Non credo che gestisca i grafici / tabelle più complessi ecc.
Brian Agnew


9

Puoi usare questo: http://code.google.com/p/java2word

Ho implementato questa API chiamata Java2Word. con poche righe di codice, puoi generare un documento Microsoft Word.

Per esempio.:

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

Ci sono alcuni esempi su come usare. Fondamentalmente avrai bisogno di un file jar. Fammi sapere se hai bisogno di ulteriori informazioni su come configurarlo.

* Ho scritto questo perché avevamo una reale necessità in un progetto. Altro nel mio blog:

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

applausi Leonardo

Modifica : progetto nel link spostato su https://github.com/leonardoanalista/java2word


1
Lo hai testato utilizzando l'attuale MS Word? Sono riuscito a creare file che OpenOffice e LibreOffice possono leggere ma non MSWord su Windows. (Ho segnalato questo problema su code.google.com/p/java2word/issues/detail?id=16 )
Stein G. Strindhaug

2
Non riesco ad aprire i file generati da java2word utilizzando OpenOffice? Funziona bene con Office 2010
Ashika Umanga Umagiliya

Supporta la creazione di file .docx? @Leonardo
MaheshVarma


4

Prova Aspose.Words per Java, funziona su qualsiasi sistema operativo in cui è installato Java.

Produrrà il documento in DOC, DOCX o RTF se hai bisogno di un formato di output MS Word. Tutti sono supportati ugualmente bene.

Usando questa API puoi creare un documento da zero, letteralmente dai nodi e impostare le loro proprietà di formattazione. Puoi anche utilizzare un DocumentBuilder che fornisce metodi di livello superiore come creare una riga di tabella, inserire un campo ecc. Oppure puoi copiare / unire / spostare porzioni tra un documento pre-creato esistente, ad esempio vuoi assemblare un contratto, basta prendere e copiare pezzi da diversi documenti e Aspose.Words fonderanno stili, formattazione di elenchi ecc. correttamente nel documento risultante.

Sarai in grado di inserire un campo TOC usando Aspose.Words, ma a partire da oggi, il campo TOC richiederà un aggiornamento del campo quando il documento viene aperto in Microsoft Word. Tuttavia, rilasceremo il supporto completo per i campi TOC all'inizio del 2010. Ad esempio, creerà un sommario completo come fa MS Word.

Sono nel team di Aspose.Words.


4

È stato menzionato solo brevemente una volta, quindi vorrei richiamare la libreria docx4j, poiché ho avuto più successo con docx4j che con qualsiasi altra cosa. Il supporto di Apache POI per i documenti di Word non è molto buono. Inoltre, a differenza di Aspose.Words, docx4j è una libreria open source.

L'unico inconveniente è che con docx4j devi creare documenti in formato Office Open XML (docx) piuttosto che documenti in formato OLE2 (doc). Questo è il formato predefinito per Word 2007, ma gli utenti di Word 2003 e precedenti dovranno installare un pacchetto di compatibilità.


3

Prova Aspose.Words per java.

Aspose.Words per Java è una libreria di classi (commerciale) avanzata per Java che consente di eseguire un'ampia gamma di attività di elaborazione dei documenti direttamente all'interno delle applicazioni Java.

Aspose.Words per Java supporta i formati DOC, OOXML, RTF, HTML e OpenDocument. Con Aspose.Words puoi generare, modificare e convertire documenti senza utilizzare Microsoft Word.


2

Puoi utilizzare un bridge COM Java come JACOB . Se proviene dal lato client, un'altra opzione sarebbe quella di utilizzare Javascript.


Grazie, ma sembra che questo richiederebbe l'esecuzione su una macchina Windows, no? Ho chiarito il sistema operativo della macchina host dopo aver letto questo, ma grazie per le informazioni.
billjamesdev

L'utilizzo di JACOB sulla macchina del server Web richiederebbe l'installazione di Microsoft Word stesso, poiché la creazione e la manipolazione di documenti Word tramite l'interfaccia COM richiede la visualizzazione di istanze effettive dell'applicazione Word. In generale, tale uso di Word + COM su un server multiutente è piuttosto problematico perché Word non è progettato per tale uso, ad esempio la duplicazione di parti del documento viene tradizionalmente eseguita utilizzando l'oggetto Selection e gli appunti di Windows, cosa impensabile nel web- impostazione della macchina server. Sono stato abbastanza scottato da questo (anche se ho trovato alcune modifiche)
hello_earth


2

C'è uno strumento chiamato JODConverter che si aggancia all'ufficio aperto per esporre i suoi convertitori di formati di file, ci sono versioni disponibili come webapp (si trova in Tomcat) su cui pubblichi e uno strumento da riga di comando. Ho sparato html e convertito in .doc e pdf con successo è in un progetto abbastanza grande, non è ancora stato pubblicato ma penso che lo userò. http://sourceforge.net/projects/jodconverter/


2

iText è davvero facile da usare.

Se si richiedono file doc, è possibile chiamare abiword (processore di testo multi-sistema leggero gratuito) dalla riga di comando, ha diverse opzioni di conversione del formato di conversione.



1

Dopo un po 'di ricerca, mi sono imbattuto in iText, un'API per la creazione di file PDF e RTF. Penso di poter utilizzare la generazione RTF per creare un file leggibile da Doc che può quindi essere modificato utilizzando Doc e salvato nuovamente.

Qualcuno ha esperienza con iText, usato in questo modo?

Bill, il POI e l'API iText sono molto simili dal punto di vista della programmazione. Ho lavorato con entrambi in passato e li ho trovati facili da usare e ben documentati.

Con iText ottieni il vantaggio di poter passare da un formato all'altro (RTF e PDF) con piccole modifiche al codice. Se non ricordo male il contenuto è disposto utilizzando le stesse chiamate e quindi impostato come PDF o RTF utilizzando poche righe di codice.

Tuttavia credo che la formattazione in RTF sia limitata rispetto a DOC. Non so se sarai in grado di implementare le funzionalità avanzate che stai cercando (tabelle, immagini in linea) senza una discreta quantità di problemi, se non del tutto.

Dato quello che hai detto riguardo al fatto che HWPF non ha funzionalità sufficienti per le tue esigenze (ho affrontato solo il lato Excel del POI) la tua migliore scommessa potrebbe essere quella di convincere i poteri che il PDF è la migliore tecnologia per il lavoro .


1

In passato ho sviluppato file di parole basati su XML puri. Ho usato .NET, ma il linguaggio non dovrebbe avere importanza poiché è veramente XML. Non era la cosa più semplice da fare (aveva un progetto che lo richiedeva un paio di anni fa.) Funzionano solo in Word 2007 o superiore, ma tutto ciò di cui hai bisogno è il white paper di Microsoft che descriva cosa fa ogni tag. Puoi ottenere tutto ciò che desideri con i tag nello stesso modo in cui utilizzassi Word (ovviamente un po 'più doloroso inizialmente).


0

Dopo un po 'più di ricerca, mi sono imbattuto in iText , un'API per la creazione di file PDF e RTF. Penso di poter utilizzare la generazione RTF per creare un file leggibile da Doc che può quindi essere modificato utilizzando Doc e salvato nuovamente.

Qualcuno ha esperienza con iText, usato in questo modo?


Ho usato iText per esportare in RTF ed è un po 'traballante: TOC per esempio non funziona così bene e non è davvero molto facile da usare (mancano i documenti)
AlfaTeK

0

Un'altra possibilità, poiché si tratta di un'app web.

Sono stato in grado di eseguire il rendering di una pagina HTML con il tipo MIME impostato su "application / msword", il che ha causato la generazione di Word da parte del browser che ha importato correttamente l'html, consentendo modifiche e salvataggio proprio come se avessi prodotto un vero documento Word.

Le tabelle funzionano bene, ma le immagini non avevo ancora funzionato. Potrebbe essere facile come un tag nell'HTML, oppure potrei dover trasmettere in streaming una parte separata della risposta contenente i dati dell'immagine in formato binario, o qualche altro metodo che non ho ancora trovato. :)


0

Anche se questo è molto più tardi della richiesta, potrebbe aiutare gli altri. Docmosis fornisce un'API Java per la creazione di documenti in formato doc, pdf, odt utilizzando documenti come modelli. Utilizza OpenOffice come motore per eseguire le conversioni di formato. La manipolazione e il popolamento dei documenti vengono eseguiti da Docmosis stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.