Documenti DOCX con Apache POI

In questo articolo vedremo come sia possibile realizzare dei documenti DOCX utilizzando la libreria Java opensource Apache POI.

Il progetto Apache POI è stato creato per poter gestire attraverso un API Java i documenti Microsoft basati su OLE2 e sugli standard Office Open XML (OOXML). Utilizzando questa libreria è possibile quindi gestire diversi formati di file come quelli riportati nel seguente elenco, per i quali esistono dei veri e propri componenti separati

 

Negli esempi dei prossimi paragrafi vedremo come questa interessante libreria ci permette di interagire con i documenti DOCX. Tutti gli esempi presenti condivideranno le seguenti dipendenze Maven

 

Hello World

Per iniziare ad utilizzare XWPF, che è il componente di Apache POI che gestisce il formato DOCX, dobbiamo vedere le principali classi che dovranno essere gestite. Il documento vero e proprio viene mappato dalla classe org.apache.poi.xwpf.usermodel.XWPFDocument. A partire dal documento possiamo aggiungere dei paragrafi, mappati dalla classe XWPFParagraph, che a loro volta contengono il vero e proprio testo gestito dalla classe XWPFRun.

Oltre al semplice testo abbiamo aggiunto un’immagine utilizzando il metodo addPicture di XWPFRun, dove viene specificato il tipo di immagine e anche le dimensioni in pixel. Nella seguente immagine è riportato il documento generato con questo codice

helloworldpoi

 

Header e Footer

Passiamo ora ad inserire header e footer all’interno del nostro documento. Per accedere a header e footer dobbiamo creare un oggetto di tipo XWPFHeaderFooterPolicy a partire dal nostro documento. Sulla base di questa policy, utilizzando i metodi createHeader e createFooter possiamo personalizzare le bande del documento con dei paragrafi creati da noi. Nel seguente esempio questi paragrafi hanno semplicemente un testo allineato al centro.

Abbiamo visto come scrivere header e footer, se invece volessimo accedere al testo contenuto in queste bande potremmo farlo utilizzando rispettivamente i metodi getHeaderList e getFooterList di XWPFDocument.

 

Replace

Una cosa che sicuramente può tornare molto utile in diverse situazioni è quella di parametrizzare i documenti. Come viene fatto con altre strumenti, come ad esempio JasperReport, possiamo includere in un documento DOCX delle variabili e poi utilizzare Apache POI per valorizzarle a runtime. Il testo viene quasi sempre inserito in degli oggetti contenitori chiamati XWPFRun, che quindi dovremo ricercare all’interno del documento per verificare se è presente una determinata stringa e sostituirla.

XWPFRun è possibile trovarli sia all’interno di un XWPFParagraph che all’interno di una tabella XWPFTable che a sua volta contiene XWPFParagraph. Nel seguente esempio possiamo vedere un semplice esempio di quello che abbiamo detto

replacepoi

 

Tabella

Vediamo infine come creare una tabella. L’esempio che viene riportato crea prima un oggetto XWPFTable all’interno del documento e successivamente si popola la tabella, creando prima la riga attraverso il metodo createRow di XWPFTable. La riga, mappata dalla classe XWPFTableRow, ci servira poi per popolare le singole celle.

All’interno di una cella è anche possibile aggiungere un XWPFParagraph, potendo quindi andare ad inserire un testo strutturato in diversi XWPFRun o comunque con formattazioni particolari.