Generierung von PDF-Berichten in Go: 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

Generierung von PDF-Berichten in Go (Golang): vollständige Anleitung



Die Erstellung von PDF-Dokumenten ist eine häufige Aufgabe in der Webentwicklung, insbesondere beim Aufbau von Unternehmenssystemen, Finanzanwendungen oder Bildungsplattformen. Die Sprache Go (Golang) bietet mehrere leistungsstarke Bibliotheken zur PDF-Generierung, mit denen sowohl einfache Textberichte als auch komplexe mehrseitige Dokumente mit Tabellen, Diagrammen und Bildern erstellt werden können. In diesem Artikel betrachten wir drei gängige Ansätze: gofpdf, maroto und die Integration mit wkhtmltopdf.



1. Bibliothek gofpdf — Low-Level-Steuerung von PDF



gofpdf ist eine der ältesten und flexibelsten Bibliotheken zur PDF-Generierung in Go. Sie bietet vollständige Kontrolle über jedes Element der Seite, erfordert jedoch mehr Code für komplexe Layouts.



Installation

go get github.com/jung-kurt/gofpdf


Beispiel: einfacher Bericht mit Überschrift und Tabelle

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, "Verkaufsbericht") pdf.Ln(12)

// Tabellenüberschriften pdf.SetFont("Arial", "B", 12) headers := []string{"Produkt", "Menge", "Preis"} for _, h := range headers { pdf.CellFormat(40, 10, h, "1", 0, "C", false, 0, "") } pdf.Ln(-1)

// Daten pdf.SetFont("Arial", "", 12) data := [][]string{{"Laptop", "5", "45000"}, {"Maus", "12", "1500"}} for _, row := range data { for _, cell := range row { pdf.CellFormat(40, 10, cell, "1", 0, "C", false, 0, "") } pdf.Ln(-1) }

err := pdf.OutputFileAndClose("report.pdf") if err != nil { panic(err) }}


Vorteile: minimale Abhängigkeiten, vollständige Kontrolle, Unicode-Unterstützung (TrueType-Schriftarten).
Nachteile: keine vorgefertigten Komponenten (Tabellen, Diagramme), manuelle Positionsberechnung erforderlich.



2. Bibliothek maroto — High-Level-Generierung mit Raster



maroto baut auf gofpdf auf und bietet einen komponentenbasierten Ansatz mit Raster, der die Erstellung komplexer Layouts vereinfacht. Ideal für Standardberichte: Rechnungen, Lieferscheine, Preislisten.



Installation

go get github.com/johnfercher/maroto/v2


Beispiel: Bericht mit Logo und Tabelle

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.WithMaxGridSize(12)) m.RegisterHeader(func() { m.Row(20, func() { m.Col(3, func() { m.FileImage("logo.png", props.Rect{ Percent: 80, Center: true, }) }) m.Col(9, func() { m.Text("TechnoService GmbH", props.Text{ Style: props.Bold, Size: 16, }) }) }) })

m.Row(10, func() { m.Col(12, func() { m.Table([]string{"Bezeichnung", "Anzahl", "Betrag"}, [][]string{ {"Monitor 24\\"", "2", "40000"}, {"Tastatur", "5", "7500"}, }, props.Table{ Content: props.TableContent{ GridSizes: []uint{6, 3, 3}, }, }) }) })

document, _ := m.Generate() _ = document.Save("invoice.pdf")}


Vorteile: schnelle Entwicklung, automatische Ausrichtung, integrierte Unterstützung für Tabellen, QR-Codes und Barcodes.
Nachteile: mehr

Empfehlungen