按任务挑工具,别找一个万能软件
| 任务 | 工具 | 命令要点 |
|---|---|---|
| 抽文字 | poppler pdftotext | -layout 保住表格排版 |
| 合并 / 拆分 / 解密 | qpdf | --pages 指定页范围 |
| 压缩 | Ghostscript | -dPDFSETTINGS=/ebook |
| 扫描件 OCR | ocrmypdf | -l chi_sim+eng |
| 程序化处理 | PyMuPDF / pdfplumber | fitz 逐页取文本块 |
GUI 侧:SumatraPDF 轻量看文档,PDF-XChange Editor 做标注,Okular 跨平台,Acrobat 只在需要复杂表单和印前检查时才值得开。命令行工具的价值在批量和自动化,装一次就能写进脚本反复用。Windows 用 scoop 装 poppler、qpdf、ghostscript 最省事,ocrmypdf 还要额外装 tesseract 及中文语言包。
scoop install poppler qpdf ghostscript tesseract
choco install poppler qpdf
winget install --id OCR-D.ocrmypdf -e
具体命令
pdftotext -layout -enc UTF-8 in.pdf out.txt
pdfinfo in.pdf
pdfimages -list in.pdf
pdftoppm -f 1 -l 3 -png -r 150 in.pdf page
qpdf --empty --pages a.pdf 1-3 b.pdf 5-9 -- merged.pdf
qpdf --decrypt locked.pdf out.pdf
qpdf --linearize in.pdf optimized.pdf
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH
-sOutputFile=small.pdf in.pdf
ocrmypdf -l chi_sim+eng --rotate-pages --deskew scan.pdf searchable.pdf
qpdf 的 --pages 能混用多个文件和页范围,比先拆后合干净得多,而且它做结构级操作不重编码内容,画质无损;--linearize 把文件重排成支持线性化(边下边看)的形式,给网页里嵌的大 PDF 用。Ghostscript 的 /screen、/ebook、/printer、/prepress 四档从狠到轻,日常选 /ebook。
程序化处理与踩坑
import fitz
doc = fitz.open("in.pdf")
for i, page in enumerate(doc):
text = page.get_text("text")
print(i, len(text))
doc.close()
- 扫描件没文字层:pdftotext 出来是空的,必须先 ocrmypdf;中文要装 tesseract 的 chi_sim 语言包,只装 eng 会把汉字识别成乱码。
- 中文乱码:老 PDF 用内嵌子集字体且缺 ToUnicode 映射,pdftotext 加 -enc UTF-8 也不一定救得回来,换 pdfplumber 或干脆先转图片再 OCR。
- 压缩副作用:Ghostscript 会重新编码字体和图片,字体 subset 丢失后文字可能变糊、行距变化,合同类文档别用 /screen 档,先用 /ebook 试并肉眼比对关键页。
- 表格抽取:pdftotext -layout 遇到合并单元格会错列,改用 pdfplumber 的 extract_table 或 camelot,复杂表格最后仍要人工核。
- 加密 PDF:先 qpdf --decrypt,否则下游工具全部报权限错误;有密码的用 --password= 传,别把它写进会提交到仓库的脚本。
微信赞赏长按识别 / 扫一扫
支付宝长按识别 / 扫一扫
留言与讨论
评论提交后需作者后台审核才会公开 · 同一 IP 每小时最多 10 条 · 本小时还可发布 10 条