Go PDF处理利器: github.com/pdfcpu/pdfcpu 深度指南

在 Go 生态中,处理 PDF 文件一直是一个比较复杂的需求,例如:

PDF 合并与拆分 页面裁剪与旋转 添加水印 提取文本或图片 压缩优化 PDF

pdfcpu 是一个功能强大的 Go 开源库,专门用于 PDF 的解析与处理。它不仅功能全面,而且是纯 Go 实现,无需依赖外部工具(如 Ghostscript),非常适合用于服务器程序或跨平台工具开发。


一、pdfcpu 简介

pdfcpu 是一个完整的 PDF 处理解决方案,支持:

PDF 创建 PDF 修改 PDF 校验 PDF 优化 PDF 加密与解密

它既可以作为 Go 库使用,也可以作为 CLI 工具直接使用。

安装方式:

bash 复制代码
go get github.com/pdfcpu/pdfcpu

或者安装命令行工具:

bash 复制代码
go install github.com/pdfcpu/pdfcpu/cmd/pdfcpu@latest

二、基础使用:加载 PDF

在 Go 中使用 pdfcpu,通常从读取配置开始:

go 复制代码
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 是最常见需求之一。

go 复制代码
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 按页拆分:

go 复制代码
api.SplitFile("input.pdf", "output_dir", 1, conf)

参数说明:

  • 每 1 页拆分一次
  • 输出到指定目录

适用于:

发票拆分 合同分页 批量处理


五、提取页面

提取指定页生成新 PDF:

go 复制代码
api.ExtractPagesFile("input.pdf", "output.pdf", []string{"1-3", "5"}, conf)

表示提取:

第 1 到 3 页 第 5 页


六、添加水印

pdfcpu 支持文本和图片水印。

添加文本水印:

go 复制代码
wm, _ := pdfcpu.ParseTextWatermarkDetails("CONFIDENTIAL", "rot:45", true)

api.AddWatermarksFile("input.pdf", "output.pdf", nil, wm, conf)

效果:

PDF 页面上出现斜着的水印文字。


七、压缩 PDF

用于减小文件体积:

go 复制代码
api.OptimizeFile("input.pdf", "output.pdf", conf)

适用于:

上传优化 存储节省 网络传输


八、加密与解密

加密 PDF:

go 复制代码
conf.UserPW = "1234"
conf.OwnerPW = "admin"

api.EncryptFile("input.pdf", "output.pdf", conf)

解密 PDF:

go 复制代码
conf.UserPW = "1234"

api.DecryptFile("input.pdf", "output.pdf", conf)

适用于:

文档保护 权限控制


九、旋转页面

go 复制代码
api.RotateFile("input.pdf", "output.pdf", 90, []string{"1-"}, conf)

表示:

从第 1 页开始全部旋转 90 度。


十、裁剪页面

go 复制代码
api.CropFile("input.pdf", "output.pdf", []string{"1-"}, "10 10 500 700", conf)

用于裁剪页面区域。


十一、CLI 使用(非常实用)

pdfcpu 也提供命令行工具,非常适合日常使用。

合并 PDF:

bash 复制代码
pdfcpu merge out.pdf a.pdf b.pdf

拆分:

bash 复制代码
pdfcpu split in.pdf outdir

压缩:

bash 复制代码
pdfcpu optimize in.pdf out.pdf

添加水印:

bash 复制代码
pdfcpu watermark add "CONFIDENTIAL" in.pdf out.pdf

非常适合做批处理工具。


十二、实际开发场景

在真实项目中,pdfcpu 常见应用包括:

文档管理系统(PDF 合并/拆分) 在线合同处理 发票系统 电子书处理 PDF 压缩服务 自动水印系统

例如一个简单的 PDF 合并服务:

go 复制代码
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 基本可以一站式解决需求。


相关推荐
bugcome_com2 小时前
【ASP.NET Web Pages】页面布局核心实战:从复用性到安全性,打造一致化网站界面
前端·后端·asp.net
Master_Azur2 小时前
Java面向对象之接口(interface)
后端
召田最帅boy2 小时前
SpringBoot实现AI智能评论审核与自动回复
人工智能·spring boot·后端·架构
江湖十年2 小时前
使用 testing/synctest 测试并发代码
后端·面试·go
苦瓜小生2 小时前
【黑马点评学习笔记 | 实战篇 】| 7-达人探店
redis·笔记·后端·学习
常利兵2 小时前
Spring Boot缓存新玩法:一键切换,租户无忧
spring boot·后端·缓存
想你的液宝2 小时前
Spring Boot @RestControllerAdvice:统一异常处理的利器
后端
大傻^2 小时前
Spring AI Alibaba 企业级实战:从0到1构建智能客服系统
java·人工智能·后端·spring·springaialibaba
短剑重铸之日2 小时前
《ShardingSphere解读》11 解析引擎:SQL 解析流程应该包括哪些核心阶段?(上)
java·后端·spring·shardingsphere·分库分表