PDF-Berichte in GO generieren
OK. Jetzt wird PDFs in GO! generiert.
Das programmgesteuerte Erstellen von PDF-Dokumenten kann eine wichtige Funktion in Ihrer Anwendung sein. Hier untersuchen wir kurz mit Beispielen die in der Programmiersprache Go (Golang) verfügbaren Bibliotheken zum Erstellen von PDF-Dateien.
Geeignete Lösungen können sich je nach Anwendungsfall unterscheiden, sei es die Erstellung einfacher Dokumente oder die komplexe, funktionsreiche PDF-Generierung.
Ja, das Bild ist KI-generiert; das Modell ist Flux1.Dev.
Bibliotheken und Tools
gofpdf
GoPdf ist eine unkomplizierte Bibliothek zum Erstellen von PDFs. Sie ermöglicht das Hinzufügen von Text, Bildern, Formen und Tabellen sowie die Verarbeitung mehrerer Seiten. Geeignet für einfache bis mittelkomplexe Aufgaben im Bereich der PDF-Erstellung.
Betreuer: Jung Kurt (nicht mehr aktiv weiterentwickelt, aber weiterhin in Verwendung).
Einschränkung: Fehlen von Updates, obwohl bestehende Nutzungen bestehen bleiben.
Beispiel:
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, "Hello World!")
err := pdf.OutputFileAndClose("hello.pdf")
if err != nil {
panic(err)
}
}
gopdf
Betreuer: signintech (aktiv weiterentwickelt).
In der Programmiersprache Go ist gopdf, entwickelt von SignInTech, eine der herausragenden Bibliotheken für diesen Zweck. Diese Bibliothek bietet eine unkomplizierte Möglichkeit, PDFs programmgesteuert zu erstellen, ohne auf externe Abhängigkeiten oder C-Bibliotheken angewiesen zu sein.
gopdf ist eine reine Go-Bibliothek, die speziell für die Erstellung von PDF-Dokumenten konzipiert wurde. Sie bietet eine einfache und effiziente API, die sich vor allem auf die PDF-Generierung konzentriert. Dies macht sie für grundlegende Aufgaben einfacher zu verwenden, während sie die Flexibilität für komplexere Operationen beibehält.
Hauptmerkmale:
- Reine Go-Implementierung: Keine externen Abhängigkeiten oder C-Bibliotheken erforderlich.
- Einfache API: Benutzerfreundliche Funktionen zum Erstellen von PDFs.
- Effiziente Leistung: Optimiert für schnelles und effizientes Erstellen von PDFs.
Beispielhafte Verwendung
Um zu veranschaulichen, wie gopdf verwendet werden kann, betrachten wir hier ein grundlegendes Beispiel für die Erstellung eines einfachen PDF-Dokuments:
package main
import (
"github.com/signintech/gopdf"
)
func main() {
// Erstelle eine neue PDF-Instanz
pdf := gopdf.New()
// Setze die Seitengröße und Ränder
pdf.SetPageSize(gopdf.PageSizeA4)
pdf.AddPage()
// Füge Text in das PDF ein
pdf.SetFont("Arial", "", 12)
pdf.Write(50, 50, "Hello, World!")
// Speichere das PDF in eine Datei
err := pdf.SaveToFile("example.pdf")
if err != nil {
panic(err)
}
}
Dieses Beispiel demonstriert, wie eine neue PDF-Dokumentdatei erstellt, ihr Text hinzugefügt und sie als Datei gespeichert wird.
Fortgeschrittene Funktionen von gopdf:
- Hinzufügen von Bildern: Sie können Bilder in Ihre PDF-Dokumente einfügen, indem Sie die Methode AddImage verwenden.
- Zeichnen von Formen: Die Bibliothek bietet Funktionen zum Zeichnen von Linien, Rechtecken und anderen Formen.
- PDF-Schutz: Sie können Ihren PDFs einen Passwortschutz zuweisen, um den Zugriff zu beschränken.
pdfcpu
- Betreuer: PDFCPU-Team (https://github.com/pdfcpu/pdfcpu).
- Anwendungsfälle: Großflächige PDF-Manipulation und -Analyse.
Eine weitere leistungsfähige Bibliothek für die PDF-Manipulation in Go ist pdfcpu. Diese Bibliothek bietet einen umfassenden Funktionsumfang zum Erstellen, Ändern und Untersuchen von PDF-Dateien über sowohl eine API als auch eine Befehlszeilenschnittstelle (CLI). Im Folgenden gehen wir auf die Beschreibung, Verwendungsbeispiele und die wichtigsten Funktionen von pdfcpu ein.
pdfcpu ist eine auf Go basierende PDF-Verarbeitungsbibliothek, die Verschlüsselung unterstützt und robuste Werkzeuge zur Bearbeitung verschiedener Aspekte von PDF-Dokumenten bietet. Sie ist mit allen PDF-Versionen kompatibel, einschließlich laufender Verbesserungen für PDF 2.0 (ISO-32000-2). Das Ziel der Bibliothek ist es, einen umfassenden Bereich an PDF-Verarbeitungsfunktionen bereitzustellen, was sie sowohl für einfache als auch für komplexe Anwendungsfälle geeignet macht.
Hauptmerkmale
- Verschlüsselungsunterstützung: pdfcpu unterstützt die Verschlüsselung und ermöglicht es Entwicklern, ihre PDF-Dokumente effektiv zu sichern.
- API und CLI: Es werden sowohl eine API für den programmgesteuerten Zugriff als auch eine Befehlszeilenschnittstelle (CLI) für schnelle Operationen angeboten.
- Stapelverarbeitung: Starke Unterstützung für die Stapelverarbeitung über die umfangreiche Befehlszeile macht es effizient, mehrere Dateien gleichzeitig zu verarbeiten.
- Kompatibilität: Kompatibel mit allen PDF-Versionen, einschließlich grundlegender Unterstützung und laufender Verbesserungen für PDF 2.0.
Um mit pdfcpu zu beginnen, müssen Sie es über das Paketverwaltungssystem von Go installieren:
go get github.com/pdfcpu/pdfcpu
Grundlegende Befehlszeilenoperationen
pdfcpu bietet eine Vielzahl von Befehlen für verschiedene Operationen. Hier sind einige Beispiele:
Erstellen eines PDFs aus Bildern
Sie können eine oder mehrere Bilddateien in eine PDF-Datei umwandeln, indem Sie den folgenden Befehl verwenden:
pdfcpu img2pdf out.pdf image1.jpg image2.png
Dieser Befehl erstellt ein PDF, bei dem jedes Bild auf eine separate Seite gerendert wird.
Um mehrere PDF-Dateien in ein einzelnes Dokument zusammenzuführen, verwenden Sie den merge-Befehl:
pdfcpu merge output.pdf file1.pdf file2.pdf
Verwendungsbeispiel für pdfcpu
Für komplexere Operationen können Sie die von pdfcpu bereitgestellte API verwenden. Hier ist ein Beispiel, wie Sie ein neues PDF erstellen und Text hinzufügen, indem Sie Go-Code verwenden:
package main
import (
"github.com/pdfcpu/pdfcpu"
"log"
)
func main() {
// Erstelle ein neues PDF-Dokument
doc := pdfcpu.NewPDF(0, 0)
defer doc.Close()
// Füge eine Seite zum Dokument hinzu
page := doc.AddPage()
page.SetMediaBox(pdfcpu.MediaBox{
LLX: 0,
LLY: 0,
URX: 612,
URY: 792,
})
// Füge Text zur Seite hinzu
content := "Hello, World!"
font := pdfcpu.NewFont("Helvetica", "")
page.AddText(content, font, 12, 100, 750)
// Speichere das Dokument
err := doc.Save("output.pdf")
if err != nil {
log.Fatal(err)
}
}
Dieses Beispiel demonstriert, wie mit der API von pdfcpu ein neues PDF erstellt, eine Seite hinzugefügt und Text darauf geschrieben wird.
Maroto
- Betreuer: go-playground-Team (https://github.com/go-playground/maroto).
- Anwendungsfälle: Entwickler, die einen designorientierten Ansatz bevorzugen (ähnlich wie Bootstrap).
- Von Bootstrap inspiriert; so konzipiert, dass sie mit einem deklarativen Stil, ähnlich wie HTML/CSS, einfach zu verwenden ist.
- Basiert auf gofpdf und vereinfacht den Erstellungsprozess, während sie leistungsfähige Anpassungsoptionen beibehält.
Maroto ist eine weitere Go-Bibliothek zum Erstellen von PDFs, die sich jedoch darauf konzentriert, den Prozess zu vereinfachen, indem sie niedrige Ebenendetails abstrahiert. Sie baut auf der Bibliothek gofpdf auf und bietet eine benutzerfreundlichere API für die Dokumentgenerierung.
Verwendungsbeispiel für Maroto
Hier ist ein Beispiel, wie Sie Maroto verwenden können, um ein einfaches PDF zu erstellen:
package main
import (
"github.com/andreyhoffmann1103/maroto"
)
func main() {
// Erstelle ein neues PDF-Dokument mit angegebenen Dimensionen
m := maroto.NewPDF(595, 842) // A4-Größe in Punkten
// Füge Text auf der ersten Seite hinzu
m.AddText("Hello, Maroto!", 0, 0)
// Speichere das PDF in eine Datei
err := m.OutputFileAndClose("example.pdf")
if err != nil {
panic(err)
}
}
Dieses Beispiel zeigt, wie man ein neues PDF-Dokument mit einer Seite erstellt und ihr Text mit Maroto hinzufügt.
Unipdf
UniPDF ist eine weitere leistungsfähige und umfassende Bibliothek zum Erstellen und Verarbeiten von PDF-Dateien in Golang (Go). Sie bietet eine Reihe von Funktionen, die sie unter Entwicklern, die Inhalte aus PDF-Dokumenten generieren, ändern und extrahieren müssen, beliebt machen.
- Betreuer: UnidocLib (https://unidoc.io).
- Anwendungsfälle: Fortgeschrittene PDF-Verarbeitung (Verschlüsselung, Zusammenführen, Skripting).
- Leistungsstarke Bibliothek zum Erstellen und Verarbeiten von PDFs (reines Go).
- Bietet umfangreiche Funktionen, darunter interaktive Elemente wie Links, Lesezeichen, Zusammenführen/Aufteilen, Verschlüsselung und vieles mehr.
- Umfassende API zum Lesen und Schreiben von PDF-Objekten (Dictionarys, Streams).
- Geeignet für Anwendungen, die robuste PDF-Generierungsfähigkeiten benötigen.
Installation von UniPDF
Um mit UniPDF zu beginnen, müssen Sie die Bibliothek installieren. Befolgen Sie diese Schritte:
# Erstellen Sie ein neues Verzeichnis:
mkdir go-pdf-generator cd go-pdf-generator
# Initialisieren Sie das Go-Modul:
go mod init go-pdf-generator
# Installieren Sie die UniPDF-Bibliothek:
go get github.com/unidoc/unipdf/v3
Damit wird Ihr Projekt eingerichtet und die erforderlichen Abhängigkeiten installiert.
Beispiel für grundlegende Verwendung
Hier ist ein einfaches Beispiel zum Erstellen eines PDF-Dokuments mit UniPDF:
package main
import (
"github.com/unidoc/unipdf/v3/core"
"github.com/unidoc/unipdf/v3/model"
"github.com/unidoc/unipdf/v3/creator"
)
func main() {
// Erstelle ein neues PDF-Dokument
pdf := creator.New()
// Füge eine Seite zum PDF hinzu
page := pdf.NewPage()
// Richte den Inhaltsstrom für die Seite ein
contentStream := model.NewContentStream()
page.SetContents(contentStream)
// Füge Text zur Seite hinzu
text := "Hello, UniPDF!"
font := creator.NewStandardFont(creator.FontHelvetica)
textObject := model.NewText(text, font, 12)
contentStream.Add(textObject)
// Speichere das PDF-Dokument
err := pdf.WriteToFile("example.pdf")
if err != nil {
panic(err)
}
}
Dieses Beispiel demonstriert, wie ein neues PDF-Dokument erstellt, eine Seite hinzugefügt und Text darauf geschrieben wird. Die resultierende Datei example.pdf wird den Text „Hello, UniPDF!" enthalten.
wkhtmltopdf Wrapper
- https://github.com/SebastiaanKlippert/go-wkhtmltopdf
- Abhängigkeit: Erfordert die Installation von
wkhtmltopdfüberbrewoderapt-get. - Anwendungsfälle: Erstellen von PDFs aus dynamischen HTML-Inhalten (z. B. Rechnungen, Berichte).
Funktionen:
- Wandelt HTML-Vorlagen (gerendert mit Golangs
html/template) in PDF um. - Anpassbare Ränder, Seitenorientierung und Kopf-/Fußzeilen.
- Geeignet, wenn das Design des Dokuments komplex ist und HTML/CSS-Styling beinhaltet.
- Verwendet wkhtmltopdf als Backend, um HTML-Inhalte in das PDF-Format zu konvertieren.
Verwendungsbeispiel für go-wkhtmltopdf
import (
"bytes"
"github.com/SebastiaanKlippert/go-wkhtmltopdf"
"html/template"
)
type PDFService struct {}
func NewPDFService() *PDFService {
return &PDFService{}
}
func (p PDFService) GeneratePDF(data interface{}) ([]byte, error) {
var templ *template.Template
var err error
if templ, err = template.ParseFiles("pdf-template.html"); err != nil {
return nil, err
}
var body bytes.Buffer
if err := templ.Execute(&body, data); err != nil {
return nil, err
}
pdfg, err := wkhtmltopdf.NewPDFGenerator()
if err != nil {
return nil, err
}
page := wkhtmltopdf.NewPageReader(bytes.NewReader(body.Bytes()))
page.EnableLocalFileAccess.Set(true)
pdfg.AddPage(page)
pdfg.MarginLeft.Set(0)
pdfg.MarginRight.Set(0)
pdfg.Dpi.Set(300)
pdfg.PageSize.Set(wkhtmltopdf.PageSizeA4)
pdfg.Orientation.Set(wkhtmltopdf.OrientationLandscape)
err = pdfg.Create()
if err != nil {
return nil, err
}
return pdfg.Bytes(), nil
}
pdflib (von EndFirstCorp):
- Ein Befehlszeilenwerkzeug für verschiedene PDF-Operationen wie Validierung, Optimierung, Aufteilen/Zusammenführen.
- Nützlich für Stapelverarbeitung und administrative Aufgaben im Zusammenhang mit PDF-Dokumenten.
Überblick über pdflib
Die pdflib-Bibliothek ist so konzipiert, dass sie ein umfassender PDF-Processor für die Programmiersprache Go ist. Sie unterstützt verschiedene Funktionen wie die Validierung, Optimierung, das Aufteilen, Zusammenführen, Extrahieren von Inhalten aus und Kürzen von PDFs. Die Bibliothek richtet sich nach dem Standard PDF 32000-1:2008 (PDF 1.7) und gewährleistet die Kompatibilität mit einem breiten Spektrum an PDF-Dokumenten.
Wichtige Funktionen
- Validierung: Stellt sicher, dass PDF-Dateien dem Standard PDF 1.7 entsprechen.
- Optimierung: Reduziert die Dateigröße, indem sie redundante Ressourcen eliminiert.
- Aufteilen und Zusammenführen: Ermöglicht das Aufteilen mehrseitiger PDFs in Ein-Seiten-PDFs oder das Zusammenführen mehrerer PDFs in eines.
- Extraktion: Extrahiert Bilder, Schriften, Inhalte und Seiten aus einem PDF.
- Kürzen: Erstellt gekürzte Versionen von PDF-Dokumenten.
Installation
Um pdflib zu verwenden, müssen Sie es über das Paketverwaltungssystem von Go installieren. Dies können Sie tun, indem Sie Folgendes ausführen:
go get github.com/EndFirstCorp/pdflib
Beispiel für grundlegende Verwendung – Validierung eines PDFs
Hier ist ein einfaches Beispiel, das demonstriert, wie die pdflib-Bibliothek für grundlegende PDF-Operationen verwendet werden kann:
Um ein PDF gegen den Standard PDF 1.7 zu validieren, können Sie den folgenden Code verwenden:
package main
import ( "fmt" "github.com/EndFirstCorp/pdflib/cmd/pdflib" )
func main() {
// Validiere eine PDF-Datei
err := pdflib.Validate("example.pdf")
if err != nil {
fmt.Println("Validierung fehlgeschlagen:", err)
} else {
fmt.Println("PDF ist gültig.")
}
}
Fazit
Beim Erstellen von PDFs in Go hängt die Wahl der Bibliothek von der Komplexität und den spezifischen Anforderungen Ihres Projekts ab. Die folgenden Empfehlungen werden gegeben:
- Einfache Dokumente: Verwenden Sie
gofpdfoderMaroto. Diese Bibliotheken bieten Einfachheit und Benutzerfreundlichkeit für unkomplizierte Aufgaben. - Komplexe Designs mit HTML/CSS: Nutzen Sie den
wkhtmltopdf Wrapper, der wkhtmltopdf verwendet, um komplexe HTML-Inhalte und Stile zu verarbeiten. - Fortgeschrittene PDF-Verarbeitung: Wählen Sie
Unipdfoderpdfcpu, wenn Ihre Anwendung fortgeschrittene Funktionen wie Verschlüsselung, interaktive Elemente, detaillierte Formatierung und umfassende Manipulationsfähigkeiten erfordert.
Jede dieser Bibliotheken bietet einzigartige Stärken, die verschiedenen Bedürfnissen bei der PDF-Generierung gerecht werden und Entwicklern eine Vielzahl von Werkzeugen zur Auswahl auf der Grundlage ihrer spezifischen Anforderungen bietet.