PDF 命令行工具链实战:qpdf + Ghostscript + poppler,合并拆分压缩加密 OCR 一条龙
大叔平时在服务器上折腾文档,最烦的就是为了合…
大叔平时在服务器上折腾文档,最烦的就是为了合并个 PDF、压缩个体积,还得把文件下载回本地、打开图形软件、处理完再传回去。尤其是自建服务、NAS,或者一台连桌面环境都没装的 VPS 上,压根没有鼠标可点。今天这篇就把 Linux 下的 PDF 命令行工具链一次讲透:qpdf、Ghostscript、poppler-utils、ocrmypdf 四个组合拳,合并、拆分、压缩、加密、提取文字、OCR 全部一条命令搞定,最后再送一个批量压缩脚本,拿来就能用。
先装工具:四个神器各司其职
Debian / Ubuntu 一条命令装齐,CentOS / RHEL 把 apt 换成 dnf 或 yum 即可(这些工具基本都在官方源里):
sudo apt update && sudo apt install -y qpdf ghostscript poppler-utils ocrmypdf tesseract-ocr tesseract-ocr-chi-sim
- qpdf:合并、拆分、旋转、加解密、线性化优化,PDF 界的瑞士军刀,也是今天的主力;
- Ghostscript(命令名 gs):压缩、格式转换、加水印,重活脏活都交给它扛;
- poppler-utils:pdfunite、pdfseparate、pdftotext、pdfimages 这些小工具,提取文字图片、快速拆分合并;
- ocrmypdf:给扫描件做 OCR,生成可搜索、可复制的 PDF,依赖 tesseract。
合并与拆分:两种思路任选
把多个 PDF 合并成一个,用 pdfunite 最省事,顺序就是命令行里的顺序:
pdfunite 1.pdf 2.pdf 3.pdf out.pdf
拆分就要更精细的 qpdf 上场了。比如只抽第 1 到 10 页,或者只要第 1、3、5 页:
qpdf in.pdf --pages in.pdf 1-10 -- out-1-10.pdf
qpdf in.pdf --pages in.pdf 1,3,5 -- selected.pdf
这里 --pages 后面跟「源文件 + 页码范围」,最后 -- 后面是输出文件,语法固定,多用几次就记住了。
压缩体积:扫描件瘦身的利器
扫描件或打印导出的 PDF 动不动几十 MB,发邮件都超限。用 Ghostscript 压缩,它内置三档清晰度:/screen(最小)、/ebook(均衡)、/printer(最高)。日常用 /ebook 兼顾清晰度和体积:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH \
-sOutputFile=out.pdf in.pdf
压缩前先看看原文件多大,压缩后对比一下:
ls -lh in.pdf out.pdf
加密与解密:给 PDF 加把锁
合同、证件这类敏感文件,加个打开密码再传输更稳妥。qpdf 用 256 位 AES 加密,两个密码分别是用户密码(打开用)和所有者密码(管理权限用):
qpdf --encrypt user123 owner456 256 -- in.pdf encrypted.pdf
解密也简单,把 --decrypt 和密码传进去就行:
qpdf --decrypt --password=user123 encrypted.pdf decrypted.pdf
提取文字与图片:喂给脚本或大模型
把 PDF 里的纯文本抽出来,直接 grep 检索,或者丢给本地大模型做摘要,一条命令的事:
pdftotext in.pdf out.txt
要提取 PDF 里内嵌的所有图片,用 pdfimages,自动按序号导出:
pdfimages -png in.pdf img
OCR 识别扫描件:让老文档活过来
老合同、扫描版电子书,光是一张图没法搜索、没法复制。ocrmypdf 能把文字层重新「写」回 PDF,生成可检索的版本。-l chi_sim+eng 表示同时识别中英文,--skip-text 跳过已经带文字的页面省时间:
ocrmypdf -l chi_sim+eng --skip-text scanned.pdf ocr.pdf
附赠:一键批量压缩脚本
最后送个实用脚本,把当前目录下所有 PDF 批量压缩,输出到 compressed 目录,原文件不动:
#!/bin/bash
mkdir -p compressed
for f in *.pdf; do
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH \
-sOutputFile="compressed/$f" "$f"
done
echo "完成,压缩结果在 compressed/ 目录"
存成 compress.sh,chmod +x compress.sh 之后直接跑即可。
写在最后
这套工具链大叔在服务器上用了一年多,稳定、依赖轻、几乎不吃内存,特别适合挂进自动化流程:比如监控生成的报告自动压缩归档、扫描仪进来的文件自动 OCR 入库。命令行最大的好处不是炫技,而是能写进脚本、能定时执行、能在没有图形界面的地方跑。四个工具加起来不过几十 MB,却覆盖了日常 PDF 九成九的需求。下次再碰到 PDF 的活儿,先别急着找图形软件,想想这一条命令是不是就能搞定。
