Introduktion

I det här inlägget kommer du att lära dig hur du utför grundläggande PDF-dokumenthanteringsoperationer i Go med Aspose.PDF FOSS: öppna och spara dokument, skapa nya PDF-filer, dela ett dokument i enskilda sidfiler, slå ihop flera PDF-filer, extrahera sidintervall samt läsa eller skriva dokumentmetadata. Alla operationer är tillgängliga utan några inhemska C- eller C++-beroenden.

Biblioteket är en Go-modul på github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, licensierat under MIT och kräver Go 1.24 eller senare.

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

Detta inlägg täcker typerna Document, Page, PageRange och DocumentInfo som utgör den grundläggande dokumenthanteringsytan.


Kärnoperationer

Öppna och spara dokument

pdf.Open läser in en PDF från disk och returnerar en *Document. OpenWithPassword gör samma sak för lösenordsskyddade filer. Document.Save skriver resultatet tillbaka till en filsökväg. Document.WriteTo skriver till en io.Writer för minnes- eller nätverksscenarier.

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

Skapa ett nytt dokument

pdf.NewDocument skapar ett tomt *Document. Använd AddBlankPageFromFormat för att lägga till en tom sida med en standardpappersstorlek. PageFormat tillhandahåller namngivna formatkonstanter (PageFormatA4, PageFormatLetter, osv.).

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)

doc.Save("new_document.pdf")

Dela ett dokument

Document.Split delar en PDF i individuella per-sida *Document-värden. Varje returnerat dokument innehåller exakt en sida och kan sparas oberoende. Detta är användbart för att dela batchgenererade rapporter eller separera fakturasidor.

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

Sammanfoga flera PDF-filer

Document.Append sammanslår en andra *Document i mottagaren på plats, genom att lägga till alla sidor från källan. Anropa Append upprepade gånger för att kedja flera dokument före en enda Save. Källdokumentet ändras inte.

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

Extrahera ett sidintervall

PageRange representerar ett inklusivt intervall (1-baserat, med From/To fält). Skicka intervall till Document.Extract för att skapa ett nytt *Document som bara innehåller de valda sidorna. Detta är användbart för att bygga per-kapitel-exporter eller redigerade kopior som utelämnar vissa sidor.

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

Läsa och skriva dokumentmetadata

Document.Info returnerar en DocumentInfo struktur som exponerar Info-ordbokfält: Title, Author, Subject, Keywords, Creator, Producer, CreationDate och ModDate. Modifiera fälten direkt, anropa sedan Document.SetInfo för att skriva tillbaka den uppdaterade strukturen innan du anropar 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")

Åtkomst till enskilda sidor

Document.Page(n) hämtar en *Page med 1-baserat index. Document.PageCount returnerar det totala antalet sidor. Sidor exponerar geometriegenskaper för att läsa sidboxar och storlek.

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)

Snabbstart

Installera modulen med go get, kör sedan det kompletta exemplet nedan. Exemplet öppnar ett källdokument, extraherar dess första tre sidor till ett nytt dokument, uppdaterar DocumentInfo metadatafält och sparar resultatet till disk.

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

Ett komplett exempel som öppnar ett dokument, extraherar sidorna 1–3 och sparar resultatet med uppdaterad metadata:

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

Öppen källkod och licensiering

Aspose.PDF FOSS för Go är släppt under MIT-licensen. Det finns inga användningsrestriktioner, inga körningsavgifter och inga registreringskrav. Källkoden finns tillgänglig på github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.


Komma igång

Relaterade resurser