介绍

Aspose.PDF FOSS for Go 是一个纯 Go 库,用于处理 PDF 文档。它提供了一个 API,可用于从头创建新 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

本文涵盖核心功能:文档操作、安全性、AcroForm 填充、表格布局、书签和批注。


关键特性

文档拆分与合并

The Document 类型提供 Split(),用于将 PDF 拆分为每页文档,并提供 Append(),用于就地合并外部文档。PageRange 让您可以针对页面子集进行选择性提取或导出。Metadata 公开文档信息字段,以读取和写入作者、标题和创建日期。

doc, _ := pdf.Open("report.pdf")

// Split into per-page PDFs
pages, _ := doc.Split()
for i, p := range pages {
	p.Save(fmt.Sprintf("page%03d.pdf", i+1))
}

// Merge a second PDF into doc
doc2, _ := pdf.Open("appendix.pdf")
doc.Append(doc2)
doc.Save("combined.pdf")

密码加密与权限

EncryptionOptions 在一次调用 SetEncryption 时配置用户密码、所有者密码和允许的操作。支持的算法有 AES-128(默认)、AES-256(ISO 32000-2,生成 PDF 2.0 输出)以及用于向后兼容的 RC4-128。Permissions 让您可以独立地允许或拒绝各个操作——打印、复制、可访问性。OpenWithPassword 打开加密文件;RemoveEncryption 在保存为明文副本前去除密码。

doc, _ := pdf.Open("contract.pdf")
doc.SetEncryption(pdf.EncryptionOptions{
	UserPassword:  "userpass",
	OwnerPassword: "ownerpass",
	Permissions:   &pdf.Permissions{AllowPrint: true, AllowCopy: false},
})
doc.Save("contract_protected.pdf")

AcroForm 字段处理

Form 提供对文档中所有 AcroForm 字段的访问。Field 是基础接口;类型断言可访问 TextBoxField、CheckboxField、RadioButtonField、ComboBoxField、ListBoxField 和 ButtonField。通过字段名设置字段值——查看器在保存时会通过 /NeedAppearances=true 自动重新生成外观。

doc, _ := pdf.Open("application.pdf")
text := doc.Form().Field("full_name").(*pdf.TextBoxField)
text.SetValue("Jane Doe")

check := doc.Form().Field("agree_terms").(*pdf.CheckboxField)
check.SetChecked(true)

combo := doc.Form().Field("country").(*pdf.ComboBoxField)
combo.SetSelected(0)

doc.Save("application_filled.pdf")

表格布局

Table、Row 和 Cell 在 PDF 页面上构建结构化网格布局。BorderInfo 配置每个单元格或整张表格的边框样式。MarginInfo 设置单元格内边距。TextStyle 通过 HAlign 和 VAlign 控制字体、大小、颜色和对齐方式。Image 可以与文本一起放置在单元格内部。

doc, _ := pdf.Open("invoice_template.pdf")
tbl := pdf.NewTable()
tbl.SetColumnWidths([]float64{120, 80, 80})

row := tbl.AddRow()
row.AddCell("Item")
row.AddCell("Qty")
row.AddCell("Price")

page, _ := doc.Page(1)
page.AddTable(tbl, pdf.Rectangle{LLX: 72, LLY: 100, URX: 540, URY: 700})
doc.Save("invoice.pdf")

书签与导航

OutlineItemCollection 表示单个书签条目。使用 SetTitle、SetBold、SetColor 和 SetDestination 来配置它。DestinationXYZ 定位到精确的页面坐标;DestinationFit 使页面在查看器中适配。NamedDestinations 注册可通过名称访问的可重用跳转目标。

doc, _ := pdf.Open("manual.pdf")
page, _ := doc.Page(1)

chapter := pdf.NewOutlineItemCollection(doc)
chapter.SetTitle("Chapter 1: Getting Started")
chapter.SetBold(true)
chapter.SetDestination(pdf.NewDestinationXYZ(page, 0, 800, 1.0))
doc.Outlines().Add(chapter)

section := pdf.NewOutlineItemCollection(doc)
section.SetTitle("Installation")
section.SetDestination(pdf.NewDestinationFit(page))
chapter.Add(section)

doc.Save("manual_with_bookmarks.pdf")

批注和印章

AnnotationCollection 包含页面上的所有批注。TextAnnotation 添加便签评论。StampAnnotation 使用预定义的 StampName 值之一放置批准或信息印章。HighlightAnnotation 标记文本区域。RedactAnnotation 永久删除敏感内容。LinkAnnotation 将 URI 或页面目标动作附加到可点击区域。

doc, _ := pdf.Open("draft.pdf")
page, _ := doc.Page(1)

stamp := pdf.NewStampAnnotation(page, pdf.Rectangle{LLX: 100, LLY: 700, URX: 250, URY: 750}, pdf.StampNameApproved)
page.Annotations().Add(stamp)

doc.Save("draft_approved.pdf")

快速入门

安装模块:

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

一个最小工作流 — 打开 PDF,使用密码加密,然后保存:

package main

import (
	"fmt"
	pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)

func main() {
	doc, err := pdf.Open("input.pdf")
	if err != nil {
		panic(err)
	}

	doc.SetEncryption(pdf.EncryptionOptions{
		UserPassword:  "secret",
		OwnerPassword: "ownerSecret",
		Permissions:   &pdf.Permissions{AllowPrint: true},
	})

	if err := doc.Save("output_encrypted.pdf"); err != nil {
		panic(err)
	}
	fmt.Println("Saved output_encrypted.pdf")
}

开源与许可

Aspose.PDF FOSS for Go 在 MIT 许可证下发布。没有使用限制、运行时费用,也无需注册。源代码可在 github.com/aspose-pdf-foss/aspose-pdf-foss-for-go 获取。

在 MIT 许可证条款下允许商业使用。如果您的项目需要企业级支持、扩展的格式覆盖或云集成,Aspose.PDF — Enterprise Product Family 是单独的商业产品。


入门

相关资源