Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Libreria Jasper Report

Panoramica sulla libreria open Source in grado di generare report a partire da una fonte dati e la successiva renderizzazione in diversi formati, tra i quali PDF, HTML e XML
Panoramica sulla libreria open Source in grado di generare report a partire da una fonte dati e la successiva renderizzazione in diversi formati, tra i quali PDF, HTML e XML
Link copiato negli appunti

JasperReports è una libreria Open Source scritta interamente in linguaggio Java che consente la generazione dinamica di report a partire da una fonte dati e la successiva renderizzazione in diversi formati, tra i quali PDF, HTML e XML.

Il processo di generazione di un report mediante Jasper Report consiste in tre step:

  1. definizione della struttura e del layout del report sottoforma di file jrxml;
  2. compilazione del file jrxml e generazione di un file jasper;
  3. rendering del file jasper mediante la libreria Jasper Reports.

Come esempio simuleremo la generazione di un report contenente l'elenco di tutti gli studenti iscritti ad un corso universitario. L'elenco degli studenti è memorizzato in un database.

Per semplificare notevolmente l'esempio la nostra base di dati contenente le informazioni per popolare il report, conterrà soltanto la tabella STUDENTI costituita dai seguenti campi: Matricola, Nome, Cognome e Sesso.

Primo passo necessario è la creazione del file jrxml (Jasper Report XML). Nel file jrxml vengono definite diverse informazioni, tra le quali la dimensione delle sezioni, gli elementi e la loro posizione specifica, i colori e la dimensione del carattere, le query SQL da eseguire per reperire le informazioni dalla base dati ed altro ancora. Scrivere manualmente tale file non è un'operazione semplice. Per tale motivo utilizzeremo iReport, un tool gratuito che ci permette di disegnare la struttura ed il layout del report sfruttando le classiche tecniche del drag & drop.

Lanciamo iReport e creiamo un nuovo documento attraverso la voce di menù File/Nuovo.

Ciascun report è costituito dalle seguenti sezioni:

  • 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.

Nessuna di queste sezioni è obbligatoria. Possiamo liberamente utilizzare solo quelle che sono adatte alle nostre esigenze.

Per modificare le impostazioni di ciascuna sezione è sufficiente cliccare col tasto destro del mouse su un qualsiasi punto del report e selezionate Proprietà Banda.

Per il nostro esempio impostiamo per la sezione Title un'altezza di 50, per Column Header e Detail un'altezza di 20. Per tutte le altre sezioni un'altezza di 0 che le renderà invisibili.

In Title inseriamo un oggetto di tipo "Testo Statico".

Nella sezione Column Header inseriamo 4 elementi di tipo "Testo Statico", uno per ciascuna colonna da visualizzare: Matricola, Cognome, Nome e Sesso.

Nella sezione Detail inseriamo 4 elementi "Campi di testo" che rappresentano i campi delle tabelle del DB da recuperare. Per cisacuno di questi campi bisogna specificare un nome. La sintassi è la seguente: $F{nome_campo}, dove nome_campo è il nome del campo selezionato nella query. Per associare un nome al campo cliccare con il tasto destro sul campo di testo e andare nel menù proprietà. Nel tab "campo di testo" è possibile settare la tipologia del dato ed il nome.

A questo punto bisogna impostare la query che estrapolerà dal database i dati che vogliamo visualizzare. Andiamo nel menù Data/Query ed inseriamo la seguente query: "SELECT matricola, nome, cognome, sesso FROM STUDENTI".

Figura 1. Risultato della query
Risultato della query

Fatto ciò salvare il file con estenzione jrxml. Adesso vediamo come la libreria Jasper Report ci permette di compilare il file e produrre il file jasper.

La classe JasperCompileManager ci mette a disposizione il metodo statico compileReportToFile che riceve in input il path fisico del file jrxml da compilare ed il path fisico del file jasper che verrà generato.

JasperCompileManager.compileReportToFile(java.lang.String sourceFileName, java.lang.String destFileName)

Il passo finale è la creazione del file PDF a partire dal file jasper. Il metodo statico fillReport della classe JasperFillManager ci permettè di generare il report con i dati letti dal database, il metodo exportReportToPDFFile della classe JasperExportManager ci permette invece di scrivere il report su disco in formato PDF. è possibile esportare il file anche in formato HTML e XML. Sono disponibile i corrispondenti metodi exportReportToHtmlFile ed exportReportToXmlFile.

JasperPrint.fillReport(java.lang.String sourceFileName,java.util.Map parameters, java.sql.Connection conn)

JasperExportManager.exportReportToPdfStream(JasperPrint jasperPrint, java.io.OutputStream outputStream)

Ecco un esempio pratico:

Listato 1. Esempio pratico

package org.sportfantasy.jasperreport;

import java.sql.Connection;
import java.sql.DriverManager;

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.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;

public class TestJR
{
  public static String JASPER_REPORT_FOLDER   = "C:/TEMP/";
  public static String JASPER_FILENAME    = "studenti";
  public static String DRIVER       = "com.mysql.jdbc.Driver";
  public static String DB_URL       = "jdbc:mysql://localhost/jr";
  public static String DB_NAME       = "jr";
  public static String DB_USERNAME     = "pippi";
  public static String DB_PASSWORD     = "pluto";
  
  public static void main(String[] args) throws Exception
  {
    //caricamento file JRXML
    JasperDesign jasperDesign = JRXmlLoader.load(JASPER_REPORT_FOLDER + JASPER_FILENAME + ".jrxml");
    //compilazione del file e generazione del file JASPER
    JasperCompileManager.compileReportToFile(jasperDesign, JASPER_REPORT_FOLDER + JASPER_FILENAME + ".jasper");

    //inizializzazione connessione al database
    Class.forName(DRIVER);
    Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);

    //rendering e generazione del file PDF
    JasperPrint jp = JasperFillManager.fillReport(JASPER_REPORT_FOLDER + JASPER_FILENAME + ".jasper", null, conn);
    JasperExportManager.exportReportToPdfFile(jp, JASPER_REPORT_FOLDER + "report.pdf");

  }
}

è possibile anche evitare la creazione fisica del file jasper ed effettuare la renderizzazione del report in memoria.

In un'applicazione multi-utente potrebbe essere offerto all'utente il servizio di generazione di un report. Ciascun utente può creare il proprio report ad esempio in formato PDF. Per rendere più efficiente quest'operazione è opportuno rendere disponibile il file jasper e ciascun utente effettua soltanto la renderizzazione del file compilato. Ciò è più efficiente perché l'operazione di compilazione è la più lenta ed è meglio eseguirla una volta sola all'inizio dell'applicazione.

Ti consigliamo anche