Introdução

Neste post, você aprenderá como executar operações básicas de gerenciamento de documentos PDF no Go usando Aspose.PDF FOSS: abertura e salvação de documento, criação de novos PDFs, divisão de um documento em arquivos por página, fusão dos vários PDF, extração das faixas da página e leitura ou escrita de metadados do documento. Todas as operações estão disponíveis sem qualquer dependência nativa C ou C ++.

A biblioteca é um módulo Go em: github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, Licenciado pelo MIT, e requer Go 1.24 ou posterior. Instalar com o software de Microsoft Windows XP. go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.

Esta rubrica abrange os seguintes domínios: Document, Page, PageRange, e DocumentInfo tipos que formam A superfície central de gestão dos documentos.


Operações essenciais

Abrir e guardar documentos

pdf.Open carrega um PDF do disco e retorna uma *Document. OpenWithPassword não tem O mesmo se aplica aos ficheiros protegidos por senha. Document.Save escreve o resultado de volta para um Trilha de ficheiro. Document.WriteTo escreve a um io.Writer para memória ou rede cenários.

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

Criar um novo documento

pdf.NewDocument cria um vazio *Document.- Usar . AddBlankPageFromFormat Para anexar uma página em branco com um tamanho de papel padrão. PageFormat fornece constantes de formato nomeadas (PageFormatA4, PageFormatLetter, etc.).

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)

doc.Save("new_document.pdf")

Dividir um documento

Document.Split Divide um PDF em páginas individuais por página. *Document Cada um dos valores. O documento devolvido contém exatamente uma página e pode ser salvo de forma independente. É útil para a divisão de relatórios gerados por lotes ou para 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))

Reunião de vários PDFs

Document.Append “Fusão” um segundo. *Document na posição do receptor, anexando-se o Todas as páginas da fonte. Append repetidamente para encadear vários documentos antes de um único Save.O documento de origem não é 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")

Extrair um intervalo de páginas

PageRange representa um intervalo inclusivo (baseado em 1, utilizando From/To Passar os intervalos para: Document.Extract para produzir um novo *Document contendo apenas os produtos seleccionados: Este método é útil para a construção de exportações por capítulo ou cópias redigidas que não são necessárias. Omitir certas 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")

Leitura e escrita de metadados do documento

Document.Info retorna um DocumentInfo Exposição estrutural Campo de dicionário: Title, Author, Subject, Keywords, Creator, Producer, CreationDate, e ModDate.Modificar os campos diretamente, em seguida, chamar Document.SetInfo para escrever a estrutura atualizada antes de chamar 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")

Acesso a páginas individuais

Document.Page(n) recupera um *Page por um índice baseado em 1. Document.PageCount Renda de rendimentos A página expõe as propriedades da geometria para a leitura de caixas de páginas e tamanho.

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)

Começo rápido

Instalar o módulo com: go get, em seguida, executar o exemplo completo abaixo. O exemplo abre O documento de origem, extrai as suas primeiras três páginas num novo documento, actualiza o texto e a documentação. DocumentInfo campos de metadados, e salva o resultado no disco.

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

Um exemplo completo que abre um documento, extrai páginas 13 e salva o resultado com metadados atualizados:

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

Fonte aberta e licença

Aspose.PDF FOSS for Go is released under the MIT license. There are no usage restrictions, O código-fonte está disponível em: http://www.europa.eu/enhancement_sourcecode/ github.com/aspose-pdf-foss/asspose - pdf-Foss-for-go.


Começar a Fazer

Recursos relacionados