33
1 Christian Blaser b-next Engineering GmbH Jasper Reports Java Expertenkreis

Reporting mit Jasper Reports

Embed Size (px)

DESCRIPTION

Vortrag Expertenkreis Java 23.9.2010

Citation preview

Page 1: Reporting mit Jasper Reports

1

Christian Blaserb-next Engineering GmbH

Jasper ReportsJava Expertenkreis

Page 2: Reporting mit Jasper Reports

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

Page 3: Reporting mit Jasper Reports

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

Page 4: Reporting mit Jasper Reports

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

Page 5: Reporting mit Jasper Reports

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

Page 6: Reporting mit Jasper Reports

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/

Page 7: Reporting mit Jasper Reports

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

Page 8: Reporting mit Jasper Reports

Jasper ReportsJasper Reports –– ReportReport LifecycleLifecycle

8

JRXML JasperDesign JasperReport JasperPrint

JasperPrintManager

JasperFillManager

JasperCompileManager

JRXmlLoader JRCompiler

JasperExportManager

parse Compile

Fill

Screen

Printer

PDF

etc.

HTML

Print

Export

Report Lifecycle

Page 9: Reporting mit Jasper Reports

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

Page 10: Reporting mit Jasper Reports

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>

Page 11: Reporting mit Jasper Reports

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

Page 12: Reporting mit Jasper Reports

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

Page 13: Reporting mit Jasper Reports

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

Page 14: Reporting mit Jasper Reports

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

Page 15: Reporting mit Jasper Reports

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

Page 16: Reporting mit Jasper Reports

Jasper ReportsJasper Reports –– Report exportierenReport exportieren

16

JasperPrint

JasperPrintManager

JasperExportManager

Screen

Printer

PDF

XML

HTML

Print

Export

XLS (Excel)

(Word)RTF (Word)

TXT

CSV

Page 17: Reporting mit Jasper Reports

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

Page 18: Reporting mit Jasper Reports

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

Page 19: Reporting mit Jasper Reports

Jasper ReportsJasper Reports –– ViewerViewer

19

Page 20: Reporting mit Jasper Reports

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;}

Page 21: Reporting mit Jasper Reports

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

Page 22: Reporting mit Jasper Reports

Jasper ReportsJasper Reports –– Reportdesign mitReportdesign mit iReportiReport

22

Page 23: Reporting mit Jasper Reports

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

Page 24: Reporting mit Jasper Reports

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

Page 25: Reporting mit Jasper Reports

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

Page 26: Reporting mit Jasper Reports

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

Page 27: Reporting mit Jasper Reports

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() );

Page 28: Reporting mit Jasper Reports

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

Page 29: Reporting mit Jasper Reports

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

Page 30: Reporting mit Jasper Reports

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?

Page 31: Reporting mit Jasper Reports

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

Page 32: Reporting mit Jasper Reports

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

-

Page 33: Reporting mit Jasper Reports

Best Practice for Capital Markets Compliance

Christian BlaserLeiter Banking Solutions

b-next Engineering GmbH

[email protected]

Fon: +(49) 05221 99 280 0

Vielen Dank für IhreAufmerksamkeit

Vielen Dank für IhreAufmerksamkeit