PDF-Berichte in Go (Golang) generieren: Bibliotheksübersicht und praktische Beispiele
Go (Golang) ist eine moderne, kompilierte Sprache, die sich ideal für die Entwicklung hochbelastbarer Serveranwendungen, Microservices und Kommandozeilen-Tools eignet. Eine häufige Aufgabe in der Webentwicklung ist die Erstellung von Berichten im PDF-Format: Rechnungen, Lieferscheine, Analyse-Dashboards oder Zertifikate. In diesem Artikel betrachten wir drei beliebte Bibliotheken für die Arbeit mit PDF in Go, ihre Funktionen und zeigen funktionierende Codebeispiele.
Warum Go für die PDF-Generierung?
Go bietet mehrere Vorteile: hohe Leistung, einfache Bereitstellung (eine einzelne Binärdatei), integrierte Unterstützung für Nebenläufigkeit und eine umfangreiche Standardbibliothek. Für die PDF-Generierung sind keine umfangreichen Laufzeitumgebungen (wie Java oder .NET) erforderlich, was Go-Lösungen kompakt und schnell macht. Im Gegensatz zu Python, das leistungsstarke Bibliotheken wie ReportLab besitzt, ist das Go-Ökosystem für PDF jedoch vielfältiger, und die Wahl des Werkzeugs hängt von der Komplexität des Berichts ab.
1. gofpdf — grundlegende PDF-Generierung
gofpdf ist ein Port der bekannten PHP-Bibliothek FPDF. Sie ermöglicht die Erstellung von PDF-Dokumenten „von Grund auf": Hinzufügen von Text, Bildern, Linien, Tabellen und Schriftarten. Die Bibliothek unterstützt keine HTML-Vorlagen, daher wird das gesamte Layout programmatisch festgelegt.
Installation:
go get github.com/jung-kurt/gofpdfBeispiel: Erstellen einer einfachen Rechnung
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, "Rechnung Nr. 123") pdf.Ln(12) pdf.SetFont("Arial", "", 12) pdf.Cell(40, 10, "Datum: 2024-01-15") pdf.Ln(10) pdf.Cell(40, 10, "Artikel: Laptop") pdf.Ln(10) pdf.Cell(40, 10, "Betrag: 50.000 Rubel") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}Vorteile: geringes Gewicht, vollständige Kontrolle über die Positionierung, Unterstützung von Unicode über TTF-Schriftarten.
Nachteile: keine integrierte HTML-Unterstützung, Komplexität bei der Erstellung komplexer Layouts.
2. maroto — vereinfachte Berichtserstellung
Maroto baut auf gofpdf auf, bietet aber eine hochwertige API zur Erstellung von Berichten. Sie arbeiten mit Konzepten wie „Raster", „Zeilen", „Spalten" und „Tabellen". Dies erinnert an die Arbeit mit CSS-Frameworks.
Installation:
go get github.com/johnfercher/maroto/v2Beispiel: Tabelle mit Daten
package main
import ( "github.com/johnfercher/maroto/v2/pkg/core" "github.com/johnfercher/maroto/v2/pkg/props" "github.com/johnfercher/maroto/v2")
func main() { m := maroto.NewMaroto(maroto.WithPageSize("A4")) m.RegisterHeader(func() { m.Row(20, func() { m.Col(12, func() { m.Text("Verkaufsbericht", props.Text{Bold: true, Size: 16}) }) }) })
headers := []string{"Artikel", "Menge", "Preis"} contents := [][]string{ {"Laptop", "2", "100000"}, {"Maus", "5", "2500"}, }
m.Table(headers, contents, props.Table{}) document, _ := m.Generate() _ = document.Save("report.pdf")}Vorteile: deklarativer Stil, automatische Ausrichtung, integrierte Unterstützung für Tabellen und Diagramme.
Nachteile: weniger Flexibilität für ungewöhnliche Layouts als gofpdf.
3. wkhtmltopdf — HTML in PDF
Wenn Sie eine HTML-Vorlage in PDF umwandeln müssen (z. B. mit CSS-Stilen), verwenden Sie wkhtmltopdf — einen Wrapper um das Dienstprogramm wkhtmltopdf (WebKit). Dies ist keine reine Go-Bibliothek, ermöglicht aber die Nutzung der gesamten Leistungsfähigkeit von HTML/CSS für das Berichtsdesign.
Auch in der Bibliothek
PHP-Aufgabenplaner: cron-ähnliche Aufgaben ohne crond
GraphQL Java: Vollständiger Leitfaden zur Bibliothek für die Erstellung von APIs in Java
Überwachung von .NET-Anwendungen mit Prometheus und OpenTelemetry
gRPC für Kotlin: Bibliotheken, Server und Client – Codebeispiele
JMH Java: Vollständiges Tutorial mit Beispielen und Tipps