Generierung von PDF-Berichten in Go (Golang): Überblick über Bibliotheken und Codebeispiele
Go (Golang) ist eine moderne, kompilierte Sprache, die zunehmend für die Entwicklung hochbelastbarer Serveranwendungen und Microservices gewählt wird. Eine typische Aufgabe in solchen Systemen ist die Erstellung von PDF-Berichten (Rechnungen, Akten, statistische Dashboards). In diesem Artikel betrachten wir drei beliebte Bibliotheken zur PDF-Generierung in Go, ihre Stärken und liefern fertige Codebeispiele.
1. gofpdf — Klassiker für die PDF-Erstellung von Grund auf
Die Bibliothek gofpdf (aktuell weiterentwickelt als jung-kurt/gofpdf oder Fork go-pdf/fpdf) ist ein Port der bekannten PHP-Bibliothek FPDF. Sie ermöglicht die Erstellung von PDF-Dokumenten ohne externe Abhängigkeiten, nur mit den Standardmitteln von Go.
Installation
go get github.com/jung-kurt/gofpdfBeispiel: Einfache Rechnung
package main
import ( "github.com/jung-kurt/gofpdf")
func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.SetFont("Arial", "B", 16) pdf.AddPage() pdf.CellFormat(190, 10, "Rechnung Nr. 123 vom 01.01.2025", "0", 1, "C", false, 0, "") pdf.SetFont("Arial", "", 12) pdf.Ln(10) pdf.CellFormat(190, 10, "Artikel: Laptop", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "Preis: 120.000 Rubel", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "Gesamt: 120.000 Rubel", "1", 1, "L", false, 0, "") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}Vorteile: minimale Abhängigkeiten, vollständige Kontrolle über jedes Element, Unterstützung für Unicode (über AddUTF8Font).
Nachteile: Low-Level-API — für komplexe Berichte muss viel manuell codiert werden.
2. maroto — High-Level-Generierung mit Tabellen und Stilen
Maroto baut auf gofpdf auf, bietet aber eine benutzerfreundlichere API: Tabellen, Raster, automatische Ausrichtung und integrierte Schriftartunterstützung. Ideal für Standardberichte: Rechnungen, Listen, Preislisten.
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.New() m.SetPageMargins(10, 10, 10) // Überschrift m.Row(10, func() { m.Col(12, func() { m.Text("Verkaufsbericht", props.Text{ Style: props.Bold, Size: 16, Align: props.Center, }) }) }) // Tabelle header := []string{"Artikel", "Menge", "Preis"} data := [][]string{ {"Monitor", "2", "30.000"}, {"Tastatur", "5", "7.500"}, } m.TableList(header, data, props.TableList{ HeaderProp: props.TableListContent{ Style: props.Bold, Size: 10, }, ContentProp: props.TableListContent{ Size: 9, }, }) document, _ := m.Generate() document.Save("report.pdf")}Vorteile: schnelle Entwicklung, integrierte Stile, automatischer Seitenumbruch.
Nachteile: weniger Flexibilität für ungewöhnliche Layouts.
3. wkhtmltopdf — Konvertierung von HTML in PDF über einen Go-Wrapper
Wenn Sie bereits HTML-Vorlagen haben (z.B. mit Bootstrap), ist die Verwendung von wkhtmltopdf am einfachsten. Es ist keine Go-Bibliothek, sondern ein Kommandozeilenwerkzeug, aber für Go gibt es den Wrapper go-wkhtmltopdf. Dieser nimmt einen HTML-String entgegen und gibt ein PDF zurück.
Installation
# Installieren Sie zuerst wkhtmltopdf: https://wkhtmltopdf.org/downloads.htmlgo get github.com/SebastiaanKlippert/go-wkhtmltopdf Auch in der Bibliothek
OAuth-Client für Java: Überblick über Bibliotheken und Codebeispiele
Spring WebFlux Java: Vollständige Anleitung mit Beispielen
Resilience4j Java: vollständige Anleitung mit Codebeispielen