Generierung von PDF-Berichten in Kotlin: Bibliotheken und Beispiele

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, bietet Entwicklern leistungsstarke Werkzeuge zur Erstellung von PDF-Dokumenten. Unabhängig davon, ob Sie Finanzberichte, Rechnungen, Analyse-Dashboards erstellen oder einfach nur Daten exportieren, gibt es in Kotlin mehrere ausgereifte Bibliotheken, die diese Aufgabe lösen. In diesem Artikel betrachten wir die wichtigsten Bibliotheken zur PDF-Generierung in Kotlin, vergleichen ihre Funktionen und geben praktische Codebeispiele.



1. iText 7 – Leistungsstark und flexibel



iText ist eine der bekanntesten Bibliotheken für die Arbeit mit PDF in der Java- und Kotlin-Welt. Sie bietet vollständige Kontrolle über den Dokumentinhalt: Text, Tabellen, Bilder, Anmerkungen, Lesezeichen und vieles mehr. iText 7 ist eine überarbeitete Version mit verbesserter Architektur.



Installation (Gradle)

implementation("com.itextpdf:itext7-core:8.0.2")


Beispiel: Erstellung eines einfachen PDF-Berichts

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 java.io.FileOutputStream

fun generateReport(fileName: String, data: List<Pair<String, Int>>) { val writer = PdfWriter(FileOutputStream(fileName)) val pdf = PdfDocument(writer) val document = Document(pdf)

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

// Tabelle val table = Table(2) table.addCell("Produkt") table.addCell("Menge") data.forEach { (product, quantity) -> table.addCell(product) table.addCell(quantity.toString()) } document.add(table)

document.close() println("PDF erstellt: $fileName")}

// Verwendungfun main() { val salesData = listOf( "Laptops" to 150, "Monitore" to 230, "Tastaturen" to 340 ) generateReport("report_itext.pdf", salesData)}


iText bietet eine umfangreiche API zur Formatierung: Sie können Schriftarten, Farben, Abstände, Ausrichtung festlegen, Bilder hinzufügen und sogar Schriftarten einbetten (z. B. kyrillische). Allerdings hat iText Lizenzbeschränkungen: Die kommerzielle Nutzung erfordert den Kauf einer Lizenz (AGPL für Open-Source-Projekte).



2. Apache PDFBox – Kostenlose Alternative



Apache PDFBox ist eine Open-Source-Bibliothek (Apache 2.0-Lizenz), die keine Einschränkungen für die kommerzielle Nutzung hat. PDFBox ermöglicht das Erstellen von PDFs von Grund auf, das Ausfüllen von Formularen, das Extrahieren von Text und sogar die Arbeit mit digitalen Signaturen.



Installation (Gradle)

implementation("org.apache.pdfbox:pdfbox:3.0.1")


Beispiel: Erstellung eines PDF mit Tabelle

import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType1Fontimport java.awt.Color

fun createPdfBoxReport(fileName: String, data: List<Pair<String, Int>>) { val document = PDDocument() val page = PDPage() document.addPage(page)

val contentStream = PDPageContentStream(document, page) contentStream.beginText() contentStream.setFont(PDType1Font.HELVETICA_BOLD, 18f) contentStream.newLineAtOffset(50f, 750f) contentStream.showText("Verkaufsbericht (PDFBox)") contentStream.endText()

// Tabelle manuell zeichnen var y = 700f contentStream.setFont(PDType1Font.HELVETICA, 12f) contentStream.setNonStrokingColor(Color.BLACK) data.forEach { (product, quantity) -> contentStream.beginText() contentStream.newLineAtOffset(50f, y) contentStream.showText("$product — $quantity Stk.") contentStream.endText()

Empfehlungen