Einleitung
In diesem Beitrag lernen Sie, wie Sie Kern-PDF-Dokumentenverwaltungs-Operationen in Go mit Aspose.PDF FOSS durchführen: Dokumente öffnen und speichern, neue PDFs erstellen, ein Dokument in ein-seitige Dateien aufteilen, mehrere PDFs zusammenführen, Seitenbereiche extrahieren und Dokument-Metadaten lesen oder schreiben. Alle Operationen sind ohne native C- oder C++-Abhängigkeiten verfügbar.
Die Bibliothek ist ein Go-Modul unter github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, MIT-lizenziert und erfordert Go1.24 oder höher.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goDieser Beitrag behandelt die Typen Document, Page, PageRange und DocumentInfo, die die Kern-Dokumentenverwaltungs-Oberfläche bilden.
Kernoperationen
Öffnen und Speichern von Dokumenten
pdf.Open lädt ein PDF von der Festplatte und gibt ein *Document zurück. OpenWithPassword macht dasselbe für passwortgeschützte Dateien. Document.Save schreibt das Ergebnis zurück zu einem Dateipfad. Document.WriteTo schreibt in ein io.Writer für In-Memory- oder Netzwerkszenarien.
// 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())
Erstellen eines neuen Dokuments
pdf.NewDocument erstellt ein leeres *Document. Verwenden Sie AddBlankPageFromFormat, um eine leere Seite mit einer Standardpapiergröße anzuhängen. PageFormat stellt benannte Formatkonstanten bereit (PageFormatA4, PageFormatLetter, usw.).
doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
doc.Save("new_document.pdf")
Aufteilen eines Dokuments
Document.Split teilt ein PDF in einzelne pro Seite *Document-Werte auf. Jeder zurückgegebene Dokument enthält genau eine Seite und kann unabhängig gespeichert werden. Das ist nützlich, um stapelweise erstellte Berichte zu splitten oder Rechnungsseiten zu trennen.
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))
Zusammenführen mehrerer PDFs
Document.Append fügt ein zweites *Document in den Empfänger in-Place ein und hängt alle Seiten aus der Quelle an. Rufen Sie Append wiederholt auf, um mehrere Dokumente zu einer einzigen Save zu verketten. Das Quelldokument wird nicht verändert.
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")
Extrahieren eines Seitenbereichs
PageRange stellt einen inklusiven Bereich dar (1-basiert, unter Verwendung der Felder From/To). Übergeben Sie Bereiche an Document.Extract, um ein neues *Document zu erzeugen, das nur die ausgewählten Seiten enthält. Das ist nützlich, um pro-Kapitel-Exporte oder redigierte Kopien zu erstellen, die bestimmte Seiten weglassen.
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")
Lesen und Schreiben von Dokument-Metadaten
Document.Info gibt eine DocumentInfo-Struktur zurück, die die Info-Dictionary-Felder Title, Author, Subject, Keywords, Creator, Producer, CreationDate und ModDate offenlegt. Ändern Sie die Felder direkt und rufen Sie dann Document.SetInfo auf, um die aktualisierte Struktur zurückzuschreiben, bevor Sie Save aufrufen.
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")
Zugriff auf einzelne Seiten
Document.Page(n) ruft ein *Page anhand eines 1-basierten Index ab. Document.PageCount gibt die Gesamtzahl der Seiten zurück. Seiten stellen Geometrie-Eigenschaften zum Lesen von Seitenboxen und -größen bereit.
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)
Schnellstart
Installieren Sie das Modul mit go get und führen Sie anschließend das vollständige Beispiel unten aus. Das Beispiel öffnet ein Quelldokument, extrahiert die ersten drei Seiten in ein neues Dokument, aktualisiert die DocumentInfo-Metadatenfelder und speichert das Ergebnis auf die Festplatte.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goEin vollständiges Beispiel, das ein Dokument öffnet, die Seiten 1–3 extrahiert und das Ergebnis mit aktualisierten Metadaten speichert:
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 und Lizenzierung
Aspose.PDF FOSS für Go wird unter der MIT-Lizenz veröffentlicht. Es gibt keine Nutzungsbeschränkungen, keine Laufzeitgebühren und keine Registrierungsanforderungen. Der Quellcode ist verfügbar unter github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.