{"id":2412,"date":"2013-09-28T13:44:45","date_gmt":"2013-09-28T11:44:45","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2412"},"modified":"2013-09-28T13:46:48","modified_gmt":"2013-09-28T11:46:48","slug":"der-report-generator-jasperreport","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/09\/der-report-generator-jasperreport\/","title":{"rendered":"Der Report-Generator JasperReport"},"content":{"rendered":"<p>JasperReport ist eine weit verbreitete Open-Source-Software unter der LGPL-Lizenz zum Erstellen von Reports. Auf der Basis einer Vorlagendatei im XML-Format setzt JasperReports die Eingabe, die etwa aus einer relationalen Datenbank stammt, in eine Ausgabe um. Als Ausgabeformate unterst\u00fctzt der Generator drei Typen von Ausgaben: Text-\/Zeichenbasierte Dokumente HTML, RTF, CSV, TXT und XML, Dokumente in den Bin\u00e4rdateiformaten PDF, XLS und Export auf ein Grafik-Ger\u00e4t (Graphics2D und Java Print Service). Der Unterschied ist, dass HTML, XLS und CSV nur eingeschr\u00e4nkte Positionierungen erlauben und nicht wie die anderen Formate pixelgenaue Boxen.<\/p>\n<p>JasperReport greift auf weitere Open-Source-Bibliothek zur\u00fcck, etwa auf <i>iText<\/i> (<a href=\"http:\/\/itextpdf.com\/\">http:\/\/itextpdf.com\/<\/a>) f\u00fcr die PDF-Ausgabem, <i>JFreeChart (<a href=\"http:\/\/www.jfree.org\/jfreechart\/\">http:\/\/www.jfree.org\/jfreechart\/<\/a>)<\/i> f\u00fcr diverse Diagramme oder Apache POI zu Generieren von Excel XLS Dokumenten (dann aber ohne Charts). Rund um JasperReport (<a href=\"http:\/\/community.jaspersoft.com\/project\/jasperreports-library\">http:\/\/community.jaspersoft.com\/project\/jasperreports-library<\/a>) ist ein \u00d6kosystem mit weiteren Tools entstanden. JasperReports wird zusammen mit anderen Tools von der <i>JasperSoft Corporation (<a href=\"http:\/\/www.jaspersoft.com\/\">http:\/\/www.jaspersoft.com\/<\/a>)<\/i> entwickelt. Das Unternehmen hat weiterhin die freie Swing-Anwendung <i>iReport (<a href=\"http:\/\/community.jaspersoft.com\/project\/ireport-designer\">http:\/\/community.jaspersoft.com\/project\/ireport-designer<\/a>)<\/i> zur Erstellung von JasperReport-Vorlagendateien im Portfolio. <i>JasperAssistant (<a href=\"http:\/\/www.jasperassistant.com\/\">http:\/\/www.jasperassistant.com\/<\/a>) <\/i>ist ein Beispiel f\u00fcr eine kommerzielle Software (129 US Dollar f\u00fcr eine Lizenz), um die Vorlagendateien grafisch in Eclipse zu erstellen.<\/p>\n<p>Ein Report besteht bei JasperReport aus so genannten <i>Bands<\/i>, die auch Report-<i>Sektionen<\/i> genannt werden. Es lassen sich drei Typen von Sektionen ausmachen:<\/p>\n<ul>\n<li>Sektionen, die nur genau einmal im Report auftauchen k\u00f6nnen, wie der Titel am Anfang, oder eine Zusammenfassung am Ende.<\/li>\n<li>Sektionen, die auf jede Seite stehen k\u00f6nnen, wie die Seitenkopf- und Fu\u00dfzeile.<\/li>\n<li>Eine <i>Detail<\/i>-Sektion, die einer Tabelle mit Eintr\u00e4gen aus Datenquellen wie Datenbanken \u00e4hnelt.<\/li>\n<\/ul>\n<p>Alle Bands haben eine feste Reihenfolge und eine benutzerdefinierte H\u00f6he und Breite. Die Reihenfolge der Segmente ist: Hintergrund, Titel, Seitenkopf, Spaltenkopf, Gruppierungskopf, Detail, Gruppierungsende, Spaltenende, Seitenende, letztes Seitenende, Zusammenfassung.<\/p>\n<p>Die Elemente dieser Bands nennen sich <i>Report-Objekte.<\/i> JasperReport definiert zwei Textelemente, vier grafische Objekte und einen Sub-Report \u2013 ein Sub-Report ist ein im Report eingebetteter Unter-Report. Dass es als Report-Objekte zweimal Textfelder gibt, liegt daran, dass JasperReport zwischen statischem Text, etwa f\u00fcr einen festen Spaltennamen, und einem dynamischen Text unterscheidet. Der dynamische Text kann sich w\u00e4hrend der Reporterstellung \u00e4ndern, wenn etwa ein Feld aus einer Datenbank stammt oder die Seitenzahl angezeigt wird. Zu den grafischen Report-Objekten z\u00e4hlen Linie, Rechteck (auch abgerundet) und Ellipse. Alle weisen eine Vielzahl von Eigenschaften auf, wie Strichtypen, Dicken und Farben. Dazu kommen Bilder, die gew\u00fcnscht skaliert und positioniert vom Datensystem, Datenbank oder \u00fcber das Netzwerk kommen k\u00f6nnen.<\/p>\n<p>W\u00e4hrend bei statischen Textelemente sich der Werte nicht \u00e4ndern, stellen dynamischen Textelemente so genannte <i>Ausdr\u00fccke<\/i> dar. Ein Ausdruck wird zur Laufzeit berechnet und als String in den Report gesetzt. Der Ausdruck kann auf verschiedene Datenspeicher zur\u00fcckgreifen:<\/p>\n<ul>\n<li>Parameter. Die Parameter sind Werte aus einer java.util.Map, die vor dem Aufbau eines Reports initialisiert wurde.<\/li>\n<li>Felder. Sie ergeben sich aus Eintr\u00e4gen einer Datenquelle, wie der Datenbank oder einer Sammlung von Hibernate-Objekten.<\/li>\n<li>Eintr\u00e4ge aus einem Resource-Bundle.<\/li>\n<li>Variablen. W\u00e4hrend des Reports kann eine neu definierte Variable einen Wert zwischenspeichern. JasperReport bietet einige vorbelegte Variablen, zum Beispiel f\u00fcr die aktuelle Seite oder die aktuelle Spalte in der Verarbeitung.<\/li>\n<\/ul>\n<p>Die Ausdr\u00fccke k\u00f6nnen mit den bekannten Operatoren aus Java zu komplexeren Ausdr\u00fccken zusammengesetzt werden, denn JasperReport erlaubt die gesamte Syntax der Sprache Java. Variablenzugriffe stehen in einer besonderen Notation: $P{name}, $F{name}, $K{name} und $V{name}.<\/p>\n<p>Eine interessante Alternative ist Eclipse BIRT (<a href=\"http:\/\/www.eclipse.org\/birt\/phoenix\/\">http:\/\/www.eclipse.org\/birt\/phoenix\/<\/a>).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JasperReport ist eine weit verbreitete Open-Source-Software unter der LGPL-Lizenz zum Erstellen von Reports. Auf der Basis einer Vorlagendatei im XML-Format setzt JasperReports die Eingabe, die etwa aus einer relationalen Datenbank stammt, in eine Ausgabe um. Als Ausgabeformate unterst\u00fctzt der Generator drei Typen von Ausgaben: Text-\/Zeichenbasierte Dokumente HTML, RTF, CSV, TXT und XML, Dokumente in den [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[4],"tags":[],"class_list":["post-2412","post","type-post","status-publish","format-standard","hentry","category-open-source"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2412","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2412"}],"version-history":[{"count":2,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2412\/revisions"}],"predecessor-version":[{"id":2414,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2412\/revisions\/2414"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}