pdfcpu 0.16.4 是命令行的 PDF 处理工具,压缩包 7086950 字节,解开就是单个 17760256 字节的 exe,用 Go 写的,不依赖运行库。
它要解决的是:手上十几个 PDF 要合成一个,或者看一眼某份文件到底多少页、有没有加密,装个图形工具太重,用在线服务又得把文件传上去。
这次拿三个页数不同的文件做合并,量了耗时,也遇到了自己造的测试文件被它判定不规范的情况。
一个 17760256 字节的 exe
Go 编译,静态链接,双击或用命令行都行。
| 项 | 值 | 说明 |
|---|---|---|
| 压缩包 | 7086950 字节 | pdfcpu_0.16.4_Windows_x86_64.zip |
| pdfcpu.exe | 17760256 字节 | 单文件,放 PATH 里即可 |
| 版本 | 0.16.4 | commit 0f5ac76d |
| 测试素材 | 3 个文件 | 分别 10 页、25 页、60 页 |
1.7 万字节换一整套 PDF 操作
合并只是其中一条子命令,同一个 exe 还能拆分、加密、解密、优化、加页码、转图片。装一个顶几个工具用。
没有图形界面是刻意的
它只出命令行输出,所以能进批处理、能挂到脚本里定时跑。要拖拽操作的话这个工具不合适。
三个文件合并 95 页,207 毫秒
10 页加 25 页加 60 页,合并后 95 页,耗时的中位数是 207 毫秒。
| 操作 | 耗时 | 结果 |
|---|---|---|
| merge 三个文件 | 207 ms | 95 页,2399 字节 |
| info 读元信息 | 195 ms | 页数、版本、是否加密 |
| optimize 重写 | 195 ms | 2374 字节 |
三种操作耗时几乎一样
207 与 195 毫秒,差 12 毫秒。说明在这个体量下,时间主要花在进程启动和解析文件结构上,具体做哪件事影响很小。
合并后的体积比三个源文件加起来还小
三个源文件是 1728 + 4068 + 9564 字节,合并后 2399 字节。原因是它们共用同一套字体与页面结构,合并时重复的对象被合并了。
info 一次给出十四项
读一份 PDF 的元信息,输出是一张对齐的表。
| 字段 | 这次的值 |
|---|---|
| PDF version | 1.7 |
| Page count | 95 |
| Page sizes | 595.00 x 842.00 points(A4) |
| Produced by | pdfcpu 0.16.4 |
| Tagged / Hybrid / Linearized | No / No / No |
| Using XRef streams | Yes |
| Encrypted | No |
| Permissions | Full access |

Page count 是核对合并结果最快的方式
合完不用打开看,跑一条 info 就知道总页数对不对。95 与 10+25+60 一致,说明三份都进去了。
Encrypted 与 Permissions 两行能省一次试错
拿到一份打不开的 PDF,先跑 info 看这两行:Encrypted 是 Yes 就是有密码,Permissions 不是 Full access 就是被限制打印或复制。省下反复试密码的时间。
自己造的测试文件被判定不规范
这次用来测试的三个 PDF 是按最简结构手写的,pdfcpu 处理时打了一串警告。
| 警告原文 | 含义 |
|---|---|
| spec violation (obj#:85): page dict: missing required entry "Resources" | 页面字典缺 Resources 项 |
| 页面 85、93、117、199 各报一次 | 每页都缺同一项 |
退出码是 1,但产物正常生成
合并仍然输出了 95 页、2399 字节的文件,info 也能读。所以退出码 1 在这里不等于失败,是"有规范问题但干完了活"。
脚本里别只看退出码
批处理里如果用 if errorlevel 1 判断,这种带警告的正常结果会被当成失败。要判断成功得检查产物文件是否存在、页数对不对。
什么场景值得上
要批量处理 PDF,或者把 PDF 操作写进脚本的时候。
| 场景 | 合适度 | 说明 |
|---|---|---|
| 合并多个 PDF | 高 | 一条命令,95 页 207 毫秒 |
| 批量看页数与加密状态 | 高 | info 一次给十四项 |
| 拆分与加密 | 高 | 同一个 exe 里的其他子命令 |
| 拖动排序、预览缩略图 | 低 | 没有图形界面 |
它不做视觉上的事
没有预览、没有拖拽排序、不能手动画批注。它的定位是把 PDF 当结构化数据改,不是当画布看。
授权与费用
Apache-2.0 许可,个人与商业环境都不收费。源码在 GitHub 上,主要语言 Go,发布页提供 Windows、macOS、Linux 三平台包。







