JasperReports: una libreria Java per creare Report

JasperReports: una libreria Java per creare Report

JasperReports è una libreria Open Source scritta in Java che data una sorgente di dati in ingresso (dati estratti da un DB, file XML, Bean Java, ecc.) consente di produrre documenti e report in una varietà di formati tra i quali HTML, PDF, Excel, file OpenOffice e Word.In realtà JasperReports è solo uno dei progetti della Software House JasperSoft, essi includono:JasperReports: il più importante, la libreria Java che è alla base degli altri progetti; iReport: è un editor visuale di report specificatamente sviluppato per JasperReports. iReport fornisce un totale controllo sul contenuto e sul look and feel di ogni report; JasperServer: un server per poter gestire i report e le dashbord generate anche dagli utenti finali; JasperAnalysis: un OLAP Server con una interfaccia semplice ed intuitiva ed integrato con Excel; JasperETL: un tool per l'esecuzione di operazioni ETL sui dati per progetti di Business Intelligence.

ICEfaces: installiamo il plugin per Eclipse e creiamo un progetto di esempio
Creare e modificare bytecode Java a runtime con la libreria Javassist
Sviluppare un’applicazione web Ajax con Java ed Ext JS

JasperReports è una libreria Open Source scritta in Java che data una sorgente di dati in ingresso (dati estratti da un DB, file XML, Bean Java, ecc.) consente di produrre documenti e report in una varietà di formati tra i quali HTML, PDF, Excel, file OpenOffice e Word.

In realtà JasperReports è solo uno dei progetti della Software House JasperSoft, essi includono:

  • JasperReports: il più importante, la libreria Java che è alla base degli altri progetti;
  • iReport: è un editor visuale di report specificatamente sviluppato per JasperReports. iReport fornisce un totale controllo sul contenuto e sul look and feel di ogni report;
  • JasperServer: un server per poter gestire i report e le dashbord generate anche dagli utenti finali;
  • JasperAnalysis: un OLAP Server con una interfaccia semplice ed intuitiva ed integrato con Excel;
  • JasperETL: un tool per l’esecuzione di operazioni ETL sui dati per progetti di Business Intelligence.

JasperReports organizza i dati raccolti da una sorgente dati utilizzando il layout del report contenuto in un file con estensione JRXML, per poter compiere questa operazione il report deve essere prima compilato producendo un file di tipo .jasper. La compilazione del file JRXML è operata tramite il metodo compileReport() della classe JasperCompileManager. Attraverso la compilazione il report è caricato all’interno di un oggetto che è poi serializzato e salvato su disco. Per poter riempire il report compilato viene utilizzato il metodo fillReportXXX() (dove XXX dipende dal file di output voluto) esposto dalla classe JasperFillManager. Questo metodo riceve in input il report compilato (.jasper) e la sorgente dati da cui ricavare i dati. Il risultato è un oggetto che rappresenta un documento pronto da stampare/visualizzare utilizzando la classe JasperPrint.

In altre parole quando utilizziamo JasperReports utilizzeremo per lo più queste quattro classi che implementano un pattern facade:

  • net.sf.jasperreports.engine.JasperCompileManager;
  • net.sf.jasperreports.engine.JasperFillManager;
  • net.sf.jasperreports.engine.JasperPrintManager;
  • net.sf.jasperreports.engine.JasperExportManager

Il design di un report come detto in precedenza è definito in un file JRXML che ha una struttura ben definita. Questa struttura è dichiarata all’interno di un file XSD fornito all’interno dell’engine di JasperReports.

Per creare un report semplice bisogna editare un file XML che ha questa intestazione:

<?xml version="1.0"?>
<jasperReport
xmlns="http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name="name_of_the_report" ... >
...
</jasperReport>

Le sezioni principali del report sono invece:

  • Title: contiene il titolo del report che viene stampato solo nella prima pagina;
  • Page Header: contiene il titolo di ciascuna pagina del report;
  • Column Header: contiene le intestazioni delle colonne riguardanti i dati che vogliamo visualizzare;
  • Detail: contiene i dati estratti dal nostro database;
  • Column Footer: contiene la parte che viene visualizzata al di sotto di ciascuna colonna;
  • Page Footer: contiene tutto ciò che viene visualizzato alla fine di ogni pagina come ad esempio il numero della pagina;
  • Last Page Footer: contiene ciò che viene visualizzato alla fine del report, solo nell’ultima pagina;
  • Summary: contiene le informazioni che saranno visualizzate subito dopo l’ultima riga contenente i dati.

All’interno di ognuna di queste sezioni viene definito uno spazio denominato <band>.

Un esempio molto semplice di report, dove viene creata una sola sezione “detail”  all’interno della quale stampiamo un messaggio, è il seguente:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name="report" language="groovy" pageWidth="595" pageHeight="842"
columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<detail>
<band height="802">
<staticText>
<reportElement x="163" y="391" width="228" height="20"/>
<text><![CDATA[Ciao Mondo! Benvenuti su AppuntiSoftware.it]]></text>
</staticText>
</band>
</detail>
</jasperReport>

Vediamo inoltre un semplice esempio su come utilizzare questo report (che salveremo col nome di report.jrxml)  in una classe Java:

package it.appuntisoftware;
import java.util.HashMap;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
public class JasperReportsDemo
{
 public static void main(String[] args)
 {
 JasperReport jasperReport;
 JasperPrint jasperPrint;
 try
 {
  jasperReport = JasperCompileManager.compileReport(
  "reports/report.jrxml");
  jasperPrint = JasperFillManager.fillReport(
  jasperReport, new HashMap<Object, Object>(), new JREmptyDataSource());
  JasperExportManager.exportReportToPdfFile(
  jasperPrint, "reports/reportPDF.pdf");
  }
  catch (JRException e)
  {
  e.printStackTrace();
  }
 }
}

In un prossimo articolo vedremo come costruire dei report più complessi con l’ausilio del tool iReport.

COMMENTS

WORDPRESS: 0