Introduction

Dalam posting ini, Anda akan belajar bagaimana melakukan operasi manajemen dokumen PDF inti di Go menggunakan Aspose.PDF FOSS: membuka dan menyimpan dokumen, membuat PDF baru, membagi dokumen menjadi file per halaman, menggabungkan beberapa PDF, mengekstrak rentang halaman , dan membaca atau menulis metadata dokumen. Semua operasi tersedia tanpa ketergantungan C asli atau C ++.

Perpustakaan adalah modul Go di github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, MIT berlisensi, dan membutuhkan Go 1.24 atau lebih baru. Instal dengan go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.

Pos ini mencakup: Document, Page, PageRange, dan DocumentInfo jenis yang membentuk permukaan manajemen dokumen inti.


Operasi inti

Membuka dan Menyimpan Dokumen

pdf.Open memuat PDF dari disk dan mengembalikan a *Document. OpenWithPassword melakukan sama untuk file yang dilindungi kata sandi. Document.Save menuliskan hasil kembali ke a jalur file. Document.WriteTo menulis ke sebuah io.Writer untuk in-memory atau jaringan skenario.

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

Membuat Dokumen Baru

pdf.NewDocument menciptakan kosong *Document.Gunakan . AddBlankPageFromFormat untuk menambahkan halaman kosong dengan ukuran kertas standar. PageFormat memberikan konstanta format yang diberi nama (PageFormatA4, PageFormatLetter, dll.).

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)

doc.Save("new_document.pdf")

Memisahkan Dokumen

Document.Split membagi PDF menjadi individu per-halaman *Document nilai masing-masing. Dokumen yang dikembalikan berisi persis satu halaman dan dapat disimpan secara independen. berguna untuk membagi laporan yang dihasilkan secara batch atau memisahkan halaman 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))

Menggabungkan Beberapa PDF

Document.Append Merges kedua *Document ke penerima di tempat, menempelkan Semua halaman dari sumber. Append berulang kali untuk rantai beberapa dokumen sebelum satu kali Save.Dokumen sumber tidak dimodifikasi.

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

Mengekstrak Jangkauan Halaman

PageRange mewakili rentang inklusif (berdasarkan 1, menggunakan From/To Lapangan). Document.Extract untuk menghasilkan baru *Document yang hanya berisi zat-zat terpilih Ini berguna untuk membangun ekspor per bab atau salinan yang diedit yang Menghilangkan halaman tertentu.

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

Membaca dan Menulis Metadata Dokumen

Document.Info mengembalikan a DocumentInfo Struktur yang terpapar Bidang Info Kamus: Title, Author, Subject, Keywords, Creator, Producer, CreationDate, dan ModDate.Mengubah bidang langsung, kemudian memanggil Document.SetInfo untuk menuliskan struktur yang diperbarui kembali sebelum menelepon 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")

Mengakses Halaman-halaman tertentu

Document.Page(n) mengambil sebuah *Page dengan indeks berbasis 1. Document.PageCount pengembalian jumlah total halaman. Halaman mengungkapkan sifat geometri untuk membaca kotak halaman dan ukuran.

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)

Memulai dengan cepat

Instal modul dengan go get, lalu jalankan contoh lengkap di bawah. Contoh terbuka dokumen sumber, mengekstrak tiga halaman pertama ke dalam sebuah dokumen baru, memperbarui DocumentInfo Metadata, dan menyimpan hasil ke disk.

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

Contoh lengkap yang membuka dokumen, mengekstrak halaman 13, dan menyimpan hasil dengan metadata terupdate:

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 dan Lisensi

Aspose.PDF FOSS for Go is released under the MIT license. There are no usage restrictions, tidak ada biaya runtime, dan tidak diperlukan pendaftaran. Kode sumber tersedia di github.com/aspose-pdf-foss/ aspose - pdf-Foss-for-go.


Memulai

Sumber Daya terkait