Introducción
En este post, aprenderás cómo realizar las operaciones de gestión de documentos PDF básicas en Go utilizando Aspose.PDF FOSS: abrir y salvar documentos, crear nuevos PDFs, dividir un documento en archivos por página, fusionar varios PDF, extraer ramas de páginas y leer o escribir metadatos de documento.Todas las Operaciones están disponibles sin dependencias nativas C o C++.
La biblioteca es un módulo de github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, MIT licenciado, y requiere Go 1.24 o más tarde. go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.
Este post cubre la Document, Page, PageRange,y, DocumentInfo Tipos que se forman La superficie de gestión del documento central.
Operaciones Coreas
Abre y ahorra documentos
pdf.Open descarga un PDF del disco y devolve el *Document. OpenWithPassword Y hace lo mismo para los archivos protegidos por contraseña. Document.Save El resultado se vuelve a la El camino de archivo. Document.WriteTo Escribe a un io.Writer para la memoria o red escenarios .
// 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 nuevo documento
pdf.NewDocument Crea un vacío *Document.Uso de AddBlankPageFromFormat para añadir una página blanca con un tamaño de papel estándar. PageFormat El nombre de la constancia (PageFormatA4, PageFormatLetter,y etc.).
doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
doc.Save("new_document.pdf")
Dividir un documento
Document.Split Dividir un PDF en una página individual *Document Valores: Cada uno El documento devuelto contiene exactamente una página y se puede salvar independientemente. Es útil para dividir informes generados por un grupo o separar páginas 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))
Mergir varios PDFs
Document.Append Se une a un segundo *Document en el receptor, apendido Todas las páginas de la fuente.Calcular Append Repetir varios documentos antes de la Un solo Save.El documento de fuente no está modificado.
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ón de una página Range
PageRange Representa una gama inclusiva (1-basada, utilizando From/To Los pasajeros (pass ranges) se Document.Extract para producir una nueva *Document Contiene sólo los seleccionados. Esto es útil para la construcción de exportaciones por capítulo o copias redactadas que Descuida algunas páginas.
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")
Leer y escribir metadatos de documentos
Document.Info Volver a DocumentInfo Estruturas de exposición Los campos informativos del dicionario: Title, Author, Subject, Keywords, Creator, Producer, CreationDate,y, ModDate.Modificar los campos directamente, luego llamar Document.SetInfo para escribir la estructura actualizada de vuelta antes de llamar 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")
Acceso a páginas individuales
Document.Page(n) Recupera a *Page Indice de base 1. Document.PageCount Retorno Las páginas exponen propiedades de geometría para las cuartas de lectura y El tamaño.
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)
Inicio rápido
Instalar el módulo con go get, luego rule el ejemplo completo a continuación.El ejemplo se abre un documento de fuente, extrae sus tres primeras páginas en un nuevo documento, actualiza el documento del mismo. DocumentInfo Los metadatos se muestran y el resultado se salva en disco.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go
Un ejemplo completo que abre un documento, extrae páginas 1 a 3 y salva el resultado con metadatos actualizados:
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 y Licenciación
Aspose.PDF FOSS for Go is released under the MIT license. There are no usage restrictions, No hay tarifas de tiempo de trabajo, ni requisitos de registro. el código fuente está disponible en github.com/aspose-pdf-foss/aficionado a PDF-for-go.
Empezando a
- Guía de instalación
- Guía del Desarrollador
- Artículos de la Base de Conocimientos
- Referencia de API
- Repositorio de GitHub