PDF-Generierung in Go (Golang): Vollständiger Überblick über Bibliotheken und Werkzeuge
Die Erstellung von PDF-Dokumenten ist eine häufige Aufgabe in der Webentwicklung, der Automatisierung von Berichten und der Erstellung des elektronischen Dokumentenflusses. Die Sprache Go (Golang) bietet mehrere ausgereifte Lösungen für diese Aufgabe. In diesem Artikel werden wir die wichtigsten Bibliotheken, ihre Funktionen, Anwendungsbeispiele im Detail besprechen und Ihnen helfen, das passende Werkzeug für Ihr Projekt auszuwählen.
Warum Go für die PDF-Generierung?
Go vereint die hohe Leistung einer kompilierten Sprache mit der Einfachheit der Entwicklung. Dank der integrierten Unterstützung für Nebenläufigkeit (Goroutinen) und der effizienten Speicherverwaltung erfolgt die PDF-Generierung selbst bei großen Datenmengen schnell. Darüber hinaus machen die statische Typisierung und die umfangreiche Standardbibliothek den Code zuverlässig und vorhersagbar.
Wichtigste Bibliotheken für die PDF-Generierung in Go
1. gofpdf – Einfache und leichtgewichtige Bibliothek
gofpdf ist ein Port der bekannten PHP-Bibliothek FPDF. Sie bietet eine grundlegende API zum Erstellen von PDFs von Grund auf: Hinzufügen von Seiten, Schriftarten, Bildern, Tabellen und einfachen grafischen Primitiven.
Installation:
go get github.com/jung-kurt/gofpdfBeispiel: Erstellen eines einfachen PDFs mit Text und Bild
package main
import ( "github.com/jung-kurt/gofpdf")
func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.AddPage() pdf.SetFont("Arial", "B", 16) pdf.Cell(40, 10, "Hallo, PDF-Welt!") pdf.ImageOptions("logo.png", 10, 20, 30, 0, false, gofpdf.ImageOptions{ImageType: "PNG"}, 0, "") err := pdf.OutputFileAndClose("output.pdf") if err != nil { panic(err) }}Vorteile: Minimalistische API, geringe Größe, keine externen Abhängigkeiten, Unterstützung für Unicode (UTF-8).
Nachteile: Eingeschränkte Unterstützung für komplexe Layouts, kein integrierter HTML-Rendering.
2. maroto – Hochwertige Bibliothek für Berichte
Maroto baut auf gofpdf auf und fügt das Konzept eines "Rasters" (Grid) hinzu, um komplexe Layouts zu erstellen: Tabellen, Spalten, Beschriftungen und Logos. Ideal für Rechnungen, Lieferscheine und Berichte.
Installation:
go get github.com/johnfercher/maroto/v2Beispiel: Erstellen einer Rechnung mit Tabelle
package main
import ( "github.com/johnfercher/maroto/v2" "github.com/johnfercher/maroto/v2/pkg/components/col" "github.com/johnfercher/maroto/v2/pkg/components/row" "github.com/johnfercher/maroto/v2/pkg/components/text" "github.com/johnfercher/maroto/v2/pkg/core")
func main() { m := maroto.New() m.AddRow(20, text.NewCol(12, "Rechnung Nr. 123")) m.AddRow(10, text.NewCol(12, "Datum: 2024-01-15")) // Tabelle headers := []string{"Artikel", "Menge", "Preis", "Summe"} rows := [][]string{ {"Laptop", "2", "50000", "100000"}, {"Maus", "5", "1500", "7500"}, } m.AddRow(10, col.New(12).Add(text.New("Artikeltabelle"))) // Für die Tabelle verwenden Sie die table-Komponente // m.AddTable(headers, rows) doc, _ := m.Build() doc.Save("invoice.pdf")}Vorteile: Deklarativer Stil, vorgefertigte Komponenten (Tabellen, QR-Codes, Grafiken), automatische Ausrichtung.
Nachteile: Mehr Abhängigkeiten als gofpdf, etwas geringere Leistung bei komplexen Layouts.
3. unipdf – Kommerzielle Bibliothek mit erweiterten Funktionen
UniPDF (von der Firma UniDoc) ist eine professionelle Lösung für die Arbeit mit PDFs: Erstellung, Bearbeitung, Datenextraktion, Signatur, Verschlüsselung. Unterstützt HTML-to-PDF-Konvertierung (über WebKit).
Installation:
go get github.com/unidoc/unipdf/v3Pro
Auch in der Bibliothek
PDF-Generierung in Java: Überblick über die besten Bibliotheken (iText, Apache PDFBox, OpenPDF)
JavaMail (Jakarta Mail) für Java: Komplettguide mit Beispielen
WorkManager für Kotlin: Komplettguide mit Beispielen
Konfiguration von JavaScript-Anwendungen: Die Bibliothek config
DashMap für Rust: Vollständige Anleitung mit Beispielen