PDF-Berichte in GO generieren
OK. Jetzt werden PDFs in GO generiert!
Die generische Erstellung von PDF-Dokumenten programmatisch kann eine wichtige Funktion in Ihrer Anwendung sein. Hier untersuchen wir und geben eine kurze Übersicht mit Beispielen der verfügbaren Bibliotheken in der Go-Programmiersprache (Golang) zur Erstellung von PDF-Dateien.
Eignende Lösungen können unterschiedlich sein, beispielsweise für einfache Dokumentenerstellung oder komplexe und funktionsreiche PDF-Generierung.
Ja, das Bild ist künstlich intelligent generiert, das Modell ist Flux1.Dev.
Bibliotheken und Tools
gofpdf
GoPdf ist eine einfache Bibliothek zur Erstellung von PDFs. Sie ermöglicht das Hinzufügen von Text, Bildern, Formen, Tabellen und das Verwalten mehrerer Seiten. Eignet sich für einfache bis mittelkomplexe PDF-Erstellungsaufgaben.
Maintainer: Jung Kurt (eingestellt, aber immer noch genutzt).
Einschränkung: Fehlende Updates, obwohl die Nutzung weiterhin besteht.
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
Maintainer: signintech (aktiv gepflegt).
In der Go-Programmiersprache ist eine der Bibliotheken, die sich hierfür hervorheben, gopdf, entwickelt von SignInTech. Diese Bibliothek bietet eine einfache Möglichkeit, PDFs programmatisch zu erstellen, ohne auf externe Abhängigkeiten oder C-Bibliotheken zu verlassen.
gopdf ist eine reine Go-Bibliothek, die speziell für die Erstellung von PDF-Dokumenten entwickelt wurde. Sie bietet eine einfache und effiziente API, die primär auf die PDF-Generierung fokussiert ist, was die Verwendung für grundlegende Aufgaben erleichtert, 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: Einfach zu verwendende Funktionen zur Erstellung von PDFs.
- Effiziente Leistung: Optimiert für schnelle und effiziente PDF-Erstellung.
Beispielanwendung
Um zu zeigen, wie gopdf verwendet werden kann, betrachten wir ein einfaches Beispiel zur Erstellung eines einfachen PDF-Dokuments:
package main
import (
"github.com/signintech/gopdf"
)
func main() {
// Erstellen Sie eine neue PDF-Instanz
pdf := gopdf.New()
// Setzen Sie die Seitengröße und -ränder
pdf.SetPageSize(gopdf.PageSizeA4)
pdf.AddPage()
// Fügen Sie etwas Text zur PDF hinzu
pdf.SetFont("Arial", "", 12)
pdf.Write(50, 50, "Hello, World!")
// Speichern Sie die PDF in eine Datei
err := pdf.SaveToFile("example.pdf")
if err != nil {
panic(err)
}
}
Dieses Beispiel zeigt, wie Sie eine neue PDF-Datei erstellen, Text hinzufügen und sie als Datei speichern.
Erweiterte Funktionen von gopdf:
- Hinzufügen von Bildern: Sie können Bilder in Ihre PDF-Dokumente mit der AddImage-Methode einfügen.
- Zeichnen von Formen: Die Bibliothek bietet Funktionen zum Zeichnen von Linien, Rechtecken und anderen Formen.
- PDF-Schutz: Sie können Passwortschutz auf Ihre PDFs setzen, um den Zugriff einzuschränken.
pdfcpu
- Maintainer: PDFCPU-Team (https://github.com/pdfcpu/pdfcpu).
- Anwendungsfälle: Großskalige Manipulation und Analyse von PDFs.
Ein weiterer mächtiger Bibliothek, der für die PDF-Manipulation in Go verfügbar ist, ist pdfcpu. Diese Bibliothek bietet ein umfassendes Suite von Funktionen zur Erstellung, Modifikation und Inspektion von PDF-Dateien über eine API und eine Kommandozeilenschnittstelle (CLI). Unten werden wir die Beschreibung, Beispiele für die Verwendung und die Schlüsselunktionen von pdfcpu erläutern.
pdfcpu ist eine Go-basierte PDF-Verarbeitungsbibliothek, die Verschlüsselung unterstützt und robuste Werkzeuge für die Verarbeitung 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). Die Bibliothek zielt darauf ab, ein umfassendes Spektrum an PDF-Verarbeitungsfunktionen zu bieten, was sie für einfache und komplexe Anwendungsfälle geeignet macht.
Hauptmerkmale
- Verschlüsselungssupport: pdfcpu unterstützt Verschlüsselung, wodurch Entwickler ihre PDF-Dokumente effektiv sichern können.
- API und CLI: Sie bietet sowohl eine API für den programmatischen Zugriff als auch eine Kommandozeilenschnittstelle (CLI) für schnelle Operationen.
- Batch-Verarbeitung: Starke Unterstützung für Batch-Verarbeitung über die reiche Kommandozeile macht sie effizient für das gleichzeitige Verarbeiten mehrerer Dateien.
- 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 mithilfe des Paketmanagementsystem von Go installieren:
go get github.com/pdfcpu/pdfcpu
Grundlegende Kommandozeilenoperationen
pdfcpu bietet eine Vielzahl von Befehlen für verschiedene Operationen. Hier sind einige Beispiele:
PDF aus Bildern erstellen
Sie können eine oder mehrere Bilddateien in eine PDF-Datei konvertieren, indem Sie den folgenden Befehl verwenden:
pdfcpu img2pdf out.pdf image1.jpg image2.png
Dieser Befehl erstellt eine PDF, in der jedes Bild auf eine separate Seite gerendert wird.
Um mehrere PDF-Dateien in ein einziges Dokument zu mergen, verwenden Sie den merge-Befehl:
pdfcpu merge output.pdf file1.pdf file2.pdf
Beispiel für die Verwendung von pdfcpu
Für komplexe Operationen können Sie die API, die von pdfcpu bereitgestellt wird, verwenden. Hier ist ein Beispiel, wie Sie eine neue PDF erstellen und Text mit Go-Code hinzufügen können:
package main
import (
"github.com/pdfcpu/pdfcpu"
"log"
)
func main() {
// Erstellen Sie eine neue PDF-Datei
doc := pdfcpu.NewPDF(0, 0)
defer doc.Close()
// Fügen Sie eine Seite zum Dokument hinzu
page := doc.AddPage()
page.SetMediaBox(pdfcpu.MediaBox{
LLX: 0,
LLY: 0,
URX: 612,
URY: 792,
})
// Fügen Sie Text zur Seite hinzu
content := "Hello, World!"
font := pdfcpu.NewFont("Helvetica", "")
page.AddText(content, font, 12, 100, 750)
// Speichern Sie das Dokument
err := doc.Save("output.pdf")
if err != nil {
log.Fatal(err)
}
}
Dieses Beispiel zeigt, wie Sie eine neue PDF erstellen, eine Seite hinzufügen und Text mithilfe der API von pdfcpu darauf schreiben können.
Maroto
- Maintainer: go-playground-Team (https://github.com/go-playground/maroto).
- Anwendungsfälle: Entwickler, die einen designorientierten Ansatz bevorzugen (ähnlich wie Bootstrap).
- Inspiriert von Bootstrap; entworfen, um einfach zu verwenden mit einem deklarativen Stil, ähnlich wie HTML/CSS.
- Auf gofpdf aufgebaut, vereinfacht den Erstellungsprozess, während sie mächtige Anpassungsoptionen beibehält.
Maroto ist eine weitere Go-Bibliothek zur Erstellung von PDFs, die sich jedoch darauf konzentriert, den Prozess zu vereinfachen, indem sie Details auf niedriger Ebene abstrahiert. Sie baut auf der gofpdf-Bibliothek auf und bietet eine benutzerfreundlichere API zur Erstellung von Dokumenten.
Beispiel für die Verwendung von 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() {
// Erstellen Sie eine neue PDF-Datei mit den angegebenen Abmessungen
m := maroto.NewPDF(595, 842) // A4-Größe in Punkten
// Fügen Sie Text zur ersten Seite hinzu
m.AddText("Hello, Maroto!", 0, 0)
// Speichern Sie die PDF in eine Datei
err := m.OutputFileAndClose("example.pdf")
if err != nil {
panic(err)
}
}
Dieses Beispiel zeigt, wie Sie eine neue PDF-Datei mit einer Seite erstellen und mithilfe von Maroto Text darauf hinzufügen können.
Unipdf
UniPDF ist eine weitere mächtige und umfassende Bibliothek zur Erstellung und Verarbeitung von PDF-Dateien in Golang (Go). Sie bietet eine breite Palette von Funktionen, die sie bei Entwicklern beliebt macht, die PDF-Dokumente generieren, bearbeiten und Inhalte extrahieren müssen.
- Maintainer: UnidocLib (https://unidoc.io).
- Anwendungsfälle: Erweiterte PDF-Verarbeitung (Verschlüsselung, Zusammenführung, Skripting).
- Mächtige Bibliothek zur Erstellung und Verarbeitung von PDFs (reine Go).
- Bietet umfangreiche Funktionen, einschließlich interaktiver Elemente wie Links, Lesezeichen, Zusammenführung/Teilung, Verschlüsselung und mehr.
- Umfassende API zur Lesung und Schreibung von PDF-Objekten (Wörterbüchern, Streams).
- Eignet sich für Anwendungen, die robuste PDF-Generierungsfähigkeiten benötigen.
UniPDF-Installation
Um mit UniPDF zu beginnen, müssen Sie die Bibliothek installieren. Folgen Sie diesen Schritten:
# 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
Dies erstellt Ihr Projekt und installiert die erforderlichen Abhängigkeiten.
Beispiel für die grundlegende Verwendung
Hier ist ein einfaches Beispiel, wie Sie mit UniPDF eine PDF-Datei erstellen können:
package main
import (
"github.com/unidoc/unipdf/v3/core"
"github.com/unidoc/unipdf/v3/model"
"github.com/unidoc/unipdf/v3/creator"
)
func main() {
// Erstellen Sie eine neue PDF-Datei
pdf := creator.New()
// Fügen Sie eine Seite zur PDF hinzu
page := pdf.NewPage()
// Richten Sie den Inhaltstream für die Seite ein
contentStream := model.NewContentStream()
page.SetContents(contentStream)
// Fügen Sie Text zur Seite hinzu
text := "Hello, UniPDF!"
font := creator.NewStandardFont(creator.FontHelvetica)
textObject := model.NewText(text, font, 12)
contentStream.Add(textObject)
// Speichern Sie die PDF-Datei
err := pdf.WriteToFile("example.pdf")
if err != nil {
panic(err)
}
}
Dieses Beispiel zeigt, wie Sie eine neue PDF-Datei erstellen, eine Seite hinzufügen und Text darauf schreiben können. Die resultierende Datei example.pdf enthält den Text “Hello, UniPDF!”.
wkhtmltopdf Wrapper
- https://github.com/SebastiaanKlippert/go-wkhtmltopdf
- Abhängigkeit: Erfordert
wkhtmltopdf
überbrew
oderapt-get
installiert. - Anwendungsfälle: Erstellen von PDFs aus dynamischem HTML-Inhalt (z. B. Rechnungen, Berichte).
Merkmale:
- Konvertiert HTML-Vorlagen (mit Goâs
html/template
) in PDF. - Anpassbare Ränder, Seitenorientierung und Kopf-/Fußzeilen.
- Eignet sich, wenn der Dokumententyp komplex ist und HTML/CSS-Stil verwendet.
- Verwendet wkhtmltopdf als Backend, um HTML-Inhalt in PDF-Format zu konvertieren.
Beispiel für die Verwendung von 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 Kommandozeilentool für verschiedene PDF-Operationen wie Validierung, Optimierung, Aufteilen/Zusammenführen.
- Nützlich für Batch-Verarbeitung und Verwaltungsaufgaben im Zusammenhang mit PDF-Dokumenten.
Übersicht über pdflib
Die pdflib-Bibliothek ist so konzipiert, um ein umfassender PDF-Verarbeiter für die Go-Programmiersprache zu sein. Sie unterstützt verschiedene Funktionalitäten wie Validierung, Optimierung, Aufteilen, Zusammenführen, Extrahieren von Inhalten und Trimmen von PDFs. Die Bibliothek folgt dem PDF 32000-1:2008 (PDF 1.7)-Standard, was die Kompatibilität mit einer breiten Palette von PDF-Dokumenten gewährleistet.
Hauptmerkmale
- Validierung: Stellt sicher, dass PDF-Dateien dem PDF 1.7-Standard entsprechen.
- Optimierung: Reduziert die Dateigröße, indem redundante Ressourcen entfernt werden.
- Aufteilen und Zusammenführen: Ermöglicht das Aufteilen von mehrseitigen PDFs in Einzelseiten oder das Zusammenführen mehrerer PDFs zu einer.
- Extraktion: Extrahiert Bilder, Schriften, Inhalte und Seiten aus einer PDF.
- Trimmen: Erstellt gekürzte Versionen von PDF-Dokumenten.
Installation
Um pdflib zu verwenden, müssen Sie es über das Paketmanagementsystem von Go installieren. Sie können dies durch Ausführen folgenden Befehls tun:
go get github.com/EndFirstCorp/pdflib
Beispiel für die grundlegende Verwendung - Validierung einer PDF
Hier ist ein einfaches Beispiel, das zeigt, wie Sie die pdflib-Bibliothek verwenden können, um grundlegende PDF-Operationen durchzuführen:
Um eine PDF gegen den PDF 1.7-Standard zu validieren, können Sie den folgenden Code verwenden:
package main
import ( "fmt" "github.com/EndFirstCorp/pdflib/cmd/pdflib" )
func main() {
// Validieren Sie eine PDF-Datei
err := pdflib.Validate("example.pdf")
if err != nil {
fmt.Println("Validierung fehlgeschlagen:", err)
} else {
fmt.Println("PDF ist gültig.")
}
}
Schlussfolgerung
Für die Erstellung 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
gofpdf
oderMaroto
. Diese Bibliotheken bieten Einfachheit und Benutzerfreundlichkeit für einfache Aufgaben. - Komplexe Designs mit HTML/CSS: Nutzen Sie den
wkhtmltopdf Wrapper
, der wkhtmltopdf verwendet, um komplexe HTML-Inhalte und Stilisierungen zu verarbeiten. - Erweiterte PDF-Verarbeitung: Wählen Sie
Unipdf
oderpdfcpu
, wenn Ihre Anwendung erweiterte Funktionen wie Verschlüsselung, interaktive Elemente, detaillierte Formatierung und umfassende Manipulationsfunktionen benötigt.
Jede dieser Bibliotheken bietet einzigartige Stärken, die unterschiedlichen Bedürfnissen in der PDF-Erstellung entsprechen und Entwicklern eine Vielzahl von Tools bieten, basierend auf ihren spezifischen Anforderungen.