PDF-Generierung in Go: Überblick über Bibliotheken 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-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/gofpdf


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


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


Pro

Empfehlungen