Wer die neue Umsatzstatistik vor großem Publikum präsentiert, wird dafür kaum eine Ascii-Datei verwenden. Sie umfasst zwar alle Daten, ist aber total unübersichtlich. Ein buntes Diagramm wiederum ist sehr anschaulich, gerade fürs Erkennen von Tendenzen, mehr Details liefert aber ein Report, auf Deutsch: Bericht. Die folgende Definition mag nicht alle Sonderfälle abdecken, aber sie trifft den Kern: Ein Report ist die strukturierte Aufbereitung von Daten für Präsentation oder Druck.
Typischerweise unterstützt eine Reporting-Software nicht nur die reine Ausgabe, sondern auch einfache Operationen auf den Daten. Geht es zum Beispiel um nach Regionen und Produkten gegliederte Umsätze, ist es sinnvoll, dass das Reporting-Programm die Teilsummen innerhalb der Regionen über alle Produkte eigenständig bildet.
Reports eignen sich aber nicht nur für klassische Berichte wie die erwähnte Umsatzstatistik, sie können beispielsweise auch einen Onlinekauf dokumentieren oder technische Messdaten übersichtlich aufbereiten.
Übersichtliche Darstellung
So vielfältig wie die Einsatzgebiete sind die Anforderungen an die Layoutgestaltung. Die Übersichtlichkeit hängt von der Menge der Daten ab, das Aussehen auch von der Zielgruppe. JFreereport[1] gibt Java-Programmierern eine Bibliothek an die Hand, die eine einfache Architektur mit mächtigen Möglichkeiten für das Layout verbindet. Dieser Coffee-Shop gibt eine Einführung. Wer alle Feinheiten ausreizen will, kommt um eine intensive Beschäftigung mit den APIs, der Dokumentation oder sogar dem Quellcode nicht herum.
In der Version 0.8.4 ist das JFreereport-Paket 5,3 MByte groß und umfasst den Quellcode, die fertigen Jar-Dateien und alle nötigen externen Bibliotheken. Wie üblich entpackt man das Archiv etwa im Verzeichnis »/usr/local«:
tar -xzf jfreereport-0.8.4_9.tar.gz
-C /usr/local
Es genügt, wenn sich die Jar-Bibliotheken zur Compile- und Laufzeit im »CLASSPATH« befinden. JFreereport ist in insgesamt 33 Jar-Dateien aufgeteilt, dazu kommen sechs externe Bibliotheken im »lib«-Verzeichnis, beispielsweise der GNU-Sax-Parser. Wer es sich einfach machen will, verwendet »jfreereport-0.8.4_9-all.jar«, die alle Jar-Dateien des Pakets enthält und deshalb 1,2 MByte groß ist. Zum Platzsparen sollte sie beim fertigen Programm durch das notwendige Minimum an Modulen ersetzt werden: Wer ohne grafische Oberfläche einen Report erstellt, kann auch die GUI-Klassen weglassen.
Eine Dokumentation bringt das Paket nicht mit. Auf der Homepage des Projekts findet sich allerdings eine 38-seitige Einführung im PDF-Format. Sie beschreibt zwar die 0.8.3-Version, genügt aber, um loszulegen. Ein besseres Handbuch wird künftig die Firma Object-Refinery verkaufen - die Vorabversion ist zurzeit noch frei verfügbar[2], weist aber einige Lücken auf. Die API-Dokumentation findet sich ebenfalls auf der Website, alternativ erzeugt sie das Make-Tool »ant«:
ant -f ant/build.xml javadoc
Zusätzlich zum Quellcode enthält das Paket viele Beispiele, die fast alle Möglichkeiten der Bibliothek demonstrieren. Aus diesen Vorlagen lassen sich leicht eigene Programme entwickeln. Um das JFreereport-API zu verstehen und die Bibliothek sinnvoll zu nutzen, ist ein Einblick in die Layoutkonzepte von JFreereport notwendig. Das API erlaubt es, das Layout direkt in Java-Code zu programmieren. Diese Lösung ist aber unflexibel, da sie die Gestaltung zur Compilezeit festlegt. Deshalb geht dieser Coffee-Shop nicht weiter darauf ein, sondern behandelt nur die XML-basierte Definition, mit der sich das Layout zur Laufzeit verändern lässt.
Layoutkonzepte
Ein Layoutelement heißt in der JFreereport-Sprache Band (Englisch für Streifen). Die äußere Klammer um den Report bilden der Report Header und der Report Footer. Der Report Header erscheint am Anfang des Dokuments und enthält typischerweise die Hauptüberschrift. Der Footer steht am Ende des gesamten Reports und dient für Anmerkungen, Quellenangaben und Ähnliches (Abbildung 1).
Abbildung 1: JFreereport baut die Seiten aus einzelnen Streifen (Bands) auf. Die eigentlichen Daten erscheinen im so genannten Item Band.
Jede Seite hat einen Page Header und einen Page Footer. Die Style-Option »display-on-first-page« legt fest, ob der Page Header auf der ersten Seite erscheint. Inhalt der Page Header und Footer könnten laufende Überschriften, Seitenzahlen oder Copyright-Vermerke sein.