JasperReports
Uit Beheerplein
|
In deze portal vindt u de informatie over de applicatie JasperReports van leverancier JasperForge. | ||
|
| ||
|
|
|
|
|
|
|
|
|
|
Beheerplein maakt gebruikt van open source oplossingen en is als web 2.0 toepassing vooral afhankelijk van de input van een ieder die het beheer en warm hart toedraagt. Meldt u daarom aan, gebruik de kennis van anderen en deel uw kennis. | ||
|
- | ||
Datum: 6 februari 2012 | Tijd: 13:34 MET
Datum: 6 februari 2012 | Tijd: 13:34 MET Andere sites in deze serie: www.computererfgoed.nl
Introductie
JasperReports is een veelgebruikt open source (LGPL) reporting library geschreven in Java. Met JasperReports is het mogelijk om een rijke variatie aan rapporten te maken in PDF, RTF, HTML, CSV en XML.
Beginnen met JasperReports
JasperReports' rapporten worden gedefinieerd in XML files, welke een .jrxml extensie hebben. Een jrxml bestand bevat o.a. de volgende elementen:
- <jasperReport> - het root element (hoogste niveau).
- <title> - bevat informatie welke alleen aan het begin van een rapport wordt afgedrukt.
- <pageHeader> - bevat informatie welke aan het begin van iedere pagina van een rapport wordt afgedrukt.
- <detail> - bevat de 'body' van een rapport.
- <pageFooter> - bevat informatie welke aan het einde van iedere pagina van een rapport wordt afgedrukt.
- <band> - definieert een rapportsectie, alle bovengenoemde elementen bevatten een 'band' element als enige onderliggende element (child-element).
Al deze elementen zijn optioneel behalve het root-element 'jasperReport'.
Voorbeeld jrxml bestand welke een eenvoudig rapport maakt met de tekst "Hello World!"
<?xml version="1.0"?> <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperReport name="Simple_Report"> <detail> <band height="20"> <staticText> <reportElement x="180" y="0" width="200" height="20"/> <text><![CDATA[Hello World!]]></text> </staticText> </band> </detail> </jasperReport>
Dit voorbeeld bevat geen <title>, <pageHeader> en <pageFooter> elementen maar wel een <staticText> element. Dat element plaatst vaste tekst in een rapport. Zoals in dit voorbeeld te zien bevat het een <text> element met de tekst welke wordt afgedrukt.
jrxml bestanden moeten vertaald worden ("gecompileerd") naar een binair formaat welke specifiek is voor JasperReports. Dat kan door het aanroepen van de compileReport() methode in de net.sf.jasperreports.engine.JasperCompileManager classe. Er zijn meerdere 'overloaded' versies van deze methode. In het volgende voorbeeld wordt een versie gebruikt welke gebruik maakt van een 'string' parameter.
public class JasperReportsIntro { public static void main(String[] args) { JasperReport jasperReport; JasperPrint jasperPrint; try { jasperReport = JasperCompileManager.compileReport( "reports/jasperreports_demo.jrxml"); jasperPrint = JasperFillManager.fillReport( jasperReport, new HashMap(), new JREmptyDataSource()); JasperExportManager.exportReportToPdfFile( jasperPrint, "reports/simple_report.pdf"); } catch (JRException e) { e.printStackTrace(); } } }
Een jrxml bestand hoeft maar een keer gecompileerd te worden maar in dit voorbeeld wordt het iedere keer gecompileerd wanneer het rapport wordt gestart. Voordat een rapport wordt aangemaakt moet het eerst gevuld worden met gegevens. Dit gebeurt door het aanroepen van de fillReport() methode van de net.sf.jasperreports.engine.JasperFillManager classe. Ook hiervan zijn meerdere versies. In het voorbeeld wordt de versie gebruikt met drie parameters, een 'instance' van net.sf.jasperreports.engine.JasperReport, een java.util.HashMap welke alle parameters bevat welke meegeven worden aan het raopport en een 'instance' van een classe welke de net.sf.jasperreports.engine.JRDataSource interface implementeert. De regel in het bovenstaande voorbeeld welke dat doet is:
jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), new JREmptyDataSource());
Omdat het eenvoudige voorbeeld geen parameters meekrijgt geven we een lege HashMap als de tweede parameter mee en een 'instance' van net.sf.jasperreports.engine.JREmptyDataSource als derde parameter. JREmptyDataSource is een 'convenience' classe in JasperReports. Het is een datasource zonder data.
Als laatste in het voorbeeld exporteren het rapport naar een pdf bestand door middel van de volgende regel:
JasperExportManager.exportReportToPdfFile(jasperPrint, "reports/simple_report.pdf");
Foutmelding
Bij gebruik van verschillende versies van JasperReports/iReports (versie 1 of 2 samen met 3) kan de volgende foutmelding in beeld komen: "net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException: Element type "topPen" must be declared." Oorzaak van deze foutmelding is een aanpassing voor afhandeling van borders in een rapport. Versies van beide programma's naar versie 3 brengen geeft de oplossing. Een andere optie is om een configuratieparameter, welke de manier van border afhandeling beinvloed, op versie 2 in te stellen (=oude manier van borderafhandeling). JasperReport changelog release 3.0.0: new configuration property called "net.sf.jasperreports.export.legacy.border.offset" to allow rendering element borders in older reports using the legacy border offset technique that that was used in versions prior to the 2.0.3 release. English
cause of this error is the change in version 3 for handling borders. Transit to the new version or make use of the configuration option (see above).