Mokabyte

Dal 1996, architetture, metodologie, sviluppo software

  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti

Nel numero:

105 marzo
, anno 2006

JasperReports: una libreria Open Source per la reportistica

II parte

Guglielmo Iozzia
Guglielmo Iozzia

Guglielmo Iozzia si è Laureato nel 1999 in Ingegneria Elettronica (indirizzo Biomedico) presso l‘Università di Bologna. Ha progettato e realizzato un software diagnostico per la predizione dell‘andamento della pressione intracranica in pazienti in terapia intensiva neurochirurgica. Frequenta il mondo Java dall‘inizio del 2000. Dopo numerose esperienze presso un‘azienda di Bologna del settore IT (fino all‘aprile del 2006), e per qualche mese in una analoga società di Roma, ha scelto la libera professione, lavorando per RAI Net fino ai primi mesi del 2008. In seguito è diventato Senior IT Consultant per la FAO (Food and Agriculture Organization of the United Nations). In ambito FAO ha dedicato quasi tutto il 2012 al progetto GRMS (Global Resources Management System) in qualità di "Web Services and cross-environmental integration specialist". Da luglio 2013 si è trasferito a Dublino, dove ricopre il ruolo di SVT Automation Engineer per IBM Ireland.

MokaByte

JasperReports: una libreria Open Source per la reportistica

II parte

Picture of Guglielmo Iozzia

Guglielmo Iozzia

  • Questo articolo parla di: Frameworks & Tools, Programmazione & Linguaggi

Primo articolo su JasperReports, una libreria Java Open Source che consente la generazione dinamica di report a partire da una fonte dati e la successiva renderizzazione in svariati formati, tra i quali PDF e HTML. Esempio pratico di utilizzo.

Introduzione

Nel precedente articolo è stata descritta l‘architettura di JasperReports. In questo vedremo un esempio pratico di utilizzo delle API di tale libreria all‘interno di un‘applicazione Java. Per l‘esempio faremo riferimento, come fonte dati, ad un database Access (per semplicità ; ovviamente il db potrà  essere di un vendor diverso da Microsoft) chiamato jasper e contenente una sola tabella, addresses avente cinque campi: id di tipo numerico, firstname, lastname, street e city di tipo testo.

Layout di un report

Ricordando lo schema di principio spiegato nell‘articolo precedente (e riportato per comodità  anche in questo in figura 1), la prima cosa da fare è quella di definire il layout dei report che dovrà  generare l‘applicazione.

Un layout non è altro che un file XML, con estensione .jrml, e costruito secondo lo schema definito in jasperreport.dtd.
In testa al layout troviamo la dichiarazione della versione dell‘XML e l‘indicazione del DTD adottato.

]>

Il tag root del file sarà  :

Gli attributi di questo tag sono gli attributi di pagina del report. Un report Jasper è in grado di accettare parametri in ingresso dalla classe Java preposta alla sua generazione. Il tag serve a dichiarare tale parametri. L‘attributo name indica il nome del parametro, mentre class ne indica il tipo Java. Nel nostro esempio i parametri in ingresso sono tre:

Il tag stabilisce la query SQL con la quale vengono recuperati dal database i dati che popoleranno il report.

SELECT * FROM addresses

Quindi, tramite il tag , bisogna dichiarare i campi delle tabelle coinvolte e la loro tipologia Java:

È possibile definire anche delle variabili tramite il tag :

($V{CityNumber} != null)?(new Integer($V{CityNumber}.intValue() + 1)):(new Integer(1))

A questo punto possiamo definire le logiche di raggruppamento dei dati tramite il tag :

$F{City} "  " + String.valueOf($V{CityNumber}) + ". " + String.valueOf($F{City})Count : $V{CityGroup_COUNT}

Qualora volessimo uno sfondo personalizzato diverso da quello bianco di default, possiamo utilizzare il tag . Nel nostro esempio aggiungeremo una immagine trasparente come sfondo per tutte le pagine:

"src/jr/test/jr.watermark.gif"

