Reporting mit Jasper Reports
description
Transcript of Reporting mit Jasper Reports
1
Christian Blaserb-next Engineering GmbH
Jasper ReportsJava Expertenkreis
Jasper ReportsJasper Reports --EinleitungEinleitung
2
• Sehr umfangreiche Open Source Java Reporting Engine
• Entwicklung durch Teodor Danciu im Juni 2001 gestartet
• Erste Version (0.1.5) am 3. November 2001 veröffentlicht, die Version 1.0 am21. Juli 2005.
• Heute verfügbar durch JasperForge und kommerziell durch Jaspersoft.
• JasperSoft entstand 2004 aus der Firma Panscopic. 2004 erwarb Panscopic alle Rechte anJasperReports und nannte sich in JasperSoft um.
• Lizenz: LGPLv3. Kommerzielle Lizenzen incl. Support über Jasper Soft verfügbar
• Aktuelle Version: 3.7.4
Jasper ReportsJasper Reports –– Features & HighlightsFeatures & Highlights
3
• API in Java realisiert
• vollständig in eigene Applikationen integrierbar
• pixelgenaue Erstellung von Reports
• Unterstützung zahlreicher Ausgaben• Bildschirm• Drucker• Datei - Ausgabeformate: PDF, HTML, XLS, CSV, RTF, Word, TXT, XML,PPT etc.
• Unterstützung nahezu beliebiger Datenquellen
• Mehrsprachigkeit, Barcodes, Charts, Templates, Conditional Layouts, etc.
• Community JasperForge: > 160 TSD Mitglieder, > 11Mio. downloads
Jasper ReportsJasper Reports ––RequirementsRequirements
4
• Jasper Reports API – jasperreports-3.7.4.jar
• Download verfügbar über JasperForgehttp://sourceforge.net/projects/jasperreports/files/jasperreports/JasperReports%203.7.4/jasperreports-3.7.4.jar/download
• Registrierung bei JasperForge nicht zwingend erforderlich(siehe Link im unteren Bereich der Seite)
• Alle Funktionalitäten in einer API gebündelt
• regelmäßige Releases - Minor Updates in monatlichen Zyklen
• zahlreiche Abhängigkeiten zu weiteren Bibliotheken
Jasper ReportsJasper Reports –– AbhängigkeitenAbhängigkeiten
5
JRE • Java Runtime Environment 1.4 or höher
Commons •Jakarta Commons BeanUtils Component (version 1.7 oder höher)http://jakarta.apache.org/commons/beanutils/•Jakarta Commons Collections Component (version 2.1 oder höher)http://jakarta.apache.org/commons/collections/•Jakarta Commons Javaflow (Sandbox version)http://jakarta.apache.org/commons/sandbox/javaflow/•Jakarta Commons Logging Component (version 1.0 oder höher)http://jakarta.apache.org/commons/logging/
JRXML • JAXP 1.1 XML Parser• Jakarta Commons Digester (version 1.7 oder höher)http://jakarta.apache.org/commons/digester/• Für die Report Übersetzung einen der folgenden Compiler:
•Eclipse JDT Java Compiler (recommended) http://www.eclipse.org/jdt/•JDK 1.4 oder höher•Jikes Compiler http://jikes.sourceforge.net•Groovy (version 1.5.5 or later) http://groovy.codehaus.org•BeanShell (version 2.0 beta 4 or later) http://www.beanshell.org
Jasper ReportsJasper Reports –– Abhängigkeiten 2Abhängigkeiten 2
6
JDBC • JDBC 2.0 Treiber
XLS • Jakarta POI (version 3.0.1 or later) http://jakarta.apache.org/poi/
• JExcelApi (version 2.6 or later) http://jexcelapi.sourceforge.net/
Charts • JFreeChart (>= Version 1.0.0) http://www.jfree.org/jfreechart/
•JCommon – für JFreeChart http://www.jfree.org/jcommon/
•Batik SVG Toolkit (>= Version 1.7) – erforderlich, wenn Charts als SVG gerendert werden sollen.http://xmlgraphics.apache.org/batik/
PDF • iText - Freie Java-PDF library von Bruno Lowagie and Paulo Soares (>= version 1.3.1)http://www.lowagie.com/iText/
Jasper ReportsJasper Reports ––Ablauf ReporterzeugungAblauf Reporterzeugung
7
Create• Report Definition erzeugen
Load• Reportsdesign laden
Compile• Design kompilieren
Fill• Design mit Daten füllen
Export• Report exportieren oder anzeigen
Jasper ReportsJasper Reports –– ReportReport LifecycleLifecycle
8
JRXML JasperDesign JasperReport JasperPrint
JasperPrintManager
JasperFillManager
JasperCompileManager
JRXmlLoader JRCompiler
JasperExportManager
parse Compile
Fill
Screen
Printer
etc.
HTML
Export
Report Lifecycle
Jasper ReportsJasper Reports –– Erstellen eines ReportsErstellen eines Reports
9
• Direkt per API über ein net.sf.jasperreports.engine.design.JasperDesign -Objekt
• Erstellen einer JRXML-Datei per Editor
• Nutzung eines Report Designers
• IReport:• verfügbar unter http://jasperforge.org/projects/ireport• Kommerzielle Version oder GPL-Version verfügbar• direkt vom gleichen Projekt
• Jasper Assistant:• verfügbar unter http://www.jasperassistant.com/• Lizenz ab 129$• Eclipse-Plugin verfügbar
Jasper ReportsJasper Reports ––ReportdesignReportdesign
10
• Report-Design erfolgt in einem XML-Dialekt• Speicherung als JRXML-Datei
<?xml version="1.0"?><!DOCTYPE jasperReport
PUBLIC "-//JasperReports//DTD Report Design//EN""http://jasperreports.sourceforge.net/dtds/jasper
report.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>
Jasper ReportsJasper Reports –– Aufbau eines BerichtsAufbau eines Berichts
11
• Berichtsabschnitte (Sections)
TitlePage headerColumn headerDetailColumn footerPage footerSummaryLast page footerBackground
• Attribute
Band heightPreventing band splitSkipping bands
• Gruppierungen
• Felder, Variablen, Expressions
• Parameter
• Report Query oder Datenquelle
• Subreports
• Charts
Jasper ReportsJasper Reports –– Report ladenReport laden
12
import dori.jasper.engine.*;
import dori.jasper.engine.design.*;
JasperDesign design =JasperManager.loadXmlDesign("hello.jrxml");
JasperReport report =JasperManager.compileReport(design);
JRXML JasperDesign JasperReport
JasperCompileManager
JRXmlLoader JRCompiler
parse Compile
Jasper ReportsJasper Reports –– Report mit Daten füllenReport mit Daten füllen
13
JasperReport JasperPrint
JasperFillManager
Fill
compiledReport Template
Parameter DataSource
• Im “Fill”-Prozess werden neben Report Parametern, Resource Bundles, Locales, auch dieDaten an den Report übergeben.
• Ergebnis ist eine anzeigbare, druck- bzw. exportierbare Version des Reports als Objekt derKlasse net.sf.jasperreports.engine.JasperPrint
Jasper ReportsJasper Reports –– Report mit Daten füllenReport mit Daten füllen
14
• Zum Füllen werden einem Objekt vom Typ net.sf.jasperreports.engine.JasperFillManager
• Übergeben werden für das Report Template• java.io.InputStream oder• net.sf.jasperreports.engine.JasperReport oder• java.lang.String sourceFileName
• Parameter werden als java.util.Map params übergeben
• Daten werden übergeben als :• Implementierung Interface JRDataSource oder• java.sql.Connection connection
• Hierbei wird die eine SQL Query, die im Report definiert ist, per JDBCVerbindung ausgeführt und das resultierende ResultSet-Objekt in eineJRResultSetDataSource gewrapped
Jasper ReportsJasper Reports –– Report mit Daten füllenReport mit Daten füllen
15
…
JasperReport report =JasperManager.compileReport(design);
ResultSet rs = getResultSet();
JRDataSource dataSource = newJRResultSetDataSource(rs);
Map params = new java.util.HashMap();
params.put("Bonus", new Integer(12000));
params.put("Year", "2004");
JasperPrint print = JasperManager.fillReport(report, param, dataSource);
Beispiel: Reportdesign befüllen
Jasper ReportsJasper Reports –– Report exportierenReport exportieren
16
JasperPrint
JasperPrintManager
JasperExportManager
Screen
Printer
XML
HTML
Export
XLS (Excel)
(Word)RTF (Word)
TXT
CSV
Jasper ReportsJasper Reports –– Report exportieren / anzeigenReport exportieren / anzeigen
17
…JasperPrint print = JasperManager.fillReport(
report, param, dataSource);
<!-- FileExport -->JasperExportManager.exportReportToHtmlFile(
print, "hello.html");JasperExportManager.exportReportToPdfFile(
print, "hello.pdf");JasperExportManager.exportReportToXmlFile(
print, "hello.xml", false);
<!-- Bildschirmanzeige -->JasperViewer jv = new JasperViewer( jasperPrint,false, locale);jv.setVisible( true );
Beispiel: Reportdesign exportieren oder anzeigen
Jasper ReportsJasper Reports –– Report exportieren / anzeigenReport exportieren / anzeigen
18
• Zum Export wird in der Regel eine Instanz der Klassenet.sf.jasperreports.engine.JasperExportManager verwendet.
• Methoden zum Export in PDF, HTML, XML im JasperExportManager vorhanden
• Output erfolgt in File, byte array oder in java.io.Outputstream
• Für den spezialisierten Export können Implementierungen des Interfacesnet.sf.jasperreports.engine .JRExporter genutzt werden
• Direkte Implementierungen sind:JExcelApiExporter JRAbstractExporter, JRCsvExporter, JRDocxExporter, JRGraphics2DExporter, JRHtmlExporter,JROdsExporter, JROdtExporter, JROpenDocumentExporter, JRPdfExporter, JRPptxExporter,JRPrintServiceExporter, JRRtfExporter, JRTextExporter, JRXhtmlExporter, JRXlsAbstractExporter, JRXlsExporter,JRXlsxExporter, JRXml4SwfExporter, JRXmlExporter, JRXmlssExporter
Jasper ReportsJasper Reports –– ViewerViewer
19
Jasper ReportsJasper Reports –– DatenquellenDatenquellen
20
• Datenquellen für einen Jasper Report müssen das Interface JRDatasource implementieren
• Zahlreiche Defaultimplementierungen vorhanden:JRAbstractBeanDataSource, JRAbstractTextDataSource, JRBeanArrayDataSource,JRBeanCollectionDataSource, JRCsvDataSource, JREmptyDataSource, JRHibernateAbstractDataSource,JRHibernateIterateDataSource, JRHibernateListDataSource, JRHibernateScrollDataSource,JRJpaDataSource, JRMapArrayDataSource, JRMapCollectionDataSource, JRMondrianDataSource,JROlapDataSource, JRResultSetDataSource, JRSortableDataSource, JRTableModelDataSource,JRXlsDataSource, JRXmlDataSource
public interface JRDataSource{public boolean next()
throws JRException;public Object getFieldValue(JRField field)
throws JRException;}
Jasper ReportsJasper Reports –– Reportdesign mitReportdesign mit iReportiReport
21
• Einfache Installation• Download der aktuellsten Version von Jasperforge und Start der EXE
• Verschiedene Wizards zur Erstellung erster Reports, Styles und SQL Queries
• Gute Unterstützung zur Positionierung und Ausrichtung von Report Elementen
• Preview in allen Ausgabeformaten und leichter Wechsel der Datenquellen
Jasper ReportsJasper Reports –– Reportdesign mitReportdesign mit iReportiReport
22
Jasper ReportsJasper Reports –– Felder und ParameterFelder und Parameter
23
• Benennung von Feldern und Parametern:• Felder werden im Report mit $F { Feldname } angeprochen• Parameter werden mit $P { Feldname } adressiert• Resourcen werden mit $R { Feldname } adressiert
• Quelle der Felder ist ein Eintrag in der Datasource
• Quelle der Parameter ist die Map, die als Parameter beim Füllen des Reports übergebenwurde
• Quelle der Resourcen ist das Language Resource Bundle des Berichts
• Der Feldname eines Parameters oder einer Resource muss dem Key in der Map oder demResourceBundle entsprechen und der Typ dem jeweiligen Objekttyp
• Feldnamen für Felder hängen von der Datasource ab:• Bei einem Resultset/Datenbank Abfrage ist der Feldname gleich dem Spaltennamen• Bei einer Bean Datasource muss der Feldname dem Attribut des Beans entsprechen• Bei einem TableModel müssen die Felder Column1, Column2, etc. genannt werden
Jasper ReportsJasper Reports –– Reportdesign mitReportdesign mit iReportiReport
24
• Unterstützung von Expressions für• die Anzeige (TextField Expression)• konditionaler Druck (Print when expression)
• Unterstützung von Feldformaten
• Eigenschaften für Felder können parametrisiert werden
Jasper ReportsJasper Reports –– Chart SupportChart Support
25
• Jasper Reports benutzt die JFreeChart-Bibliothek zur Anzeige von Chart-Elementen
•Quelle: http://www.jfree.org/jfreechart/
• Es werden zahlreiche Chart-Typen unterstützt
• Chart lässt sich im Report durch externe Style-Dateiparametrisieren
Jasper ReportsJasper Reports –– Barcode SupportBarcode Support
26
• Jasper Reports unterstützt die Erstellung von Barcodes
• Verwendung von Barbecuehttp://barbecue.sourceforge.net/
• Alternative Verwendung von Barcode4Jhttp://barcode4j.sourceforge.net/
• Unterstützung zahlreicher 1D- und 2D-Codes
Jasper ReportsJasper Reports –– InternationalisierungInternationalisierung
27
• Jasper Reports unterstützt Internationalisierung auf Basis der Java-Mittel(Locale, Resource Bundle)
• Es werden Unicode (UTF-8), ISO-8859-1 (Latin 1) und weitere Encodings unterstützt.
• Ein Reportdesign kann so in verschiedenen Sprachen angezeigt werden.
• Übergabe Resource File und Locale in den Report-Parametern
HashMap params = new HashMap();
params.put("REPORT_RESOURCE_BUNDLE",reportlang.getLanguageResourceBundle());
params.put( "REPORT_LOCALE", Language.getLocaleObject() );
Jasper ReportsJasper Reports –– Literatur, Artikel,Literatur, Artikel, FAQ‘sFAQ‘s
28
• Ultimate Guides für Jasper Reports und iReportvon JasperSoft als PDF Buch verfügbar je 49,95$ incl.Subscription für Updates
• The Definitive Guide to JasperReports ,Teodor Danciu, Lucian Chirita , Giulio ToffoliAmazon Preis: 37 EUR
• Jasperreports 3.5 for Java Developers ,David Heffelfinger, Amazon Preis: 35 EUR
• JasperReports 3.6 Development Cookbook,Bilal Siddiqui, 32 EUR, als PDF 22EUR
• The Definitive Guide to iReport ,Giulio Toffoli ,Teodor DanciuAmazon Preis: 42 EUR
• iReport 3.7,Shamsuddin AhammadAmazon Preis: 42 EUR
Jasper ReportsJasper Reports –– AlternativenAlternativen
29
• BIRT - http://www.eclipse.org/birt/phoenix/Unterstützung durch Actuate
• Crystal Reports - http://www.sap.com/solutions/sap-crystal-solutions/index.epxSAP früher Business Objects
• Jreport - http://www.jinfonet.com/Jinfonet Software
• Windward Reports - http://www.windwardreports.comWindward Reports
• weitere Tools und Libs verfügbar:http://java-source.net/open-source/charting-and-reporting
Jasper ReportsJasper Reports –– Auswahl des richtigen ToolsAuswahl des richtigen Tools
30
• Ziele für das Reporting definieren:• Dokumentengenerierung (z.B. PDF, DOC)
- Rechnungen drucken, Listen ausgeben, etc.
• BI Abfragen mit AdHoc Queries und Datenanalyse
• Charting, Dashboards, grafische Ausgaben?
• Zielgruppe: Technik, Endanwender, ManagementSoll der User selber Reports gestalten?Welche techn. Skills hat er?
• PortabilitätSind die Reporting Engines voll in Java umgesetzt oder werden proprietäreAnwendungen genutzt? (z.B. MS Word, Windows dll, etc.)
• Templates:Sollen Templates genutzt werden ?Sollen Templates durch den Endanwender (Fachabteilung) erstellt werdenkönnen?
Jasper ReportsJasper Reports –– QuoQuo VadisVadis??
31
• Starke Entwicklung in Richtung BI Tool
• Jaspersoft verteibt kommerziell Jaspersoft Business Intelligence Suite
• Jasper Server (kommerziell, GPL)Report Server, Ad hoc Queries, Dashboard, Flash Charting, Datenanalyse/OLAP
• Jasper Report (LGPL)Reportframework
• iReport (kommerziell, GPL)Reportdesigner
• Jasper AnalysisOLAP Funktionalitäten
• Jasper ETL (kommerziell, GPL)Datenintegration, Transformation
Jasper ReportsJasper Reports –– Pro & ContraPro & Contra
32
- Stabiles und mächtigesFramework
- Einfache Reporterzeugung
- Ermöglicht einfaches Druckenoder Dokumentenexport aus JavaAnwendungen heraus
- PDF Unterstüzung, vieleFormate
- Flexible Datenquellen
- Gut integrierbar
+- Viele externe Abhängigkeiten
- Unklare Entwicklung desLizenzmodells
- Verknüpfung Feldbezeichner zurDatenquelle
- Parameter nicht immer gutdokumentiert
-
Best Practice for Capital Markets Compliance
Christian BlaserLeiter Banking Solutions
b-next Engineering GmbH
Fon: +(49) 05221 99 280 0
Vielen Dank für IhreAufmerksamkeit
Vielen Dank für IhreAufmerksamkeit