简介
在本文中,您将学习如何使用 Aspose.PDF FOSS 在 Go 中执行核心 PDF 文档管理操作:打开和保存文档、创建新 PDF、将文档拆分为每页文件、合并多个 PDF、提取页面范围,以及读取或写入文档元数据。所有操作均不需要任何原生 C 或 C++ 依赖。
该库是位于 github.com/aspose-pdf-foss/aspose-pdf-foss-for-go 的 Go 模块,采用 MIT 许可证,并且需要 Go 1.24 或更高版本。
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go本文涵盖形成核心文档管理界面的 Document、Page、PageRange 和 DocumentInfo 类型。
核心操作
打开和保存文档
pdf.Open 从磁盘加载 PDF 并返回一个 *Document。OpenWithPassword 对受密码保护的文件执行相同操作。Document.Save 将结果写回文件路径。Document.WriteTo 将其写入 io.Writer,用于内存或网络场景。
// 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())
创建新文档
pdf.NewDocument 创建一个空的 *Document。使用 AddBlankPageFromFormat 添加一页标准纸张尺寸的空白页。PageFormat 提供命名的格式常量(PageFormatA4、PageFormatLetter 等)。
doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
doc.Save("new_document.pdf")
拆分文档
Document.Split 将 PDF 拆分为单独的每页 *Document 值。每个返回的文档恰好包含一页,并且可以独立保存。这对于拆分批量生成的报告或分离发票页面非常有用。
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))
合并多个 PDF
Document.Append 将第二个 *Document 合并到接收器中,原位追加来源的所有页面。重复调用 Append 可在单个 Save 之前串联多个文档。源文档不会被修改。
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")
提取页面范围
PageRange 表示一个包含的范围(基于 1,使用 From/To 字段)。将范围传递给 Document.Extract 以生成一个仅包含所选页面的新 *Document。这对于构建每章节导出或省略特定页面的编辑副本非常有用。
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")
读取和写入文档元数据
Document.Info 返回一个 DocumentInfo 结构体,公开 Info 字典字段:Title、Author、Subject、Keywords、Creator、Producer、CreationDate 和 ModDate。直接修改这些字段,然后在调用 Save 之前调用 Document.SetInfo 将更新后的结构体写回。
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")
访问单个页面
Document.Page(n) 通过基于 1 的索引检索一个 *Page。Document.PageCount 返回页面的总数。页面公开几何属性,以读取页面框和尺寸。
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)
快速入门
使用 go get 安装模块,然后运行下面的完整示例。示例打开一个源文档,将其前三页提取到一个新文档,更新 DocumentInfo 元数据字段,并将结果保存到磁盘。
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go一个完整的示例,打开文档,提取第1–3页,并使用更新的元数据保存结果:
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())
}
开源与许可
Aspose.PDF FOSS for Go 在 MIT 许可证下发布。没有使用限制、运行时费用,也无需注册。源代码可在 github.com/aspose-pdf-foss/aspose-pdf-foss-for-go 获取。