Generierung von PDF-Berichten in Go (Golang): Bibliotheken und Beispiele

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

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


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

Empfehlungen