Introductie
In dit bericht leer je hoe je kernbewerkingen voor PDF-documenten uitvoert in Go met behulp van Aspose.PDF FOSS: documenten openen en opslaan, nieuwe PDF’s maken, een document splitsen in bestanden per pagina, meerdere PDF’s samenvoegen, paginabereiken extraheren, en documentmetadata lezen of schrijven. Alle bewerkingen zijn beschikbaar zonder enige native C- of C++-afhankelijkheden.
De bibliotheek is een Go-module op github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, MIT-licentie, en vereist Go 1.24 of hoger.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goDit bericht behandelt de Document, Page, PageRange en DocumentInfo types die het kerndocumentbeheeroppervlak vormen.
Kernbewerkingen
Documenten openen en opslaan
pdf.Open laadt een PDF van schijf en retourneert een *Document. OpenWithPassword doet hetzelfde voor met wachtwoord beveiligde bestanden. Document.Save schrijft het resultaat terug naar een bestandspad. Document.WriteTo schrijft naar een io.Writer voor in-memory of netwerkscenario’s.
// Open a standard PDF
doc, err := pdf.Open("input.pdf")
if err != nil {
panic(err)
}
// Open an encrypted PDF
protected, err := pdf.OpenWithPassword("locked.pdf", "userpassword")
if err != nil {
panic(err)
}
// Save to a new path
err = doc.Save("output.pdf")
fmt.Println(protected.PageCount())
Een nieuw document maken
pdf.NewDocument maakt een lege *Document. Gebruik AddBlankPageFromFormat om een lege pagina toe te voegen met een standaard papierformaat. PageFormat biedt benoemde formaatconstanten (PageFormatA4, PageFormatLetter, enz.).
doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
doc.Save("new_document.pdf")
Een document splitsen
Document.Split verdeelt een PDF in individuele per-pagina *Document-waarden. Elk geretourneerd document bevat precies één pagina en kan onafhankelijk worden opgeslagen. Dit is handig voor het splitsen van batch-gegenereerde rapporten of het scheiden van factuurpagina’s.
doc, _ := pdf.Open("multi_page.pdf")
pages, err := doc.Split()
if err != nil {
panic(err)
}
for i, p := range pages {
filename := fmt.Sprintf("page_%03d.pdf", i+1)
if err := p.Save(filename); err != nil {
fmt.Printf("Failed to save page %d: %v\n", i+1, err)
}
}
fmt.Printf("Split into %d pages\n", len(pages))
Meerdere PDF’s samenvoegen
Document.Append voegt een tweede *Document in-place samen met de ontvanger, waarbij alle pagina’s van de bron worden toegevoegd. Roep Append herhaaldelijk aan om meerdere documenten te koppelen vóór één enkele Save. Het brondocument wordt niet gewijzigd.
base, _ := pdf.Open("report_intro.pdf")
section1, _ := pdf.Open("section1.pdf")
section2, _ := pdf.Open("section2.pdf")
appendix, _ := pdf.Open("appendix.pdf")
base.Append(section1)
base.Append(section2)
base.Append(appendix)
base.Save("complete_report.pdf")
Een paginabereik extraheren
PageRange vertegenwoordigt een inclusieve reeks (1-gebaseerd, met gebruik van de velden From/To). Geef reeksen door aan Document.Extract om een nieuw *Document te maken dat alleen de geselecteerde pagina’s bevat. Dit is handig voor het maken van per-hoofdstuk-exports of geredigeerde exemplaren die bepaalde pagina’s weglaten.
doc, _ := pdf.Open("long_report.pdf")
// Extract pages 3 through 7
subset, err := doc.Extract(pdf.PageRange{From: 3, To: 7})
if err != nil {
panic(err)
}
subset.Save("pages_3_to_7.pdf")
Lezen en schrijven van documentmetadata
Document.Info retourneert een DocumentInfo struct die de Info-woordenboekvelden blootlegt: Title, Author, Subject, Keywords, Creator, Producer, CreationDate en ModDate. Wijzig de velden direct, roep vervolgens Document.SetInfo aan om de bijgewerkte struct terug te schrijven voordat je Save aanroept.
doc, _ := pdf.Open("report.pdf")
info, _ := doc.Info()
// Read current values
fmt.Printf("Title: %s\nAuthor: %s\n", info.Title, info.Author)
// Update fields
info.Title = "Annual Report 2026"
info.Author = "Finance Team"
info.Keywords = "annual, report, finance, 2026"
doc.SetInfo(info)
doc.Save("report_updated.pdf")
Toegang tot individuele pagina’s
Document.Page(n) haalt een *Page op via een 1-gebaseerde index. Document.PageCount geeft het totale aantal pagina’s terug. Pagina’s bieden geometrische eigenschappen om paginavakken en afmetingen te lezen.
doc, _ := pdf.Open("document.pdf")
fmt.Printf("Page count: %d\n", doc.PageCount())
page, _ := doc.Page(1)
size, err := page.Size()
if err != nil {
panic(err)
}
fmt.Printf("Page 1 size: %.0f x %.0f pt\n", size.Width, size.Height)
Snelstart
Installeer de module met go get, en voer vervolgens het volledige voorbeeld hieronder uit. Het voorbeeld opent een brondocument, extraheert de eerste drie pagina’s naar een nieuw document, werkt de DocumentInfo metadata-velden bij, en slaat het resultaat op schijf.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goEen volledig voorbeeld dat een document opent, pagina’s 1–3 extraheert en het resultaat opslaat met bijgewerkte metadata:
package main
import (
"fmt"
pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)
func main() {
// Open source document
src, err := pdf.Open("source.pdf")
if err != nil {
panic(err)
}
// Extract pages 1-3
subset, err := src.Extract(pdf.PageRange{From: 1, To: 3})
if err != nil {
panic(err)
}
// Update metadata
info, _ := subset.Info()
info.Title = "Pages 1-3 Extract"
info.Author = "Document Pipeline"
subset.SetInfo(info)
if err := subset.Save("extract_pages_1_3.pdf"); err != nil {
panic(err)
}
fmt.Printf("Saved %d pages\n", subset.PageCount())
}
Open source en licensering
Aspose.PDF FOSS voor Go wordt uitgebracht onder de MIT-licentie. Er zijn geen gebruiksbeperkingen, geen runtime kosten, en geen registratievereisten. De broncode is beschikbaar op github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.