it-swarm.dev

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

Ho una nuova app su cui lavorerò dove devo generare un documento Word che contiene tabelle, grafici, un sommario e un testo. Qual è una buona API da usare per questo? Sei sicuro che supporti grafici, ToC e tabelle? Quali sono alcuni trucchi nascosti nel loro utilizzo?

Alcuni chiarimenti:

  • Non posso produrre un PDF, vogliono un documento 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 semplicemente riempire alcuni spazi con tabelle, grafici, ecc.

Modifica: molte risposte positive di seguito, ognuna con i propri errori fino alla mia situazione attuale. Difficile scegliere una "risposta finale" da loro. Penso che lo lascerò aperto e spero che si creino soluzioni migliori.

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

108
billjamesdev

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

OpenOffice UNO ti consente inoltre di creare grafici, fogli di calcolo, presentazioni, ecc. Compatibili con MS-Office. Siamo stati in grado di creare dinamicamente documenti Word sofisticati, inclusi grafici e tabelle. 

Abbiamo semplificato il processo utilizzando i modelli di documenti MS-Word con inserimenti di segnalibri in cui il software ha inserito il contenuto, tuttavia è possibile creare completamente i documenti da zero. L'obiettivo era far sì che il software generi documenti di report che potrebbero essere condivisi e ulteriormente ottimizzati dagli utenti finali prima di convertirli in PDF per la consegna finale e l'archiviazione. 

Puoi opzionalmente produrre documenti nei formati OpenOffice se vuoi che gli utenti utilizzino OpenOffice invece di MS-Office. Nel nostro caso gli utenti vogliono usare gli strumenti di MS-Office. 

UNO è incluso nella suite OpenOffice. Abbiamo semplicemente collegato la nostra app Java alle librerie collegate a UNO all'interno della suite. È disponibile un OpenOffice Software Development Kit (SDK) contenente applicazioni di esempio e la Guida per gli sviluppatori UNO.

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

Le cose importanti su OpenOffice UNO sono: 

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

Ecco alcuni utili siti Web: 

54
Rob Garverick

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

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

30
Jorge Ferreira

Puoi utilizzare questo: http://code.google.com/p/Java2Word

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

Per esempio.:

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

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

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

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

applausi Leonardo

Modifica: Progetto in collegamento spostato in https://github.com/leonardoanalista/Java2Word

9
Leonardo

È stato menzionato solo brevemente una volta, quindi mi piacerebbe chiamare la libreria docx4j, in quanto ho avuto più successo con docx4j di ogni altra cosa. Il supporto POI di Apache per i documenti di Word non è molto buono. Inoltre, a differenza di Aspose.Words, docx4j è una libreria open source.

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

4
Joshua Born

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

Invia il documento a DOC, DOCX o RTF se hai bisogno di un formato di output di 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 parti tra il documento esistente già creato, dire che vuoi assemblare un contratto, solo afferrare e copiare pezzi da diversi documenti e Aspose.Words fonderanno stili, elencano la formattazione ecc correttamente nel documento risultante.

Sarà possibile inserire un campo TOC utilizzando Aspose.Words, ma ad oggi il campo TOC richiederà un aggiornamento sul campo quando il documento viene aperto in Microsoft Word. Tuttavia, pubblicheremo il pieno supporto per i campi TOC all'inizio del 2010. E.g. costruirà il sommario completo come MS Word.

Sono nel team di Aspose.Words.

4
romeok

Prova Aspose.Words per Java.

Aspose.Words per Java è una libreria di classi (commerciali) avanzata per Java che consente di eseguire una vasta 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. 

3
mutley

C'è uno strumento chiamato JODConverter che si collega ad Open Office 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 sono ancora stati pubblicati ma penso che lo userò . http: // sourceforge.net/projects/jodconverter/

2
Andrew Hancox

È possibile utilizzare un bridge COM Java come JACOB . Se è dal lato client, un'altra opzione sarebbe quella di usare Javascript.

2
Gulzar Nazim

Ho usato Aspose.Words per fare la stampa unione in .NET. Credo che abbiano anche una versione Java.

2
tvanfosson

iText è veramente facile da usare.

Se si requiere i file doc, è possibile chiamare abiword (light process multi-os text procesor gratuito) dalla riga di comando, ha diverse opzioni di conversione del formato di conversione.

2
cam2574

Dopo un po 'di ricerche, ho trovato iText, un PDF e API per la creazione di file RTF. Penso di poter usare la generazione RTF per creare un file leggibile da Doc che possa essere modificato usando Doc e ri-salvato.

Qualcuno ha qualche esperienza con iText, usato in questo modo?

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

Con iText hai il vantaggio di poter passare da un formato all'altro (RTF e PDF) con modifiche minori al codice. Se ricordo bene, il contenuto è disposto usando le stesse chiamate e quindi impostato come PDF o RTF usando poche righe di codice.

Tuttavia ritengo 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 buona quantità di problemi, se non del tutto. 

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

1
James McMahon

Ho sviluppato file XML puramente basati su Word in passato. Ho usato .NET, ma la lingua non dovrebbe avere importanza dal momento che è veramente XML. Non era la cosa più facile da fare (aveva un progetto che richiedeva un paio di anni fa). Funzionano solo con Word 2007 o versioni successive, ma tutto ciò di cui hai bisogno è il white paper di Microsoft che descrive cosa fa ogni tag. Puoi realizzare tutto ciò che desideri con i tag nello stesso modo in cui utilizzi Word (ovviamente inizialmente un po 'più doloroso).

1
schmoopy

docx4j o poi, entrambi ASL v2

@wondersofcomputing: iText è in realtà gratuito e open source

1
JasonPlutext

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. Usa OpenOffice come motore per eseguire le conversioni di formato. La manipolazione del documento e la popolazione vengono eseguite da Docmosis stessa.

0
Paul Jowett

Ancora un'altra possibilità, dal momento che questa è un'app web. 

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

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

0
billjamesdev

Dopo un po 'di ricerche, ho trovato iText , un PDF e un'API di creazione di file RTF. Penso di poter usare la generazione RTF per creare un file leggibile da Doc che possa essere modificato usando Doc e ri-salvato.

Qualcuno ha qualche esperienza con iText, usato in questo modo?

0
billjamesdev