PDF-Berichte in Go generieren: Bibliotheksübersicht und Codebeispiele

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

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/gofpdf


Beispiel: 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/v2


Beispiel: 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.

Empfehlungen