Primo articolo su JasperReports, una libreria Open Source per la realizzazione di reportistica da un‘applicazione Java, che consente la produzione di diversi formati, tra cui HTML e PDF.
Introduzione
Questo mese inizia una serie di tre articoli dedicata alle API di JasperReports, una libreria Open Source (rilasciata con licenza LGPL) scritta interamente in Java che consente la generazione dinamica di report a partire da dati recuperati da fonti di varia natura (per esempio database) e la loro visualizzazione, stampa o salvataggio su file di tipo PDF, HTML, XLS, CSV o XML. JasperReports può essere utilizzata in tutti i tipi di applicazioni Java, comprese quelle Web. In questo primo articolo verranno fatte una panoramica sull‘architettura di JasperReports e una descrizione a grandi linee del processo di generazione di un report.
La reportistica
Spesso può capitare l‘esigenza di dover integrare delle funzionalità di reportistica all‘interno di una applicazione Java. In questi casi JasperReports è un‘alternativa sicuramente valida non solo all‘ipotesi di realizzare ex novo il motore per la creazione di report professionali ma anche rispetto all‘adozione di software commerciali (quali Crystal Reports), molto potenti e stabili, ma che comportano per il nostro progetto dei costi aggiuntivi elevati, sia in termini economici (a causa delle licenze) che di tempo (interfacciamento non sempre agevole).
JasperReports prevede già delle API per la realizzazione di tutte le funzionalità tipiche di un software di reportistica:
- formattazione di ogni elemento di un testo (font, allineamento, spaziatura, colore, etc.)
- definizione di parti standard predefinite (header, footer, sommario, etc.)
- gestione di raggruppamenti
- valutazione di espressioni
- campi calcolati
- gestione di subreport
- inserimento di immagini
- stampa
- salvataggio dell‘output su file di diverso formato
In figura 1 viene mostrato un esempio di report generato da applicazione Java tramite JasperReports.
Architettura di JasperReports
In figura 2 viene mostrato un diagramma dell‘architettura di JasperReports.
In fase di design, deve essere per prima cosa definito il layout (sotto forma di file XML, costruito secondo lo schema definito in jasperreport.dtd) di un report. A partire da tale layout, tramite JasperReports, andrà prodotto un file con estensione .jasper. Quest‘ultimo è il semicompilato che verrà utilizzato dall‘applicazione a runtime per la generazione del report vero e proprio, a partire da dati recuperati da un database. La figura 3 chiarisce ulteriormente questo concetto.
La versione più recente di JasperReports è la 1.1.1
Richiede il JDK 1.2.2 o versione superiore.
Il runtime e la compilazione necessitano delle seguenti liberie Java (tutte comunque incluse nell‘archivio ZIP scaricabile dal sito ufficiale (http://jasperreports.sourceforge.net/)):
- SAX XML Parser
- Jakarta Commons Digester Component
- Jakarta Commons BeanUtil Component
- Jakarta Commons Collections Component
- Jakarta Commons Logging Component
- JDBC 2.0
- IText
- Jakarta POI
I package che compongono la libreria sono i seguenti:
- net.sf.jasperreports.ant
- net.sf.jasperreports.engine
- net.sf.jasperreports.engine.base
- net.sf.jasperreports.engine.data
- net.sf.jasperreports.engine.design
- net.sf.jasperreports.engine.export
- net.sf.jasperreports.engine.fill
- net.sf.jasperreports.engine.print
- net.sf.jasperreports.engine.util
- net.sf.jasperreports.engine.xml
- net.sf.jasperreports.view
- net.sf.jasperreports.view.save
Il più importante fra questi è net.sf.jasperreports.engine, il quale contiene le classi direttamente richiamate dalle applicazioni che adottano JasperReports ed evidenziate in rosso in figura 1.
Conclusioni
La comprensione dell‘architettura di JasperReports descritta in questo articolo è necessaria per potersi cimentare nella integrazione di tale liberia in un‘applicazione Java. Nel prossimo articolo vedremo alcuni esempi pratici semplici, ma molto utili da un punto di vista didattico perché mettono in risalto le operazioni comuni a tutte i processi di generazione di report tramite JasperReports.
1Teodor Danciu”Documentazione ufficiale di JasperReports”http://jasperreports.sourceforge.net/2Wostmann & Associates”JasperReports and iReports”http://www.wainet.com/Presentations/JasperReports%20&%20iReports.ppt