Infine dobbiamo definire il layout delle regioni della pagina titolo, header, dettaglio, footer e sommario, rispettivamente tramite i tag , <pageHeader>, <detail>, <pageFooter> e </p> <summary>.</p> <pre><title><band height="50"><line><reportElement x="0" y="0" width="515" height="0" forecolor="black"/></line><textField isBlankWhenNull="true"><reportElement x="0" y="10" width="515" height="30"/><textElement textAlignment="Center" lineSpacing="Single"><font reportFont="Arial_Normal" size="22"/></textElement><textFieldExpression class="java.lang.String">$P{ReportTitle}</textFieldExpression></textField></band>IDNameStreet$F{Id}$F{FirstName} + " " + $F{LastName}$F{Street}"Page " + String.valueOf($V{PAGE_NUMBER}) + " of"" " + String.valueOf($V{PAGE_NUMBER})

"There were " + String.valueOf($V{REPORT_COUNT}) + " address records on this report."

Codice Java per la generazione di report

La classe Java del nostro esempio preposta alla generazione del report si chiama GeneralTest. Il metodo che esegue tutte le operazioni è createReport:

private int createReport( String[] pStrArgs )

Come parametro in ingresso riceve un array di stringhe. La prima operazione che viene eseguita è la creazione del semicompilato (file .jasper) secondo il template indicato come primo argomento dell‘array pStrArgs:

// compilazione del report (creazione del .jasper a partire dal .jrxml)try{JasperCompileManager.compileReportToFile( pStrArgs[0]);}catch( Exception jre ){System.out.println( "GeneralTest.createReport(): eccezione: " + jre.getMessage() );return -1;}

Il metodo compileReportToFile della classe JasperCompilerManager esegue la compilazione. A questo punto, ricordando la figura 2, abbiamo ottenuto il file .jasper da cui l‘applicazione, in qualsiasi momento, sarà  in grado di generare il report Nella nostra classe di esempio la generazione del report avviene subito dopo la creazione del semicompilato, ma nulla ovviamente vieta di eseguire l‘operazione in un secondo momento. Per la generazione del report, il metodo fillReportToFile della classe JasperFillManager ha bisogno di una connessione verso il database da cui recuperare i dati. Il metodo getConnection della nostra classe di esempio crea la connessione:

private Connection getConnection() throws ClassNotFoundException, SQLException{String lStrDriver = "sun.jdbc.odbc.JdbcOdbcDriver";String lStrConnectString = "jdbc:odbc:Jasper";String lStrUser = "";String lStrPassword = "";Class.forName( lStrDriver );Connection lConn = DriverManager.getConnection( lStrConnectString, lStrUser, lStrPassword );return lConn;}Il codice necessario per la creazione del report (file .jrprint) è il seguente:
// passaggio dei parametri al reportMap lParameters = new HashMap();lParameters.put( "ReportTitle", "General test" );lParameters.put( "FilterClause", "" );lParameters.put("OrderClause", "Id" );// creazione della connessione verso il databaseConnection lConnection = getConnection();// creazione del report (file .jrprint)JasperFillManager.fillReportToFile( pStrArgs[1], lParameters, lConnection );

Il primo argomento del metodo fillReportToFile è il nome del file .jprint da creare.
Adesso dobbiamo decidere cosa fare del nostro report. Possiamo visualizzarlo, mandarlo in stampa o salvarlo su file in uno dei formati previsti da JasperReports. Nel nostro esempio viene salvato su un file PDF, grazie al metodo exportReportToPdfFile della classe JasperExportManager:

// export del report in PDFJasperExportManager.exportReportToPdfFile( pStrArgs[2], pStrArgs[3] );

I due argomenti in ingresso al metodo exportReportToPdfFile sono, rispettivamente, il nome del report .jprint e il nome da assegnare al file PDF su cui viene salvato.
Il risultato finale sarà  un report come quello mostrato in figura 2:

L‘esempio completo è allegato all‘articolo.

Conclusioni

In questo articolo abbiamo visto quali sono i passi comuni a tutte le operazioni di generazione di report tramite JasperReports e come viene realizzata la perfetta separazione del layout dai dati. Una volta definito un layout, la logica di generazione dei report diventa una operazione meccanica. Nel prossimo ed ultimo articolo vedremo come è possibile implementare un JRDataSource ad hoc per l‘integrazione della libreria con una nostra applicazione e come rendere più agevole la creazione dei layout JRML mediante l‘utilizzo di iReport, una applicazione Open Source basata su JasperReports.

