在 Go 生态中,处理 PDF 文件一直是一个比较复杂的需求,例如:
PDF 合并与拆分 页面裁剪与旋转 添加水印 提取文本或图片 压缩优化 PDF
pdfcpu 是一个功能强大的 Go 开源库,专门用于 PDF 的解析与处理。它不仅功能全面,而且是纯 Go 实现,无需依赖外部工具(如 Ghostscript),非常适合用于服务器程序或跨平台工具开发。
一、pdfcpu 简介
pdfcpu 是一个完整的 PDF 处理解决方案,支持:
PDF 创建 PDF 修改 PDF 校验 PDF 优化 PDF 加密与解密
它既可以作为 Go 库使用,也可以作为 CLI 工具直接使用。
安装方式:
go get github.com/pdfcpu/pdfcpu
或者安装命令行工具:
go install github.com/pdfcpu/pdfcpu/cmd/pdfcpu@latest
二、基础使用:加载 PDF
在 Go 中使用 pdfcpu,通常从读取配置开始:
package main
import (
"github.com/pdfcpu/pdfcpu/pkg/api"
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
)
func main() {
conf := pdfcpu.NewDefaultConfiguration()
_ = conf
}
大部分 API 都需要传入 conf 配置对象。
三、合并 PDF
合并多个 PDF 是最常见需求之一。
package main
import (
"github.com/pdfcpu/pdfcpu/pkg/api"
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
)
func main() {
conf := pdfcpu.NewDefaultConfiguration()
files := []string{"a.pdf", "b.pdf", "c.pdf"}
api.MergeCreateFile(files, "output.pdf", conf)
}
效果:
多个 PDF 合并为一个文件。
四、拆分 PDF
将一个 PDF 按页拆分:
api.SplitFile("input.pdf", "output_dir", 1, conf)
参数说明:
- 每 1 页拆分一次
- 输出到指定目录
适用于:
发票拆分 合同分页 批量处理
五、提取页面
提取指定页生成新 PDF:
api.ExtractPagesFile("input.pdf", "output.pdf", []string{"1-3", "5"}, conf)
表示提取:
第 1 到 3 页 第 5 页
六、添加水印
pdfcpu 支持文本和图片水印。
添加文本水印:
wm, _ := pdfcpu.ParseTextWatermarkDetails("CONFIDENTIAL", "rot:45", true)
api.AddWatermarksFile("input.pdf", "output.pdf", nil, wm, conf)
效果:
PDF 页面上出现斜着的水印文字。
七、压缩 PDF
用于减小文件体积:
api.OptimizeFile("input.pdf", "output.pdf", conf)
适用于:
上传优化 存储节省 网络传输
八、加密与解密
加密 PDF:
conf.UserPW = "1234"
conf.OwnerPW = "admin"
api.EncryptFile("input.pdf", "output.pdf", conf)
解密 PDF:
conf.UserPW = "1234"
api.DecryptFile("input.pdf", "output.pdf", conf)
适用于:
文档保护 权限控制
九、旋转页面
api.RotateFile("input.pdf", "output.pdf", 90, []string{"1-"}, conf)
表示:
从第 1 页开始全部旋转 90 度。
十、裁剪页面
api.CropFile("input.pdf", "output.pdf", []string{"1-"}, "10 10 500 700", conf)
用于裁剪页面区域。
十一、CLI 使用(非常实用)
pdfcpu 也提供命令行工具,非常适合日常使用。
合并 PDF:
pdfcpu merge out.pdf a.pdf b.pdf
拆分:
pdfcpu split in.pdf outdir
压缩:
pdfcpu optimize in.pdf out.pdf
添加水印:
pdfcpu watermark add "CONFIDENTIAL" in.pdf out.pdf
非常适合做批处理工具。
十二、实际开发场景
在真实项目中,pdfcpu 常见应用包括:
文档管理系统(PDF 合并/拆分) 在线合同处理 发票系统 电子书处理 PDF 压缩服务 自动水印系统
例如一个简单的 PDF 合并服务:
func mergePDF(files []string, output string) error {
conf := pdfcpu.NewDefaultConfiguration()
return api.MergeCreateFile(files, output, conf)
}
十三、优缺点分析
优点:
纯 Go 实现,无依赖 功能全面(几乎覆盖 PDF 常见需求) 支持 CLI + API 跨平台(Windows / macOS / Linux)
缺点:
API 相对复杂 文档不算特别友好 部分高级功能学习成本较高
十四、与其他库对比
常见 PDF 库:
pdfcpu(纯 Go,功能全) unidoc(商业库,功能更强) gofpdf(生成 PDF,不擅长修改)
总结:
- 如果你需要 修改 PDF → pdfcpu
- 如果你需要 生成 PDF → gofpdf
- 如果你需要 企业级功能 → unidoc
总结
pdfcpu 是 Go 生态中最强大的 PDF 处理库之一,适用于各种 PDF 操作场景。
核心能力包括:
PDF 合并与拆分 页面提取与裁剪 水印添加 压缩优化 加密解密
它既可以用于后端服务开发,也可以用于构建 CLI 工具,是 Go 开发者处理 PDF 的首选方案之一。
如果你的项目涉及:
文件处理系统 文档自动化 批量办公工具 PDF 在线服务
那么 pdfcpu 基本可以一站式解决需求。