Generierung von PDF-Berichten in Kotlin: iText, Apache PDFBox, OpenPDF

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Generierung von PDF-Berichten in Kotlin: Überblick über Bibliotheken und praktische Beispiele



Kotlin, als moderne Sprache für die JVM, eignet sich hervorragend für die Entwicklung von Serveranwendungen, einschließlich der Generierung komplexer PDF-Berichte. Im Gegensatz zu Python, wo ReportLab oder FPDF beliebt sind, werden im Kotlin/Java-Ökosystem bewährte Bibliotheken verwendet: iText, Apache PDFBox und OpenPDF. In diesem Artikel werden wir jede von ihnen analysieren, Codebeispiele in Kotlin zeigen und Empfehlungen zur Auswahl geben.



1. iText (Versionen 7 und 8)

iText ist der De-facto-Standard für die PDF-Generierung auf der JVM. Die Bibliothek bietet eine leistungsstarke API zum Erstellen von Dokumenten von Grund auf, zum Arbeiten mit Formularen, Wasserzeichen und digitalen Signaturen. Ab Version 7 ist iText jedoch unter der AGPL-Lizenz (oder kommerziell) lizenziert, was bei der kommerziellen Nutzung zu beachten ist.



Beispiel für die Erstellung eines einfachen PDFs mit einer Tabelle in Kotlin:

import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraphimport com.itextpdf.layout.element.Tableimport com.itextpdf.layout.property.UnitValue

fun generateReportItext(outputPath: String) { val writer = PdfWriter(outputPath) val pdf = PdfDocument(writer) val document = Document(pdf)

// Überschrift document.add(Paragraph("Verkaufsbericht").setFontSize(20))

// Tabelle val table = Table(UnitValue.createPercentArray(3)).useAllAvailableWidth() table.addCell("Produkt") table.addCell("Menge") table.addCell("Preis") table.addCell("Laptop") table.addCell("10") table.addCell("75000") table.addCell("Monitor") table.addCell("5") table.addCell("25000")

document.add(table) document.close() println("PDF erstellt: $outputPath")}


2. Apache PDFBox

PDFBox ist eine kostenlose Bibliothek (Apache 2.0-Lizenz), die nicht nur das Erstellen von PDFs, sondern auch das Extrahieren von Text, das Ausfüllen von Formularen und das Rendern von Seiten in Bilder ermöglicht. Die API ist etwas niedriger als bei iText, bietet aber die volle Kontrolle über den Inhalt.



Beispiel mit Bild und Textformatierung:

import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType0Fontimport org.apache.pdfbox.pdmodel.graphics.image.PDImageXObjectimport java.io.File

fun generateReportPdfBox(outputPath: String) { val document = PDDocument() val page = PDPage() document.addPage(page)

val contentStream = PDPageContentStream(document, page) // Schriftart laden (TrueType) val font = PDType0Font.load(document, File("fonts/DejaVuSans.ttf")) contentStream.setFont(font, 14f)

// Text contentStream.beginText() contentStream.newLineAtOffset(50f, 750f) contentStream.showText("Bericht für Januar 2025") contentStream.endText()

// Bild (Logo) val image = PDImageXObject.createFromFile("logo.png", document) contentStream.drawImage(image, 50f, 650f, 100f, 50f)

contentStream.close() document.save(outputPath) document.close() println("PDFBox-Bericht fertig: $outputPath")}


3. OpenPDF

OpenPDF ist ein Fork der alten iText-Version (LGPL), der vollständig frei bleibt. Ideal für einfache Berichte: Text, Tabellen, grundlegende grafische Primitive. Die API erinnert an iText 2.x, was im modernen Kotlin-Code jedoch kein Problem darstellt.



Beispiel für die Erstellung eines PDFs mit Absätzen und einer Liste:

import com.lowagie.text.Documentimport com.lowagie.text.Paragraphimport com.lowagie.text.pdf.PdfWriterimport java.io.FileOutputStream

fun generateReportOpenPdf(outputPath: String) {

Empfehlungen