用途
本技能面向需要对 PDF 文件进行各种处理的场景,例如读取或提取 PDF 中的文本与表格、合并多个 PDF、拆分页面、旋转页面、读取元数据、创建新 PDF、添加水印、提取图片、加密与解密、对扫描件进行 OCR 识别,以及填写 PDF 表单(需参阅 FORMS.md)。文档定位为一份“PDF 处理指南”,以 Python 库和命令行工具为核心。
主要能力与涉及工具
指南涵盖以下主要操作,并分别给出使用 Python 库或命令行工具的方法:
- 读取与文本提取:使用 pypdf 的 PdfReader 读取页数、遍历页面提取文本;使用 pdfplumber 进行保留布局的文本提取。
- 表格提取:使用 pdfplumber 的 extract_tables(),并可结合 pandas 将表格整理为 DataFrame 后导出 Excel。
- 合并与拆分:使用 pypdf 的 PdfWriter/PdfReader 合并 PDF、按页拆分为单独文件;命令行使用 qpdf 或 pdftk。
- 元数据读取:使用 pypdf 读取标题、作者、主题、创建者等元数据。
- 页面旋转:使用 pypdf 的 page.rotate(90);命令行使用 qpdf 的 --rotate。
- 创建 PDF:使用 reportlab 的 canvas 或 Platypus(SimpleDocTemplate、Paragraph、Spacer、PageBreak)创建单页或多页 PDF。文档特别提醒:在 ReportLab 中不要使用 Unicode 下标/上标字符(如 ₀₁₂、⁰¹²),因为内置字体不含这些字形,会渲染为实心黑框;应改用 ReportLab 的 XML 标记 <sub> 和 <super>。对于 canvas 绘制的文本,应手动调整字体大小与位置。
- 命令行文本提取:使用 poppler-utils 的 pdftotext,支持 -layout 保留布局、-f/-l 指定页码范围。
- 命令行合并/拆分/旋转/解密:使用 qpdf 的 --empty --pages 合并、--pages 拆分、--rotate 旋转、--password 与 --decrypt 解密;也可使用 pdftk 的 cat output、burst、rotate。
- 扫描件 OCR:使用 pytesseract 与 pdf2image,先将 PDF 转为图像,再逐页 OCR。
- 水印:使用 pypdf,将水印页 merge_page 到目标页后写出。
- 图片提取:使用 poppler-utils 的 pdfimages -j。
- 密码保护:使用 pypdf 的 writer.encrypt(userpassword, ownerpassword)。
文档末尾提供“Quick Reference”对照表,列出常见任务与推荐工具及对应代码/命令:合并用 pypdf,拆分用 pypdf,提取文本用 pdfplumber,提取表格用 pdfplumber,创建 PDF 用 reportlab,命令行合并用 qpdf,OCR 用 pytesseract,填写表单用 pdf-lib 或 pypdf(见 FORMS.md)。
使用方式
安装相关 Python 库(如 pypdf、pdfplumber、reportlab、pandas、pytesseract、pdf2image)后,可参考文中示例代码直接调用。命令行工具需先安装 poppler-utils、qpdf、pdftk 等。若要填写 PDF 表单,需阅读并遵循 FORMS.md;若要了解 pypdfium2 的高级用法、JavaScript 库(pdf-lib)以及故障排查,需阅读 REFERENCE.md。
适用场景
适用于文档自动化、批量 PDF 处理、从报告中提取结构化数据、生成报告、处理扫描件、对 PDF 做合并拆分、加水印、加密等日常办公与数据处理任务。
限制与未提供信息
文档未说明收费、价格、平台限制、性能或效果等事实,这些信息暂未提供。部分能力依赖外部工具(poppler-utils、qpdf、pdftk)或额外 Python 包(pytesseract、pdf2image、pandas)的可用性,且文档将 PDF 表单填写与高级/JavaScript 用法分别交由 FORMS.md 和 REFERENCE.md 说明,本页未展开其细节。