Das Projekt TrafficAnalysis wurde um eine Report-Funktion erweitert, die das Ergebnis der Berechnung automatisch in eine Html- oder PDF-Datei wandelt. Das Zielformat und die Gestaltung des Ergebnisses sollten vom Projekt unabhängig festgelegt werden können. Zum Einsatz kam JasperReports und iReport Designer (ein freies und leistungsfähiges Werkzeug zur Definition der Reports). Die JasperReports-Bibliotheken beinhalten einen umfangreichen XML-Dialekt zur Beschreibungen von Berichten (mit einfachen Berechnungen und Bedingungen). Es stehen fertige Klassen zur Verfügung mit denen die Vorlagen mit Daten befüllt werden können (SQL, CSV usw.). Es werden viele populäre Formate für die Ausgabe unterstützt (z.B. PDF, Text und HTML).
Installation
Die Suche nach den benötigten Bibliotheken gestaltete sich ungewöhlich schwierig, da eine Menge Projekte eingebunden werden und diese in verschiedenen Abhängigkeiten zu finden sind. Für die Integration in die eigenen Projekte hat sich der Weg über den iReport Designer bewährt, dessen Einrichtung – dank des Installers – denkbar einfach ist. Die folgenden Jar-Archive liegen alle im lib Verzeichnis unterhalb des iReport-Programmverzeichnisses.
jasperreports-1.2.8.jar
commons-digester-1.7.jar
commons-collections-2.1.jar
commons-beanutils-1.5.jar
commons-logging-1.0.2.jar
commons-javaflow-20060411.jar
itext-1.3.1.jar
poi-2.0-final-20040126.jar
jdt-compiler-3.1.1.jar
jfreechart-1.0.0.jar
jcommon-1.0.0.jar
Je nach Anforderung müssen noch weitere Archve eingebunden werden. So liegt dem iReport auch eine Bibliothek bei, welche die Verarbeitung von Microsoft Excel Dateien ermöglicht.
Grundlagen
Ein Report ist die tabellarische und grafische Darstellung einer Datenmenge. Jedem Report liegt eine Defiition zu Grunde. Diese wird bei der Vorbereitung mit den ermittelten Daten gefüllt und in das eigentliche Ergebnis (z.B. eine PDF-Datei) überführt.
In unserem Beispiel (Code Ausschnitt) übersetzen wir die (mit iReport) erstellte Definition, legen eine HashMap mit Parametern an und lassen eine DataSource auf die zuvor erzeugte CSV-Datei zeigen. In der letzten Zeile wird alles zusammen gebracht und in ein PDF-File geschrieben.
[code lang=“java“]JasperReport jasperReport;
JasperPrint jasperPrint;
String d = „c:\\temp\\report.jrxml“;
jasperReport = JasperCompileManager.compileReport(d);
// Parameter
HashMap
map.put(„TA_REPORT_TITLE“, title);
map.put(„TA_MAX_ROWS“, new Integer(maxRows));
// Daten
JRCsvDataSource dataSource = new JRCsvDataSource(
new FileReader(„c:\\temp\\report.csv“));
dataSource.setColumnNames(
new String[]{„datum“,“ip“,“rich“,“proto“,“port“,“ges“,“emp“});
dataSource.setFieldDelimiter(‚;‘);
dataSource.setDateFormat(new SimpleDateFormat(„yyyy-MM-dd“));
dataSource.setUseFirstRowAsHeader(true);
// Report
jasperPrint = JasperFillManager.fillReport(jasperReport, map, dataSource);
String p = „c:\\temp\\report.pdf“;
JasperExportManager.exportReportToPdfFile(jasperPrint, p);[/code]