JasperReports Anbindung - Tutorial
Last Update: 30.01.2025 |
Einleitung
Das Programm Jaspersoft Studio erlaubt die Erstellung von PDF-Berichten mit Daten aus einer oder mehreren Datenquellen.
Zur Erstellung der PDFs wird mittels Jaspersoft Studio ein JasperReport als Template erzeugt und in den Integration Server eingebunden.
Installation und Anbindung
Wichtiger Hinweis: Für die Verwendung von JasperReports sind spezielle Libraries für den Integration Server notwendig. Bitte erstellen Sie hierzu ein Ticket an support@lobster.de unter Angabe der Ihrer Version und einem Auszug der Bibliotheken. Hatten Sie bereits JasperReports im Einsatz, so senden Sie zudem ein Beispiel-Profil mit dem Report und einer Testdatei zu.
Jaspersoft Studio ist aktuell nur noch in den Versionen 6.21.3 und 7.0.0 verfügbar. Wir empfehlen aktuell die Version 6.21.3 zu verwenden.
https://community.jaspersoft.com/
https://www.jaspersoft.com/products/jaspersoft-community
https://www.jaspersoft.com/products/jaspersoft-commercial
Hierüber erstellen Sie den Report, den Sie in kompilierter Form, sprich als .jasper-Datei, in einem für den Integration Server erreichbaren Verzeichnis ablegen.
Mithilfe des User Guides können Sie sich mit dieser Anwendung vertraut machen:
https://www.novell.com/documentation/zenworks-2020/pdfdoc/Jaspersoft-Studio-User-Guide/Jaspersoft-Studio-User-Guide.pdf
Verwendung der Integration Unit PDFCreator
Bevor Sie die Integration Unit PDFCreator verwenden können, ist die Installation speziell zusammengestellter Bibliotheken nötig. Über folgende Anleitung können Sie diese installieren:
Der Integration Server muss gestoppt werden.
Entfernen Sie die Datei ebd_jasperreports-6.0.0.jar aus dem Verzeichnis ./lib, falls noch vorhanden.
Alle Dateien batik-*.jar aus dem Verzeichnis ./lib entfernen, außer batik-all-X.XX.jar.
Alle evtl. vorhandenen Jasper-Bibliotheken aus dem Verzeichnis ./extlib entfernen. Es dürfen dort nur noch JDBC-Treiber und Treiber für andere Zwecke liegen.
Die ausgelieferten Bibliotheken in das Verzeichnis ./extlib entpacken. Die Klassen dürfen in keinem Unterverzeichnis liegen.
PDFCreator, falls vorhanden, aus Verzeichnis ./ext löschen.
Den Integration Server wieder hochfahren.
Ausgeliefertes Beispiel-Profil importieren und als Test durchlaufen lassen.
Hilfreiche Links zum Jaspersoft Studio
Mithilfe der Online-Tutorials können Sie sich vorab schon einmal mit dieser Anwendung vertraut machen:
Test-Profil verwenden
Nach Installation der Bibliotheken und Neustart des Integration Servers, importieren Sie das Test-Profil und starten Sie einen Neudurchlauf.
Läuft das Profil fehlerfrei durch, erhalten Sie eine PDF-Datei auf Grundlage des JasperReports.
Vorgehensweise zur Erstellung eines PDFs
Profil erstellen
Erstellen Sie ein neues Profil oder verwenden Sie ein vorhandenes Profil.
Sollten Sie sich bei einem neu erstellten Profil über die Quellstruktur noch nicht gewiss sein, dann wählen Sie in den Basis-Daten die Option "Daten-Routing" aus. Das erlaubt es Ihnen, den Eingangsagenten und die Quellstruktur erst später festzulegen.
Die Zielstruktur sollte zu Beginn möglichst flach aufgebaut werden, damit Sie eine einfache CSV-Datei erstellen können. Generell empfehlen wir, alle Daten, die Sie im Report verwenden möchten, ob dynamisch oder statisch, vorab in der Zielstruktur anzulegen und mit Werten zu befüllen.
Bitte beachten Sie, dass die Zielstrukturfelder und die Felder im Report den gleichen Namen haben müssen. Den Pfad für ein Image, wie Logos oder andere Bilddateien, können Sie über den Wert eines Feldes an den Report übergeben, um diesen dynamisch zu den Referenzdaten zu übermitteln.
Mittels der Integration Unit "CSVWithHeaderUnit" und dem Ausgangsweg "Datei" - "Inhalt der IU", lassen Sie sich eine Datei im CSV-Format ausgeben. Diese Datei ist im weiteren Verlauf hilfreich, um die Felder im Jaspersoft Studio anzulegen.
Erstellen eines Datenadapters im Jaspersoft Studio
Die Anlage eines Datenadapters unterstützt Sie beim Aufbau des Reports. Über die Preview können Sie sich die Ausgabe und Formatierung des PDFs aus dem Design heraus anzeigen lassen.
Mithilfe der erzeugten CSV-Datei, können Sie im Jaspersoft Studio einen Datenadapter erzeugen. Darüber werden die Felder im Report automatisch erzeugt. Die Feldnamen werden aus dem Header der CSV-Datei erzeugt.
Zur Erstellung eines neuen Datenadapters über die erzeugte CSV-Datei gehen Sie bitte folgendermaßen vor:
Wechseln Sie in das Jaspersoft Studio.
Erstellen unter File - New - DataAdapter einen neuen Adapter.
Geben Sie dem Datenadapter einen sprechenden Namen.
Verwenden Sie den Inhalt der Daten aus CSV.
Fügen Sie den Pfad zur CSV-Datei hinzu.
Passen Sie unter dem Reiter "Separators" das Trennzeichen an.
Setzen den Haken bei "Skip the first line".
Passen Sie das Encoding an.
Report erstellen im Jaspersoft Studio
Im Jaspersoft Studio wird ein neuer Report über File - New - JasperReport erzeugt. Über den Wizard kann der vorab erzeugte Datenadapter hinzugefügt werden.
Der Report wird standardmäßig leer mit den vordefinierten Eigenschaften und allen Bändern erzeugt. Die Bänder dienen der Strukturierung und Anzeige von Elementen im PDF. Bitte beachten Sie, dass das Detail-Band das einzige Band ist, welches die Wiederholung von Feldwerten zulässt.
Das Jaspersoft Studio ist folgendermaßen aufgegliedert:
Project Explorer - Hier werden die erstellten und kompilierten Reports und Datenadapter aufgelistet.
Outline - Dieser Bereich dient dem Aufbau des Reports.
Reporteigenschaften
Felder
Variablen
Bänder
Palette - Die Palette beinhaltet Elemente, welche im Report hinzugefügt werden können.
Properties - Eigenschaften zur Anzeige in Bändern und Formatierung der Felder.
Felder erstellen
Felder mittels Datenadapter erzeugen
Beim Erstellen eines neuen Reports können Sie den Datenadapter bereits hinterlegen.
Ein Datenadapter lässt sich auch im Nachgang einem Report zufügen oder zusätzliche Felder einfügen. Per Rechtsklick auf den Reportnamen im Bereich Outline wählen Sie den Datenadapter innerhalb des "Dataset and Query"-Dialogs und lesen die Felder ein. Dynamische Felder werden im Outline als $F{Feldname} hinterlegt. So sparen Sie sich ein mühsames und möglicherweise fehleranfälliges manuelles Anlegen von Feldern.
Bitte beachten: Im Jaspersoft Studio werden Zahlen als integer hinterlegt. Hier müssen Sie die Datentypen manuell beim Einlesen der Felder über den Dateadapter anpassen.
Im Folgenden können Sie Ihren Report wie gewünscht aufbauen und sich über den Reiter Preview die Vorschau des PDFs anzeigen lassen.
Das Erzeugen eines Datenadapters mittels einer XML-Datei wird in Abschnitt "Verwendung des PostExecuters" beschrieben.
Felder über Elemente hinzufügen
Befüllen Sie einzelne Bänder des Reports entweder mit den dynamischen Reportfeldern aus dem Datenadapter oder fügen Sie neue dynamische oder statische Textfelder für Überschriften ein.
Wir empfehlen Ihnen, alle Feldwerte, sowohl dynamischer als auch statischer Art, über die Zielstrukturfelder hinzuzufügen.
Image dynamisch einbinden
Wenn Sie ein dynamisches Logo oder eine Bilddatei zu Ihrem PDF hinzufügen möchten, erstellen Sie innerhalb der Zielstruktur ein Feld, welches den Pfad zu diesem Logo als Wert beinhaltet. Hierfür können Sie den Pfad über die Feldeigenschaften als Fixwert hinterlegen oder die Funktion "copy" auf dem Feld verwenden.
Bitte stellen Sie sicher, dass der Pfad zum Logo bzw. zur Bilddatei vom Integration Server aus erreicht werden kann. Empfehlenswert ist die Hinterlegung innerhalb des Installationsverzeichnisses des Integration Servers im Unterordner ./conf.
Im Jaspersoft Studio fügen Sie ein Image-Element im Design des Reports hinzu. Hier können Sie ein vorab erstelltes dynamisches Feld über die Properties - Image - Expression hinterlegen. Dort wird der Wert des Feldes, der einen Pfad zur Bilddatei enthalten muss, aufgelöst. Sie können genauso mit fest hinterlegten Pfaden arbeiten.
Über foglenden Link finden Sie die Erläuterung zum Einbinden von Bildern über einen mklink: https://learn.microsoft.com/de-de/windows-server/administration/windows-commands/mklink
Barcodes hinterlegen
Zum Einbinden von Barcodes verwenden Sie ebenfalls dynamische Felder, die Sie mit Ihren Werten füllen.
Im Jaspersoft Studio fügen Sie den gewünschten Barcode als Element im Design des Reports hinzu. Die Referenz zu den Werten bilden das Hinterlegen des dynamischen Feldes über die Properties - Barcode - Expression.
Sollte Ihr Barcode spezielle Kontrollzeichen enthalten, müssen diese mit Hilfe von Variablen innerhalb des Jaspersoft Studios eingebaut werden, um spezielle Fixwerte zu erhalten. In diesem Fall muss unter Properties - Barcode - Expressions der Stringwert in Anführungszeichen und die Variable mit + V{Variable} angepasst werden.
Alternativ steht Ihnen zum Erstellen von Barcodes die Funktion "create barcode (a, b, c, d)" zur Verfügung. Diese Funktion erstellt ein Base64-kodiertes Barcode-Bild, welches Sie mittels der Funktion "write into file" unter Setzen des Parameters d = true dekodiert abspeichern und als Bilddatei verwenden können.
Report kompilieren
Im letzten Schritt speichern Sie den Report ab und kompilieren ihn über Rechtsklick im Project Explorer - JasperReports - Compile Report. Legen Sie die erzeugte *.jasper-Datei in einem Verzeichnis ab, auf das der Integration Server Zugriff hat.
Verwendung des Postexecuters
Anpassung des Profils
Für den Fall, dass Sie die Erstellung eines PDFs mittels XML-Struktur erzeugen wollen, kann hier nicht die Integration Unit "PDFCreator" verwendet werden. Stattdessen benötigen Sie den com.ebd.hub.datawizard.postexec.GeneratePdfPostExecuter, den Sie in Phase 5 oder Phase 6 eines Antwortweges für die Nachbearbeitung in das Feld kopieren können.
Für die eindeutige Auswahl von Werten in einer XML-Datei über XPath-Ausdrücke empfehlen wir die Datensätze eindeutig über IDs zu kennzeichnen. Dazu können Sie die Zielstruktur so erweitern, dass die Werte mittels der Funktion "iteration-level" eindeutige Nummern erhalten.
Das Profil erzeugt über die Verwendung der Integration Unit "XMLNoTemplateUnit" eine XML-Datei, welche Sie im weiteren Verlauf für die Erzeugung des Reports verwenden können.
Zur Erstellung des PDFs benötigen Sie einen zusätzlichen Antwortweg des Typs Datei mit folgenden Einstellungen:
Ausgabe von IU
Encoding UTF8
Nachbearbeitung durch: com.ebd.hub.datawizard.postexec.GeneratePdfPostExecuter
Die Konfigurationsdatei zum Postexecuter muss folgende Parameter enthalten:
report_template = <Dateiname des Reports>
report_format =1|2|3|4|5|6
1 => PDF
2 => CSV
3 => Rtf
4 => Odt
5 => Xls
6 => ZPL
report_folder = <Pfad zur Jasper-Datei>
Erstellung eines Datenadapters mittels XPath-Ausdrücken
Nach dem Erstellen der XML-Datei, kann diese verwendet werden, um die Felder im Report mittels eines Datenadapters zu erzeugen und den Report darüber zu erstellen.
Erzeugen Sie über File - New - Data Adapter mit Hilfe des Wizards einen neuen Datenadapter zu dem vorhandenen XML-Dokument.
Im Nachgang können die benötigten Felder aus der XML-Struktur mittels XPath-Ausdrücken im Report hinzugefügt werden.
Zur Prüfung, ob die XPath-Ausdrücke die benötigten Felder und Werte auslesen, können Sie das Plugin "Teste XPath" verwenden oder im Internet nach gängigen Tools suchen.
Erzeugen des Reports
Erzeugen Sie einen neuen Report über File - New - JasperReport und fügen Sie den hinterlegten Datenadapter hinzu.
Mittels XPath-Ausdrücken können die notwendigen Felder hinzugefügt werden. Im Folgenden können Sie Ihren Report wie gewünscht aufbauen und sich über den Reiter Preview die Vorschau des PDFs anzeigen lassen.
Subreports erstellen
Wenn Sie mit Subreports arbeiten möchten, so bauen Sie in Ihrem Mainreport das Basic Element „Subreport“ ein. Es erscheint ein Wizard, in dem Sie einen existierenden Report einbinden oder einen neuen erstellen können.
Sobald dieser Report erstellt wurde, kompilieren Sie diesen.
Innerhalb der Eigenschaften des Mainreports wird innerhalb der Expression zur Verknüpfung der Pfad des Reports hinterlegt. Wichtig ist, dass beide jasper-Dateien in einem Verzeichnis liegen, auf welches der Integration Server Zugriff hat.
Hinweis: Bei Verwendung einer XML über einen Datenadapter muss in den Subreport Parametern XML_DATA_DOCUMENT mit der Expression $P{XML_DATA_DOCUMENT} hinterlegt werden.
Ein Beispielprofil zur Übersicht mit Reports und Datenadapter stellen wir als Download zur Verfügung.
Schriftarten einbetten
Zum Einbinden von externen Schriftarten in JasperReports, müssen diese erst einmal im Jaspersoft Studio hinterlegt werden:
Hierzu fügen Sie bitte unter Window - Preferences - Jaspersoft Studio - Fonts die Schriftarten über eine URL oder einen Dateipfad hinzu.
Geben Sie Ihrer Font Family einen sprechenden Namen.
Hinterlegen Sie die Schriftarten über den Pfad für den Typ Normal, Bold, Italic und BoldItalic (wenn gewünscht).
Hinterlegen Sie einen sprechenden PDF-Font-Namen.
Unter PDF Encoding wird Identity-H erwartet.
Bitte setzen Sie die Checkbox Embed this font in PDF document.
Speichern Sie die Font Family ab, um diese im Jaspersoft Studio in Ihrem Report verwenden zu können.
Im nächsten Schritt exportieren Sie bitte die Fonts aus der Liste. Sie können beliebig viele Schriftarten in der Liste hinterlegen und als .jar-Datei exportieren.
Öffnen Sie die .jar-Datei per Rechtsklick über 7-zip und navigieren in den Ordner fonts. Darin befinden sich nun die Schriftarten als .tff-Dateien in einzelnen Ordnern.
Für jede Schriftart wird eine Datei fontsfamilyXXX.xml erstellt. Diese Datei kopieren Sie temporär aus dem Verzeichnis und editieren Sie folgendermaßen:
Entfernen Sie die umschließenden Klammern <![CDATA[ ]]> für den Pfad zu der Schriftart, dem pdfEncoding und dem pdfEmbedded.
Entfernen Sie die Zeile <pdf><![CDATA[Zenda]]></pdf>
Legen Sie die editierte Datei fontsfamilyXXX.xml erneut im Archiv der .jar-Datei unter dem Verzeichnis fonts ab.
Im Folgenden muss der Integration Server heruntergefahren werden.
Legen Sie dann die neu erstellte .jar-Datei im Verzeichnis ./extlib/jasper ab und starten Sie den Integration Server erneut.
Nach dem Neustart und der Anpassung des Reports (dieser muss zudem neu kompiliert und für den Integration Server erreichbar als jasper-Datei abgelegt werden), testen Sie unter Verwendung des entsprechenden Profils die Verwendung der neu angelegten Schriftart.
Fehlermeldungen
Fehlende Klassen
Fehlen zur Verwendung des Reports und der Generierung des PDFs bestimmte Bibliotheken, so kommt es zu einer ClassNotFound-Exception. Bitte schicken Sie einen Auszug der Bibliotheken zur Überprüfung an unseren Support.
Über folgende Links können Sie prüfen, um welche fehlenden Klassen es sich handelt:
Einbinden von Bildern
Beim Einbinden eines Bildes mit dynamischem Pfad, kann es zu einer Fehlermeldung kommen, sollte dieses Bild nicht gefunden werden:
Ein dynamisch hinterlegter Bildpfad wird in der Zielstruktur in einem Feld hinterlegt. Das Feld muss dann auch im Jaspersoft Studio mit dem gleichem Namen erzeugt werden.
Innerhalb der Eigenschaften eines Image-Elementes wird das erstellte Feld mit unter Properties - Image - Expression hinterlegt. Der Wert des Feldes enthält den Pfad zur Bilddatei. Sie können genauso mit fest hinterlegten Pfaden im Jaspersoft Studio arbeiten.
Bitte stellen Sie sicher, dass sowohl der Integration Server als auch das Jaspersoft Studio auf den Pfad zugreifen können.
Report kann nicht kompiliert werden
Beim Erstellen eines PDFs über ein Profil erhalten Sie die folgende Fehlermeldung:
Nested exception is:
net.sf.jasperreports.engine.JRException: unable to recompile jasper file after error on load
Alternativ:
net.sf.jasperreports.engine.JRException: Error loading expression class
Es handelt sich hierbei um eine Fehlermeldung, dass der Report nicht korrekt kompiliert wurde.
Bitte überprüfen Sie, ob die Felder im Report korrekt angepasst und formatiert sind. Kompilieren Sie den Report danach noch einmal.
Achten Sie bitte auch darauf, dass die korrekte, kompilierte Version des Reports verwendet wird.
Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser
In diesem Fall schicken Sie einen Auszug der Bibliotheken zur Überprüfung an unseren Support.
Bitte überprüfen Sie das Verzeichnis ./lib auf die Datei ebd_jasperreport.jar. Sollte diese Bibliothek vorhanden sein, können Sie diese aus dem Verzeichnis löschen und den Integration Server erneut starten .
Tritt diese Fehlermeldung unter Linux auf, prüfen Sie bitte, ob das Paket "libfontconfig1" installiert ist. Um das Paket zu installieren, kann folgender Befehl in der Konsole abgesetzt werden:
apt-get update && apt-get install -y --no-install-recommends libfontconfig1 |
Ist das Packet bereits installiert, erscheint folgende Meldung:
Reading state information... Done
libfontconfig1 is already the newest version (2.13.1-2ubuntu3).
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
Unter Linux-System kann zudem ein Fehler auftreten, sollte die Schriftart dejavu-fonts benötigt werden. Eine mögliche Lösung ist das Setzen der System-Property -Djava.awt.headless=true
com.ebd.hub.datawizard.DataRetrieveException: error while calling integration-unit
at com.ebd.hub.datawizard.app.RequestProcessor.process(RequestProcessor.java:2078)
....
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.InternalError: java.lang.reflect.InvocationTargetException
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:86)
....
at com.ebd.hub.datawizard.app.RequestProcessor.callIntegrationUnit(RequestProcessor.java:2939)
at com.ebd.hub.datawizard.app.RequestProcessor.process(RequestProcessor.java:2057)
... 39 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
....
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:84)
... 70 more
Caused by: java.lang.NullPointerException
at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
....
at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)
... 75 more
<<<<< END OF STACKTRACE -----