乐于分享
好东西不私藏

pdfcpu:Go 语言最强大的 PDF 处理工具

pdfcpu:Go 语言最强大的 PDF 处理工具

在日常工作中,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                  # 添加文字水印                  

$ pdfcpu watermark add 'This is a watermark' '' in.pdf out.pdf --mode text                  
# 添加图片水印                  pdfcpu watermark add 'pic.jpg' '' in.pdf out.pdf -m image

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