Úvod

V tomto příspěvku se naučíte, jak provádět základní operace správy PDF dokumentů v Go pomocí Aspose.PDF FOSS: otevírání a ukládání dokumentů, vytváření nových PDF, rozdělení dokumentu na soubory po jedné stránce, sloučení více PDF, extrahování rozsahů stránek a čtení nebo zápis metadat dokumentu. Všechny operace jsou k dispozici bez jakýchkoli nativních závislostí na C nebo C++.

Knihovna je Go modul na github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, licencována pod licencí MIT a vyžaduje Go 1.24 nebo novější.

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

Tento příspěvek pokrývá typy Document, Page, PageRange a DocumentInfo, které tvoří základní rozhraní správy dokumentů.


Základní operace

Otevírání a ukládání dokumentů

pdf.Open načte PDF z disku a vrátí *Document. OpenWithPassword dělá to samé pro soubory chráněné heslem. Document.Save zapíše výsledek zpět na cestu souboru. Document.WriteTo zapisuje do io.Writer pro scénáře v paměti nebo v síti.

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

Vytvoření nového dokumentu

pdf.NewDocument vytvoří prázdný *Document. Použijte AddBlankPageFromFormat k přidání prázdné stránky se standardní velikostí papíru. PageFormat poskytuje pojmenované konstanty formátu (PageFormatA4, PageFormatLetter, atd.).

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)

doc.Save("new_document.pdf")

Rozdělení dokumentu

Document.Split rozdělí PDF na jednotlivé *Document hodnoty po jedné stránce. Každý vrácený dokument obsahuje přesně jednu stránku a lze jej uložit samostatně. To je užitečné pro rozdělení hromadně generovaných zpráv nebo oddělení stránek faktur.

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

Sloučení více PDF

Document.Append sloučí druhý *Document do přijímače přímo v místě, přidáním všech stránek ze zdroje. Voláním Append opakovaně můžete řetězit více dokumentů před jedním Save. Zdrojový dokument není upraven.

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

Extrahování rozsahu stránek

PageRange představuje inkluzivní rozsah (číslovaný od 1, s použitím polí From/To). Předávejte rozsahy do Document.Extract, aby se vytvořil nový *Document, který obsahuje pouze vybrané stránky. To je užitečné při vytváření exportů po kapitolách nebo redigovaných kopií, které vynechávají určité stránky.

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

Čtení a zápis metadat dokumentu

Document.Info vrací strukturu DocumentInfo, která odhaluje pole slovníku Info: Title, Author, Subject, Keywords, Creator, Producer, CreationDate a ModDate. Modifikujte pole přímo, poté zavolejte Document.SetInfo, abyste zapsali aktualizovanou strukturu zpět, předtím než zavoláte 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")

Přístup k jednotlivým stránkám

Document.Page(n) získá *Page podle indexu počínaje od 1. Document.PageCount vrací celkový počet stránek. Stránky poskytují geometrické vlastnosti pro čtení ohraničení stránky a její velikosti.

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)

Rychlý start

Nainstalujte modul pomocí go get a poté spusťte kompletní příklad níže. Příklad otevře zdrojový dokument, extrahuje jeho první tři stránky do nového dokumentu, aktualizuje pole metadata DocumentInfo a výsledek uloží na disk.

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

Úplný příklad, který otevře dokument, extrahuje stránky 1–3 a uloží výsledek s aktualizovanými metadaty:

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 a licencování

Aspose.PDF FOSS pro Go je vydán pod licencí MIT. Neexistují žádná omezení používání, žádné poplatky za runtime a žádné požadavky na registraci. Zdrojový kód je k dispozici na github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.


Začínáme

Související zdroje