2010-01-02 15 views
7

Vorrei creare un documento word utilizzando un modello, sostituire alcune variabili (campi) e salvarlo come un nuovo documento word.API di creazione documenti di Word in Java

Stavo pensando di usare Apache POI, http://poi.apache.org/ è il migliore per questo scopo? puoi condividere la tua impressione da esso?

+4

Controlla qui: http://stackoverflow.com/questions/203174/whats-a-good-java-api-for-creating-word-documents – JCasso

risposta

8

Ho lavorato con POI prima ed è certamente in grado di generare i documenti di Word. Ma il diavolo è nei dettagli.

Word ha migliaia di funzionalità: È possibile inserire elenchi numerati a partire da # 13 con rientri negativi in ​​due celle unite di una tabella compresi in un altro tavolo che è esso stesso parte di un elenco puntato ... si ottiene l'idea. Quando la documentazione del POI dice che sono lavori in corso, ciò riflette quello che probabilmente sarà uno stato eterno di cercare di raggiungere la specifica (a noi, non documentata) di Word.

I documenti con un insieme ragionevolmente "normale" di funzioni utilizzate sono ben supportati dal POI, le cui interfacce e metodi sono ragionevoli e coerenti, ma a volte richiedono un po 'di lavoro. Ma come dice Pascal, anche i documenti con un insieme di funzionalità non troppo esorbitanti sono supportati da RTF. Non ho quasi nessuna esperienza nel "fare" RTF, ma probabilmente è un po 'più semplice rispetto al POI.

Se si lavora in un ambiente o per un cliente che insiste sul fatto che i documenti prodotti siano .DOC piuttosto che .RTF, allora PDI è praticamente l'unica scelta, a meno che non si può introdurre un passaggio in cui si utilizza un bit di Office automazione per convertire RTF in DOC.

Aggiornamento: Nel frattempo ho avuto un paio di idee in più.

Utilizzando POI o la creazione di documenti RTF è qualcosa che si potrebbe fare praticamente su qualsiasi piattaforma. Al mio lavoro, ad esempio, tutti i server che eseguono l'elaborazione in questo modo eseguono Linux.

Tuttavia, nel caso probabile che i programmi verrà eseguito in ambiente Windows, c'è un'altra alternativa: Jacobhttp://www.land-of-kain.de/docs/jacob/

Jacob è un'interfaccia COM per Java; essenzialmente consente di "controllare a distanza" programmi Windows come Word ed Excel. Il documento che ho linkato sopra non è il sito di Jacob ma una singola pagina con ricette "cookie cutter" per l'utilizzo di Jacob. Il progetto stesso è su SourceForge: http://sourceforge.net/projects/jacob-project/ Ma la gente afferma, giustamente, che la documentazione è un po 'carente.

Jacob ha il vantaggio su tutte le altre soluzioni con cui si ha a che fare con la parola "reale" e pertanto le funzionalità di Word sono disponibili per voi. Questa sarebbe un'alternativa se ci sono dettagli del tuo documento che non possono essere gestiti con il POI o tramite il formato RTF.

2

Non sono sicuro dello stato esatto del supporto dei documenti di Word nei POI, ma, secondo il sito web POI, il lavoro è ancora in corso (non posso dire cosa significhi esattamente). Quindi, in questo momento, non utilizzerei il POI, ma piuttosto proverei a generare un documento RTF. Per questo, si potrebbe:

  • Usa RTFTemplate che è un RTF a RTF motore che può generare documento RTF come il risultato della fusione di un modello RTF e dati.
  • Usa iText che è primarly un generatore di PDF, ma può anche generate RTF.
  • Costruisci la tua soluzione personalizzata (ma non lo farei).

Vorrei andare per iText.

3

Se si utilizza un modello, e non si vuole creare il documento di parola da zero, per quello che so, PDI è una buona soluzione. Si apre il modello e si selezionano le zone che si desidera sostituire.

Dicono che il POI è ancora in fase di sviluppo, ma lo sto usando in ambiente di produzione e funziona abbastanza bene al momento.

+0

Buono a sapersi. Grazie. –

+0

Il problema che ho è: la mia parola Template ** ha un'intestazione che deve essere modificata **. E per quanto ne so, POI non mi consente di modificare l'intestazione. –

+0

@Valentin Rocher, non hai riscontrato alcun problema con questo metodo, ad esempio non funziona tutto il tempo – fatiDev

1

Si dovrebbe esaminare i componenti di Aspose.Words. Di recente hanno iniziato a fornire una versione Java del componente.

consultare il seguente link: Aspose.Word for Java

Questo supporta l'automazione di Word, creazione e funzioni avanzate come la posta fusione senza la necessità di un'istanza di Microsoft Word sulla macchina. I veri vantaggi sono che si è in grado di lavorare nel contesto di un vero e proprio documento word e non dover scendere a compromessi creando RTF ecc.

La versione Java non è attualmente così completa come la versione .Net ma il nucleo principale la funzionalità è lì e stanno spingendo molto per avere presto una versione equivalente alla funzione.

Inoltre, se si acquista la versione di Java si ottengono aggiornamenti/supporto gratuiti di anni man mano che vengono create le nuove versioni.

1

Se si lavora con documenti docx, docx4j è un'opzione. Come il POI, la sua fonte aperta.

2

So che questa domanda è un po 'vecchio, ma penso che molte persone trovano ancora questo con i motori di ricerca, così ho posto un'altra possibilità di fare ciò che si vuole proprio qui:

Se il solo scopo è avere un modello di Word e sostituire alcuni valori in esso, si potrebbe considerare di salvare un modello di Word come singolo xml (non docx) e quindi elaborarlo con Java semplice e senza alcun Framework. Se vuoi fare di più (ad es. Creare liste o tabelle) potresti anche considerare di comprendere il formato xml e scrivere i tuoi aiutanti personali prima di caricare un Framework come POI.

Ecco un esempio su come farlo: http://dev-notes.com/code.php?q=10

Questa è la versione veloce, se si desidera una versione bello, si potrebbe provare a utilizzare un processore XML.

PS: gli utenti potrebbero notare che l'estensione del file non è doc ma xml e potrebbero biasimarti per questo, ma va bene ... basta rinominarlo in doc, la parola riconoscerà il formato e tutti saranno di nuovo felici;)

4

Questo è ovviamente troppo tardi, ma dal 2013 esiste una soluzione molto migliore e più flessibile per la creazione di documenti di parole.

http://www.docx4java.org/trac/docx4j

ho avuto molta più fortuna con docx4j quanto abbia mai fatto con POI.

Problemi correlati