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() Auch in der Bibliothek
Event Bus und das Observer-Pattern in Java: Implementierung einer lose gekoppelten Architektur
Event Bus und Observer-Pattern in PHP: Implementierung und Beispiele
Symfony/Console für PHP: Komplette Anleitung mit Beispielen