Domanda

Ho una nuova app su cui lavorerò dove devo generare un documento Word che contenga 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 gotcha nascosti nel loro utilizzo?

Alcuni chiarimenti:

  • Non riesco a 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 riempire 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 UNO di OpenOffice sembra essere il più vicino a quello che ho chiesto. Mentre il PDI è sicuramente più mainstream, è troppo immaturo per quello che voglio.

È stato utile?

Soluzione

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

OpenOffice UNO ti consente anche 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 documenti modello MS-Word con inserti di segnalibri in cui il software ha inserito il contenuto, tuttavia è possibile creare documenti completamente da zero. L'obiettivo era che il software generasse documenti di report che potevano essere condivisi e ulteriormente modificati dagli utenti finali prima di convertirli in PDF per la consegna e l'archiviazione finali.

Puoi facoltativamente produrre documenti nei formati OpenOffice se desideri che gli utenti utilizzino OpenOffice anziché 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 relative 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 studiato se l'ultimo OpenOffice UNO è in grado di generare formati di documento Open XML di MS-Office 2007.

Le cose importanti su OpenOffice UNO sono:

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

Ecco alcuni siti Web utili:

Altri suggerimenti

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

  

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

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 vera 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 collegamento spostato in https://github.com/leonardoanalista / java2word

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

Verrà emesso il documento in DOC, DOCX o RTF se è necessario un formato di output MS Word. Tutti sono supportati ugualmente bene.

Utilizzando questa API è possibile creare un documento da zero, letteralmente da nodi e impostarne le proprietà di formattazione. Puoi anche usare 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 documenti pre-creati esistenti, dire che vuoi assemblare un contratto, basta prendere e copiare pezzi di diversi documenti e Aspose.Words unirà stili, formattazione degli elenchi ecc. correttamente nel documento risultante.

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

Faccio parte del team Aspose.Words.

È stato menzionato solo brevemente una volta, quindi vorrei richiamare la libreria docx4j, poiché ho avuto più successo con docx4j di ogni altra cosa. Il supporto dei 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 è che con docx4j devi creare documenti in formato Office Open XML (docx) anziché documenti in formato OLE2 (doc). Questo è il formato predefinito per Word 2007, ma Word 2003 e gli utenti precedenti dovranno installare un pacchetto di compatibilità.

Prova Aspose.Words per java.

  

Aspose.Words per Java è una libreria di classi (commerciale) 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 usare Microsoft Word.

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

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

C'è uno strumento chiamato JODConverter che si aggancia in open office per esporre i suoi convertitori di formato di file, ci sono versioni disponibili come webapp (si trova in Tomcat) su cui pubblichi e uno strumento da riga di comando. Ho lanciato HTML su di esso e convertito in .doc e pdf con successo è in un progetto abbastanza grande, non sono ancora andato in diretta ma penso che lo userò. http://sourceforge.net/projects/jodconverter/

iText è davvero facile da usare.

Se hai bisogno di file doc, puoi chiamare abiword (procesor di testo multi-os leggero leggero) dalla riga di comando, ha diverse opzioni di conversione del formato di conversione.

docx4j o poi, entrambi ASL v2

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

  

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

     

Qualcuno ha qualche esperienza con iText, utilizzato 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 entrambi facili da usare e ben documentati.

Con iText ottieni il vantaggio di poter passare da un formato all'altro (RTF e PDF) con una piccola modifica al codice. Se ricordo bene che il contenuto è strutturato usando le stesse chiamate e quindi impostato come PDF o RTF usando alcune 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 incorporate) senza una discreta quantità di problemi, se non del tutto.

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

Ho sviluppato file di parole basati su XML puri in passato. Ho usato .NET, ma il linguaggio non dovrebbe importare poiché è veramente XML. Non è stata la cosa più semplice da fare (aveva un progetto che lo richiedeva un paio di anni fa.) Funzionano solo in Word 2007 o versioni successive, ma tutto ciò che serve è il white paper di Microsoft che descrive ciò che fa ogni tag. Puoi ottenere tutto ciò che desideri con i tag come se stessi usando Word (ovviamente inizialmente un po 'più doloroso).

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

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

Ancora 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 " ;, che ha causato la generazione di Word da parte del browser che ha importato bene l'html, consentendo modifiche e salvando proprio come se avessi prodotto un vero documento Word.

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

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 la popolazione dei documenti sono eseguite dalla stessa Docmosis.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top