在日常工作中,PDF 是我们最常接触的文件格式之一。无论是合同、报告、发票还是文档,PDF 无处不在。然而,处理 PDF 文件往往让人头疼——合并、分割、加密、加水印、提取内容,这些看似简单的操作,却需要安装各种臃肿的软件。
如果你是一名 Go 开发者,或者你需要一个轻量级、可编程的 PDF 处理工具,那么 pdfcpu 绝对是你的不二之选。这个拥有 8700+ stars 的开源项目,正在重新定义 PDF 处理的方式。
一、pdfcpu 是什么?
pdfcpu 是一个用 Go 语言编写的 PDF 处理库和命令行工具。它提供两种使用方式:
Go API:在 Go 代码中直接调用,集成到你的应用中
CLI 工具:独立的命令行程序,支持各种 PDF 操作
二、为什么选择 pdfcpu?
1. 功能全面,覆盖 PDF 处理的方方面面
pdfcpu 的功能列表堪称"PDF 处理百科全书":
核心操作:
✅ 验证:检查 PDF 文件是否符合规范
✅ 优化:压缩 PDF 文件大小
✅ 分割:按页码、书签分割 PDF
✅ 合并:多个 PDF 合并为一个
✅ 旋转:旋转 PDF 页面
✅ 裁剪:裁剪 PDF 页面边距
内容操作:
✅ 提取:提取文本、图片、字体
✅ 水印:添加文字或图片水印
✅ 印章:添加印章效果
✅ 书签:添加、修改、删除书签
✅ 注释:管理 PDF 注释
生成操作:
✅ 创建:从图片、文本创建 PDF
✅ N-up:多页合为一页(如 2-up、4-up)
✅ Grid:网格布局生成
✅ Booklet:小册子生成
✅ 表格:生成带表格的 PDF
安全操作:
✅ 加密:设置密码保护
✅ 解密:移除密码保护
✅ 权限:设置打印、复制等权限
✅ 签名:数字签名(开发中)
高级功能:
✅ 表单:创建和填写 PDF 表单
✅ 字体:支持中文、日文、韩文字体
✅ 附件:嵌入和提取文件附件
✅ 元数据:读取和修改 PDF 元数据
2. 纯 Go 实现,零依赖
pdfcpu 完全用 Go 语言编写,不依赖任何外部 C 库。这意味着:
跨平台:Linux、macOS、Windows、ARM 全支持
部署简单:单一二进制文件,无需安装依赖
性能优秀:Go 的并发特性让处理速度飞快
安全可靠:代码可控,无第三方漏洞风险
3. CLI + API 双模式
pdfcpu 提供两种使用方式,满足不同需求:
CLI 模式:适合快速处理、脚本自动化
Bash # 安装 go install github.com/pdfcpu/pdfcpu/cmd/pdfcpu@latest # 合并 PDF pdfcpu merge output.pdf file1.pdf file2.pdf file3.pdf # 分割 PDF pdfcpu split input.pdf output_dir # 添加水印 pdfcpu watermark add 'This is a watermark' '' in.pdf out.pdf --mode text# 加密 PDF pdfcpu encrypt test.pdf --opw opw |
API 模式:适合集成到应用中
Go // 验证 PDF err := pdfcpu.ValidateFile("input.pdf", nil) // 合并 PDF err := pdfcpu.MergeCreateFile([]string{"file1.pdf", "file2.pdf"}, "output.pdf", nil) // 添加水印 err := pdfcpu.AddWatermarksFile("input.pdf", "output.pdf", nil, "Confidential", nil) |
三、核心功能详解
1. 验证与优化
PDF 文件可能存在各种问题:损坏的交叉引用表、缺失的对象、不符合规范的格式。pdfcpu 的验证功能可以检测这些问题:
Bash # 验证 PDF pdfcpu validate input.pdf |
优化功能可以减小 PDF 文件大小:
Bash # 优化 PDF pdfcpu optimize input.pdf output.pdf |
优化效果通常能达到 20%-50% 的文件大小缩减。
2. 分割与合并
这是最常用的 PDF 操作。pdfcpu 提供了灵活的分割选项:
Bash # 按页码分割 pdfcpu split -m page test.pdf out 2 4 10# 按书签分割 pdfcpu split test.pdf out -m bookmark# 合并多个 PDF pdfcpu merge output.pdf file1.pdf file2.pdf file3.pdf |
3. 水印与印章
pdfcpu 支持添加文字和图片水印,位置、大小、透明度都可自定义:
Bash # 添加文字水印 |
4. 加密与权限
pdfcpu 支持标准的 PDF 加密算法:
Bash # 加密(设置所有者和用户密码) pdfcpu encrypt test.pdf --upw upw --opw opw# 解密 pdfcpu encrypt test.pdf --opw opw --upw upw# 设置权限 pdfcpu permissions set --opw opw --perm print input.pdf |
5. 提取内容
从 PDF 中提取各种资源:
Bash # 提取文本 pdfcpu extract text input.pdf output_dir # 提取图片 pdfcpu extract image input.pdf output_dir # 提取字体 pdfcpu extract font input.pdf output_dir # 提取元数据 pdfcpu extract metadata input.pdf output_dir |
6. 生成 PDF
pdfcpu 不仅能处理现有 PDF,还能从零创建:
Bash # 从图片创建 PDF pdfcpu create output.pdf image1.jpg image2.jpg image3.png |
四、与其他工具的对比
工具 | 语言 | 依赖 | 性能 | 功能覆盖 | 易用性 |
pdfcpu | Go | 无 | 优秀 | 全面 | 高 |
pdftk | Java | 有 | 中等 | 中等 | 高 |
Ghostscript | C | 有 | 优秀 | 全面 | 低 |
pdfjam | Shell | 有 | 中等 | 有限 | 中 |
pdfbox | Java | 有 | 中等 | 全面 | 中 |
pdfcpu 的优势在于:
纯 Go 实现,部署零依赖
CLI + API 双模式,灵活性高
文档完善,学习曲线平缓
社区活跃,持续迭代
五、中文支持
pdfcpu 对中文支持良好:
支持 CJK 字体(中文、日文、韩文)
支持中文水印和文本
正确处理中文文件名
示例:
Bash # 添加中文水印 pdfcpu watermark add '机密文件' '' in.pdf out.pdf --mode text |
结语
在 PDF 处理领域,pdfcpu 是 Go 生态中的一颗明珠。它不是什么新项目,但正是这份"老",让它成为最成熟、最可靠的 PDF 处理工具。
如果你需要:
快速处理 PDF 文件(CLI)
将 PDF 处理集成到应用中(API)
批量自动化 PDF 操作
在服务器端处理 PDF
那么 pdfcpu 绝对值得一试。它不需要你安装庞大的 Adobe Acrobat,也不需要复杂的 Java 环境。一个命令,一行代码,就能完成所有 PDF 操作。
项目链接:
GitHub:https://github.com/pdfcpu/pdfcpu
官网:https://pdfcpu.io
文档:https://pdfcpu.io/getting_started/getting_started
夜雨聆风