Introduction

En aquest post, aprendràs a realitzar operacions de gestió de documents PDF bàsiques en Go utilitzant Aspose.PDF FOSS: obrir i guardar documents, crear nous PDF, dividir un document en fitxers per pàgina, fusionar múltiples PDFs, extraure rangs de pàgines i llegir o escriure metadades del document. Totes les operació estan disponibles sense cap dependència nativa C o C ++.

La biblioteca és un mòdul Go en github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, Licenciat pel MIT, i requereix Go 1.24 o posterior. Instal·lar amb go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.

Aquest post abasta el Document, Page, PageRange, i DocumentInfo tipus que formen la superfície central de gestió del document.


Operacions bàsiques

Obertura i conservació de documents

pdf.Open Carrega un PDF del disc i torna una *Document. OpenWithPassword fa el mateix per als arxius protegits amb contrasenya. Document.Save escriu el resultat de tornada a un Tràtxa de fitxer. Document.WriteTo escriu a un io.Writer per a memòria o xarxa escenaris.

// 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())

Crear un nou document

pdf.NewDocument crea un buit *Document.Utilitzar. AddBlankPageFromFormat per afegir una pàgina en blanc amb un format de paper estàndard. PageFormat proporciona constants de format nomenades (PageFormatA4, PageFormatLetter, etc.).

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)

doc.Save("new_document.pdf")

Dividir un document

Document.Split divideix un PDF en parts individuals per pàgina. *Document Cada valor. El document retornat conté exactament una pàgina i es pot guardar de forma independent. és útil per a dividir informes generats en batxes o separar pàgines de factura.

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))

Fusionar diversos PDFs

Document.Append fusiona un segon *Document en el receptor al seu lloc, anexant totes les pàgines de la font. Append repetidament a cadena de múltiples documents abans d’haver-se un sol Save.El document font no està modificat.

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")

Extracció d’un rang de pàgines

PageRange representa un rang inclusiu (basat en 1, utilitzant From/To Passar els intervals a: Document.Extract per produir un nou *Document contenent només els productes seleccionats. És útil per a construir exportacions per capítol o còpies redactades que es poden fer en un cap de pàgina. ometre certes pàgines.

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")

Llegir i escriure metadades de documents

Document.Info retorna un DocumentInfo Exposició de l’estructura Camps de diccionari d’informació: Title, Author, Subject, Keywords, Creator, Producer, CreationDate, i ModDate.Modifica els camps directament, després trucar. Document.SetInfo per escriure l’estructura actualitzada abans de trucar Save.

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")

Accedir a pàgines individuals

Document.Page(n) recupera un *Page per un índex basat en 1. Document.PageCount devolucions Les pàgines exposen propietats geomètriques per a la lectura de caixes de pàgina i mida.

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)

Inici ràpid

Instal·lar el mòdul amb: go get, després executar l’exemple complet a continuació. L’especial s’obre un document font, extraeix les seves tres primeres pàgines en un nou document, actualitza el DocumentInfo metadades i guarda el resultat al disc.

go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go

Un exemple complet que obre un document, extraeix pàgines 13, i guarda el resultat amb metadades actualitzades:

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 i llicència

Aspose.PDF FOSS for Go is released under the MIT license. There are no usage restrictions, No hi ha tarifes d’execució, ni requeriments de registre. El codi font està disponible a: github.com/aspose-pdf-foss/asspose - pdf-Foss-for-go.


Com començar a treballar

Recursos relacionats