1Teodor Danciu “Documentazione ufficiale di JasperReports”http://jasperreports.sourceforge.net/2http://jasperreports.sourceforge.net/”JasperReports and iReports”

Guglielmo Iozzia
Guglielmo Iozzia

Guglielmo Iozzia si è Laureato nel 1999 in Ingegneria Elettronica (indirizzo Biomedico) presso l‘Università di Bologna. Ha progettato e realizzato un software diagnostico per la predizione dell‘andamento della pressione intracranica in pazienti in terapia intensiva neurochirurgica. Frequenta il mondo Java dall‘inizio del 2000. Dopo numerose esperienze presso un‘azienda di Bologna del settore IT (fino all‘aprile del 2006), e per qualche mese in una analoga società di Roma, ha scelto la libera professione, lavorando per RAI Net fino ai primi mesi del 2008. In seguito è diventato Senior IT Consultant per la FAO (Food and Agriculture Organization of the United Nations). In ambito FAO ha dedicato quasi tutto il 2012 al progetto GRMS (Global Resources Management System) in qualità di "Web Services and cross-environmental integration specialist". Da luglio 2013 si è trasferito a Dublino, dove ricopre il ruolo di SVT Automation Engineer per IBM Ireland.

Facebook
Twitter
LinkedIn
Picture of Guglielmo Iozzia

Guglielmo Iozzia

Guglielmo Iozzia si è Laureato nel 1999 in Ingegneria Elettronica (indirizzo Biomedico) presso l‘Università di Bologna. Ha progettato e realizzato un software diagnostico per la predizione dell‘andamento della pressione intracranica in pazienti in terapia intensiva neurochirurgica. Frequenta il mondo Java dall‘inizio del 2000. Dopo numerose esperienze presso un‘azienda di Bologna del settore IT (fino all‘aprile del 2006), e per qualche mese in una analoga società di Roma, ha scelto la libera professione, lavorando per RAI Net fino ai primi mesi del 2008. In seguito è diventato Senior IT Consultant per la FAO (Food and Agriculture Organization of the United Nations). In ambito FAO ha dedicato quasi tutto il 2012 al progetto GRMS (Global Resources Management System) in qualità di "Web Services and cross-environmental integration specialist". Da luglio 2013 si è trasferito a Dublino, dove ricopre il ruolo di SVT Automation Engineer per IBM Ireland.
Tutti gli articoli
Nello stesso numero
Loading...

Architetture d‘Integrazione – Parte I

di Marco Piraccini e Stefano Rossini

La progettazione di applicazioni web con UML

II parte - Approfondimenti

Architetture e tecniche di progettazione EJB

V: Data model e sincronizzazione tramite CMP2.0

Service Oriented Architecture

VI parte: Dalla teoria alla pratica - Enterprise S

Dal RAD al Project Management: MDA non è mai stata così

Parte II Project Management con PRINCE2

Python e Java: potenziare Java con un linguaggio di scripting

di Leonardo Casini

Nella stessa serie
Loading...

JasperReports: una libreria Open Source per la reportistica

III parte: utilizzo di iReport per la creazione di layout

JasperReports: una libreria Open Source per la reportistica

Parte I

Mokabyte

MokaByte è una rivista online nata nel 1996, dedicata alla comunità degli sviluppatori java.
La rivista tratta di vari argomenti, tra cui architetture enterprise e integrazione, metodologie di sviluppo lean/agile e aspetti sociali e culturali del web.

Imola Informatica

MokaByte è un marchio registrato da:
Imola Informatica S.P.A.
Via Selice 66/a 40026 Imola (BO)
C.F. e Iscriz. Registro imprese BO 03351570373
P.I. 00614381200
Cap. Soc. euro 100.000,00 i.v.

Privacy | Cookie Policy

Contatti

Contattaci tramite la nostra pagina contatti, oppure scrivendo a redazione@mokabyte.it

Seguici sui social

Facebook Linkedin Rss
Imola Informatica
Mokabyte