PDF-rapporten genereren in GO
OK. Nu PDF's genereren in GO!
Programmatisch PDF-documenten genereren kan een belangrijke functie zijn in uw toepassing. Hieronder bespreken we en geven we een korte overzicht met voorbeelden van de bibliotheken beschikbaar in de Go-programmeertaal (Golang) voor het genereren van PDF-bestanden.
Aanbevolen oplossingen kunnen verschillen, afhankelijk van of het gaat om het maken van eenvoudige documenten of het genereren van complexe en functierijke PDF’s.
Ja, het beeld is AI-generatie, het model is Flux1.Dev.
Bibliotheken en Tools
gofpdf
GoPdf is een eenvoudige bibliotheek voor het maken van PDF’s. Het stelt u in staat om tekst, afbeeldingen, vormen, tabellen toe te voegen en meerdere pagina’s te beheren. Geschikt voor eenvoudige tot matig complexe PDF-opdrachten.
Beheerder: Jung Kurt (verlaten, maar nog steeds gebruikt).
Beperking: Gebrek aan updates, hoewel de huidige gebruikte versie nog steeds in gebruik is.
Voorbeeld:
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
Beheerder: signintech (actief onderhouden).
In de Go-programmeertaal is één van de bibliotheken die opvallen voor dit doel gopdf, ontwikkeld door SignInTech. Deze bibliotheek biedt een eenvoudige manier om PDF’s programmatisch te genereren zonder afhankelijk te zijn van externe bibliotheken of C-bibliotheken.
gopdf is een pure Go-bibliotheek die specifiek is ontworpen voor het maken van PDF-documenten. Het biedt een eenvoudige en efficiënte API die zich vooral richt op PDF-generatie, waardoor het makkelijker te gebruiken is voor basisopdrachten, terwijl het de flexibiliteit behoudt die nodig is voor complexere operaties.
Belangrijke functies:
- Pure Go-implementatie: Geen externe afhankelijkheden of C-bibliotheken vereist.
- Eenvoudige API: Makkelijk te gebruiken functies voor het genereren van PDF’s.
- Efficiënte prestaties: Optimaliseerd voor snelle en efficiënte PDF-generatie.
Voorbeeldgebruik
Om te laten zien hoe gopdf kan worden gebruikt, kijken we naar een eenvoudig voorbeeld van het maken van een PDF-document:
package main
import (
"github.com/signintech/gopdf"
)
func main() {
// Maak een nieuw PDF-exemplaar
pdf := gopdf.New()
// Stel de paginaformaat en marges in
pdf.SetPageSize(gopdf.PageSizeA4)
pdf.AddPage()
// Voeg tekst toe aan de PDF
pdf.SetFont("Arial", "", 12)
pdf.Write(50, 50, "Hello, World!")
// Sla de PDF op als bestand
err := pdf.SaveToFile("example.pdf")
if err != nil {
panic(err)
}
}
Dit voorbeeld laat zien hoe u een nieuw PDF-document kunt maken, tekst kunt toevoegen en het als bestand kunt opslaan.
Geavanceerde functies van gopdf:
- Afbeeldingen toevoegen: U kunt afbeeldingen in uw PDF-documenten invoegen met behulp van de AddImage-methode.
- Vormen tekenen: De bibliotheek biedt functies om lijnen, rechthoeken en andere vormen te tekenen.
- PDF-beveiliging: U kunt wachtwoordbeveiliging instellen op uw PDF’s om toegang te beperken.
pdfcpu
- Beheerder: PDFCPU-team (https://github.com/pdfcpu/pdfcpu).
- Toepassingen: Grote schaal PDF-manipulatie en analyse.
Een andere krachtige bibliotheek beschikbaar voor PDF-manipulatie in Go is pdfcpu. Deze bibliotheek biedt een uitgebreid pakket functies voor het maken, wijzigen en inspecteren van PDF-bestanden via zowel een API als een opdrachtregelinterface (CLI). Hieronder bespreken we de beschrijving, gebruikvoorbeelden en belangrijke functionaliteiten van pdfcpu.
pdfcpu is een Go-gestuurde PDF-verwerkingsbibliotheek die encryptie ondersteunt en robuuste tools biedt voor het beheren van verschillende aspecten van PDF-documenten. Het is compatibel met alle PDF-versies, inclusief voortdurende verbeteringen voor PDF 2.0 (ISO-32000-2). De bibliotheek richt zich erop om een uitgebreid bereik aan PDF-verwerkingsfunctionaliteiten te bieden, waardoor het geschikt is voor zowel eenvoudige als complexe toepassingen.
Belangrijke functies
- Encryptie-ondersteuning: pdfcpu ondersteunt encryptie, waardoor ontwikkelaars hun PDF-documenten effectief kunnen beveiligen.
- API en CLI: Het biedt zowel een API voor programma-toegang als een opdrachtregelinterface (CLI) voor snelle bewerkingen.
- Batchverwerking: Sterke ondersteuning voor batchverwerking via de rijke opdrachtregel maakt het efficiënt voor het verwerken van meerdere bestanden tegelijk.
- Compatibiliteit: Compatibel met alle PDF-versies, inclusief basisondersteuning en voortdurende verbeteringen voor PDF 2.0.
Om aan de slag te gaan met pdfcpu, moet u het installeren via Go’s pakketbeheersysteem:
go get github.com/pdfcpu/pdfcpu
Basisopdrachtregelbewerkingen
pdfcpu biedt een verscheidenheid aan opdrachten voor verschillende bewerkingen. Hier zijn enkele voorbeelden:
Een PDF maken vanaf afbeeldingen
U kunt één of meer afbeeldingsbestanden converteren naar een PDF-bestand met de volgende opdracht:
pdfcpu img2pdf out.pdf image1.jpg image2.png
Deze opdracht maakt een PDF waarin elke afbeelding op een aparte pagina wordt weergegeven.
Om meerdere PDF-bestanden samen te voegen tot één document, gebruikt u de merge-opdracht:
pdfcpu merge output.pdf file1.pdf file2.pdf
Voorbeeldgebruik van pdfcpu
Voor complexere bewerkingen kunt u de API van pdfcpu gebruiken. Hier is een voorbeeld van hoe u een nieuwe PDF kunt maken en tekst kunt toevoegen met behulp van Go-code:
package main
import (
"github.com/pdfcpu/pdfcpu"
"log"
)
func main() {
// Maak een nieuw PDF-document
doc := pdfcpu.NewPDF(0, 0)
defer doc.Close()
// Voeg een pagina toe aan het document
page := doc.AddPage()
page.SetMediaBox(pdfcpu.MediaBox{
LLX: 0,
LLY: 0,
URX: 612,
URY: 792,
})
// Voeg tekst toe aan de pagina
content := "Hello, World!"
font := pdfcpu.NewFont("Helvetica", "")
page.AddText(content, font, 12, 100, 750)
// Sla het document op
err := doc.Save("output.pdf")
if err != nil {
log.Fatal(err)
}
}
Dit voorbeeld laat zien hoe u een nieuw PDF-document kunt maken, een pagina kunt toevoegen en tekst kunt schrijven met behulp van de API van pdfcpu.
Maroto
- Beheerder: go-playground-team (https://github.com/go-playground/maroto).
- Toepassingen: Ontwikkelaars die een design-first aanpak voorkeuren (vergelijkbaar met Bootstrap).
- Geïnspireerd door Bootstrap; ontworpen om eenvoudig te gebruiken met een declaratieve stijl vergelijkbaar met HTML/CSS.
- Opgebouwd op gofpdf, vereenvoudigt het de aanmaakproces terwijl het krachtige aanpassingsmogelijkheden behoudt.
Maroto is een andere Go-bibliotheek voor het maken van PDF’s, maar richt zich op het vereenvoudigen van het proces door laag niveau details te abstracteren. Het bouwt op de gofpdf-bibliotheek en biedt een gebruikersvriendelijker API voor het genereren van documenten.
Voorbeeldgebruik van Maroto
Hier is een voorbeeld van hoe u Maroto kunt gebruiken om een eenvoudige PDF te maken:
package main
import (
"github.com/andreyhoffmann1103/maroto"
)
func main() {
// Maak een nieuw PDF-document met opgegeven afmetingen
m := maroto.NewPDF(595, 842) // A4-grootte in punten
// Voeg tekst toe aan de eerste pagina
m.AddText("Hello, Maroto!", 0, 0)
// Sla de PDF op als bestand
err := m.OutputFileAndClose("example.pdf")
if err != nil {
panic(err)
}
}
Dit voorbeeld laat zien hoe u een nieuw PDF-document kunt maken met één pagina en tekst kunt toevoegen met behulp van Maroto.
Unipdf
UniPDF is een andere krachtige en uitgebreide bibliotheek voor het maken en verwerken van PDF-bestanden in Golang (Go). Het biedt een breed scala aan functies die het populair maken onder ontwikkelaars die PDF’s moeten genereren, wijzigen en inhoud uit PDF-documenten moeten extraheren.
- Beheerder: UnidocLib (https://unidoc.io).
- Toepassingen: Geavanceerde PDF-verwerking (versleuteling, samenvoegen, scripten).
- Krachtige bibliotheek voor het maken en verwerken van PDF’s (pure Go).
- Biedt uitgebreide functies, waaronder interactieve elementen zoals links, bladwijzers, samenvoegen/splitsen, versleuteling en meer.
- Uitgebreide API voor het lezen en schrijven van PDF-objecten (dictionaries, streams).
- Geschikt voor toepassingen die robuuste PDF-generatiefunctionaliteiten nodig hebben.
UniPDF-installatie
Om aan de slag te gaan met UniPDF, moet u de bibliotheek installeren. Volg deze stappen:
# Maak een nieuwe map:
mkdir go-pdf-generator cd go-pdf-generator
# Initialiseer de Go-module:
go mod init go-pdf-generator
# Installeer de UniPDF-bibliotheek:
go get github.com/unidoc/unipdf/v3
Dit stelt uw project op en installeert de benodigde afhankelijkheden.
Voorbeeld van basisgebruik
Hier is een eenvoudig voorbeeld om een PDF-document te maken met behulp van UniPDF:
package main
import (
"github.com/unidoc/unipdf/v3/core"
"github.com/unidoc/unipdf/v3/model"
"github.com/unidoc/unipdf/v3/creator"
)
func main() {
// Maak een nieuw PDF-document
pdf := creator.New()
// Voeg een pagina toe aan de PDF
page := pdf.NewPage()
// Stel de inhoudsstroom voor de pagina in
contentStream := model.NewContentStream()
page.SetContents(contentStream)
// Voeg tekst toe aan de pagina
text := "Hello, UniPDF!"
font := creator.NewStandardFont(creator.FontHelvetica)
textObject := model.NewText(text, font, 12)
contentStream.Add(textObject)
// Sla het PDF-document op
err := pdf.WriteToFile("example.pdf")
if err != nil {
panic(err)
}
}
Dit voorbeeld laat zien hoe u een nieuw PDF-document kunt maken, een pagina kunt toevoegen en tekst kunt schrijven. Het resulterende bestand example.pdf bevat de tekst “Hello, UniPDF!”.
wkhtmltopdf Wrapper
- https://github.com/SebastiaanKlippert/go-wkhtmltopdf
- Afhankelijkheid: Vereist dat
wkhtmltopdf
is geïnstalleerd viabrew
ofapt-get
. - Toepassingen: PDF’s genereren vanuit dynamische HTML-inhoud (bijvoorbeeld facturen, rapporten).
Kenmerken:
- Converteert HTML-sjablonen (gerenderd met Go’s
html/template
) naar PDF. - Aanpasbare marges, pagina-oriëntatie en koppen/voetnoten.
- Geschikt wanneer de documentopmaak complex is en HTML/CSS-styling bevat.
- Gebruikt wkhtmltopdf als backend om HTML-inhoud om te zetten naar PDF-formaat.
go-wkhtmltopdf gebruiksvoorbeeld
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 (van EndFirstCorp):
- Een opdrachtregelprogramma voor verschillende PDF-bewerkingen zoals validatie, optimalisatie, splitsen/verenigen.
- Nuttig voor batchverwerking en administratieve taken gerelateerd aan PDF-documenten.
Overzicht van pdflib
De pdflib-bibliotheek is ontworpen als een uitgebreid PDF-verwerker voor de Go-programmeertaal. Het ondersteunt verschillende functionaliteiten zoals validatie, optimalisatie, splitsen, verenigen, inhoud extraheren en trimmen van PDF’s. De bibliotheek volgt de PDF 32000-1:2008 (PDF 1.7) standaard, waardoor het compatibel is met een breed scala aan PDF-documenten.
Belangrijke kenmerken
- Validatie: Zorgt ervoor dat PDF-bestanden voldoen aan de PDF 1.7 standaard.
- Optimalisatie: Vermindert bestandsgrootte door redundante bronnen te verwijderen.
- Splitsen en verenigen: Stelt u in staat om meerpagina PDF’s in enkelvoudige PDF’s te splitsen of meerdere PDF’s in één te verenigen.
- Inhoud extraheren: Extrahert afbeeldingen, lettertypen, inhoud en pagina’s uit een PDF.
- Trimmen: Maakt gecensureerde versies van PDF-documenten.
Installatie
Om pdflib te gebruiken, moet u het installeren via Go’s pakketbeheersysteem. U kunt dit doen door de volgende opdracht uit te voeren:
go get github.com/EndFirstCorp/pdflib
Voorbeeldgebruik - Validatie van een PDF
Hier is een eenvoudig voorbeeld dat laat zien hoe u de pdflib-bibliotheek kunt gebruiken om basisbewerkingen met PDF’s uit te voeren:
Om een PDF te valideren tegen de PDF 1.7 standaard, kunt u de volgende code gebruiken:
package main
import ( "fmt" "github.com/EndFirstCorp/pdflib/cmd/pdflib" )
func main() {
// Valideer een PDF-bestand
err := pdflib.Validate("example.pdf")
if err != nil {
fmt.Println("Validatie is mislukt:", err)
} else {
fmt.Println("PDF is geldig.")
}
}
Conclusie
Voor het genereren van PDF’s in Go, hangt de keuze van bibliotheek af van de complexiteit en specifieke eisen van uw project. De volgende aanbevelingen worden gegeven:
- Eenvoudige documenten: Gebruik
gofpdf
ofMaroto
. Deze bibliotheken bieden eenvoudigheid en gemak voor eenvoudige taken. - Complexe ontwerpen met HTML/CSS: Gebruik de
wkhtmltopdf Wrapper
, die gebruikmaakt van wkhtmltopdf om complexe HTML-inhoud en styling te verwerken. - Geavanceerde PDF-verwerking: Kies voor
Unipdf
ofpdfcpu
wanneer uw toepassing geavanceerde functies zoals encryptie, interactieve elementen, gedetailleerde opmaak en uitgebreide manipulatiefunctionaliteiten vereist.
Elke van deze bibliotheken biedt unieke sterktes die voldoen aan verschillende behoeften bij het genereren van PDF’s, waardoor ontwikkelaars een breed scala aan tools hebben om te kiezen op basis van hun specifieke eisen.