Introducere

În acest articol, veți învăța cum să efectuați operații de bază pentru gestionarea documentelor PDF în Go folosind Aspose.PDF FOSS: deschiderea și salvarea de documente, crearea unor noi PDF-uri, împărțirea unui document în fișiere pe pagină, fuzionarea mai multor PDF, extragerea intervalelor de pagini și citirea sau scrierea metadatelor documentului. Toate operațiile sunt disponibile fără dependențe native C sau C ++.

Biblioteca este un modul Go la github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, Licenţiat de MIT, necesită Go 1.24 sau mai târziu. Instalaţi cu go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.

Acest post acoperă: Document, Page, PageRange, și DocumentInfo tipuri care formează suprafața de gestionare a documentelor principale.


Operațiuni de bază

Deschiderea și salvarea documentelor

pdf.Open încărcă un PDF de pe disc şi returnă o *Document. OpenWithPassword face asta. Acelaşi lucru este valabil şi pentru fişierele protejate prin parolă. Document.Save scrie rezultatul înapoi la o Calea fişierului. Document.WriteTo scrie către un io.Writer pentru memorie sau rețea scenarii.

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

Crearea unui nou document

pdf.NewDocument creează un gol *Document.- Foloseste-l . AddBlankPageFromFormat să se adauge o pagină goală cu un hârtie standard. PageFormat oferă constante de format numite (PageFormatA4, PageFormatLetter, etc.).

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)

doc.Save("new_document.pdf")

Diviziunea unui document

Document.Split Împărțeste un PDF în pagini individuale. *Document valorile fiecărui element. Documentul returnat conține exact o pagină și poate fi salvat independent. este utilă pentru împărțirea rapoartelor generate în loturi sau separarea paginilor facturilor.

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

Unirea mai multor PDF-uri

Document.Append Se încheie o secundă. *Document în receptorul la locul său, anexând Toate paginile de la sursă. Append în mod repetat pentru a lansa mai multe documente înainte de un singur Save.Documentul sursă nu este 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")

Extractarea unei pagini

PageRange reprezintă o gamă inclusivă (bazată pe 1, folosind From/To Transferarea intervalelor către: Document.Extract pentru a produce un nou *Document care conțin numai cele selectate. Acest lucru este util pentru construirea exporturilor pe capitol sau a copiilor redate care sunt înregistrate la pagina de editare. omite anumite pagini.

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

Citirea și scrierea metadatele documentului

Document.Info returnează un DocumentInfo Expunerea structurală Câmpuri pentru dicționarul informațional: Title, Author, Subject, Keywords, Creator, Producer, CreationDate, și ModDate.Modifică câmpurile direct, apoi sună. Document.SetInfo să scrie structura actualizată înapoi înainte de a suna 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")

Accesarea paginii individuale

Document.Page(n) retrage un *Page cu indicele pe bază de 1. Document.PageCount rambursări Paginile expun proprietăţile geometriei pentru citirea casetelor de pagini şi mărimea.

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)

Început rapid

Instalaţi modulul cu: go get, apoi rulați exemplul complet de mai jos. Exemplul se deschide un document sursă, extrage primele trei pagini într-un nou document, actualizează DocumentInfo metadata câmpuri, și salvează rezultatul pe disc.

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

Un exemplu complet care deschide un document, extrage paginile 13 și salvează rezultatul cu metadate actualizate:

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

Sursă deschisă și licență

Aspose.PDF FOSS for Go is released under the MIT license. There are no usage restrictions, Codul sursă este disponibil la WEB github.com/aspose-pdf-foss/asspose - pdf-Foss-for-go.


Cum să începem?

Resurse conexe