Generierung von PDF-Berichten in Java: Überblick über Bibliotheken und Werkzeuge
Die Erstellung von PDF-Dokumenten ist eine der häufigsten Aufgaben in der unternehmensweiten Java-Entwicklung. Berichte, Rechnungen, Lieferscheine, Analyse-Dashboards – all dies erfordert flexible und leistungsstarke Werkzeuge. In diesem Artikel betrachten wir vier wichtige Bibliotheken zur PDF-Generierung in Java: Apache PDFBox, iText, JasperReports und OpenPDF. Wir untersuchen ihre Stärken, Codebeispiele und Anwendungsszenarien.
1. Apache PDFBox – Low-Level-Erstellung und Bearbeitung
Apache PDFBox ist eine Open-Source-Bibliothek (Apache-2.0-Lizenz), die es ermöglicht, PDF-Dokumente von Grund auf zu erstellen sowie zu bearbeiten, Text zu extrahieren und Formulare auszufüllen. Der Hauptvorteil ist die vollständige Kontrolle über den Inhalt: Sie arbeiten direkt mit den Dokumentobjekten.
Beispiel für die Erstellung eines einfachen PDFs:
import org.apache.pdfbox.pdmodel.*;import org.apache.pdfbox.pdmodel.font.PDType1Font;import java.io.IOException;
public class PdfBoxExample { public static void main(String[] args) throws IOException { try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(); document.addPage(page);
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) { contentStream.setFont(PDType1Font.HELVETICA_BOLD, 14); contentStream.beginText(); contentStream.newLineAtOffset(100, 700); contentStream.showText("Hallo, Welt PDFBox!"); contentStream.endText(); }
document.save("output.pdf"); System.out.println("PDF erstellt!"); } }}Wann verwenden: Wenn eine feine Kontrolle über jedes Element erforderlich ist (z. B. zur Generierung komplexer Grafiken oder zum Ausfüllen von Formularen). Nicht geeignet für große Textmengen ohne vorheriges Layout.
2. iText – Kommerzielle Stärke für komplexe Berichte
iText ist der De-facto-Standard in der Branche. Es existiert in zwei Versionen: iText 7 Community (AGPL) und iText 7 Commercial (kommerzielle Lizenz). Die Bibliothek unterstützt HTML-to-PDF, die Erstellung interaktiver Formulare, digitale Signaturen, Verschlüsselung und vieles mehr.
Beispiel für die Generierung eines PDFs mit einer Tabelle:
import com.itextpdf.kernel.pdf.*;import com.itextpdf.layout.*;import com.itextpdf.layout.element.*;
public class ITextExample { public static void main(String[] args) throws Exception { PdfWriter writer = new PdfWriter("report.pdf"); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc);
document.add(new Paragraph("Monatlicher Bericht")); Table table = new Table(2); table.addCell("Kennzahl"); table.addCell("Wert"); table.addCell("Einnahmen"); table.addCell("1.250.000 Rubel"); table.addCell("Ausgaben"); table.addCell("890.000 Rubel"); document.add(table);
document.close(); System.out.println("Bericht fertig!"); }}Wann verwenden: Für kommerzielle Projekte, die hohe Leistung, Unterstützung für komplexe Layouts und rechtlich relevante Dokumente (Signaturen, Verschlüsselung) benötigen. Achtung: Die AGPL-Version erfordert die Offenlegung des Codes bei Verbreitung.
3. JasperReports – Generierung auf Basis von JRXML-Vorlagen
JasperReports ist nicht nur eine Bibliothek, sondern ein ganzes Ökosystem zur Erstellung von Berichten. Sie beschreiben die Vorlage im XML-Format (oder über den visuellen Editor Jaspersoft Studio), und die Bibliothek füllt sie mit Daten aus der Datenbank, Collections oder JSON. Das Ergebnis kann in PDF, Excel, HTML, CSV und andere Formate exportiert werden.
Beispiel für das programmatische Befüllen einer Vorlage:
import net.sf.jasperre Auch in der Bibliothek
JSON-Verarbeitung in Java: Bibliotheken und Werkzeuge für die Arbeit mit JSON
Arbeiten mit Excel in TypeScript: Bibliotheken, Beispiele und Werkzeuge
Arbeit mit JWT-Token in TypeScript: Bibliothek jsonwebtoken und vollständige Anleitung
JWT-Token in C++: Implementierung und Verifizierung mit jwt-cpp