用途
当格式要求明确为 PDF 时使用本技能,无论该要求是用户显式说明,还是由工作流强烈暗示。以下任务适合触发本技能:
- 从已有的 .pdf 文件中读取或提取内容
- 对扫描版 PDF 执行 OCR
- 填写或分析 PDF 表单
- 合并、拆分、旋转、加水印、加密或解密 PDF
- 将 PDF 文件作为最终交付物生成
用户不必字面说出 .pdf。如果任务明显涉及扫描文档、PDF 表单或最终可下载的 PDF 交付,本技能也可能是合适的选择。
不要将其作为一般文档请求的默认选项:
- 如果用户想要 Word 文档,优先使用 docx
- 如果用户想要电子表格交付物,优先使用 xlsx
- 如果用户想要 PowerPoint 交付物,优先使用 pptx(或从本 PDF 生成新 PPTX 时使用外部 ppt-master 工作流——ppt-master 为手动运行,不是技能)
- 如果用户只要求写作帮助、摘要或结构化内容而没有 PDF 要求,应优先使用更合适的写作或文档工作流
主要能力
本技能覆盖使用 Python 库和命令行工具进行的基本 PDF 处理操作。高级功能、JavaScript 库和详细示例见 REFERENCE.md。如需填写 PDF 表单,请阅读 FORMS.md 并遵循其说明。
Python 库
pypdf - 基本操作
- 读取 PDF 并统计页数
- 提取文本
- 合并 PDF:遍历多个文件的页面并写入一个 PdfWriter
- 拆分 PDF:每页输出为一个文件
- 提取元数据(标题、作者、主题、创建者)
- 旋转页面(如顺时针 90 度)
pdfplumber - 文本与表格提取
- 按布局提取文本
- 提取表格
- 高级表格提取:将表格转为 pandas DataFrame,合并所有表格并导出为 Excel
reportlab - 创建 PDF
- 基本 PDF 创建(Canvas,添加文本、线条)
- 创建多页 PDF(SimpleDocTemplate、Paragraph、Spacer、PageBreak)
- 下标与上标:重要提示——不要在 ReportLab PDF 中使用 Unicode 下标/上标字符(₀₁₂₃₄₅₆₇₈₉、⁰¹²³⁴⁵⁶⁷⁸⁹),内置字体不包含这些字形,会渲染为实心黑框。应改用 ReportLab 的 XML 标记标签:下标用 <sub>,上标用 <super>。对于 canvas 绘制的文本(非 Paragraph 对象),应手动调整字体大小和位置,而不是使用 Unicode 下标/上标。
命令行工具
pdftotext(poppler-utils)
- 提取文本
- 保留布局提取文本
- 提取指定页面(如第 1-5 页)
qpdf
- 合并 PDF
- 拆分页面
- 旋转页面
- 移除密码(解密)
pdftk(如可用)
- 合并
- 拆分(burst)
- 旋转
使用方式
常见任务
从扫描 PDF 提取文本
需要安装 pytesseract 和 pdf2image。流程:用 pdf2image 将 PDF 转为图像,再对每页图像调用 pytesseract 进行 OCR,拼接文本输出。
添加水印
创建或加载水印页,遍历文档每一页调用 merge_page 合并水印,再写入输出文件。
提取图像
使用 pdfimages(poppler-utils),以 -j 参数将图像提取为 output_prefix-000.jpg、output_prefix-001.jpg 等。
密码保护
使用 pypdf 的 PdfWriter.encrypt 设置用户密码和所有者密码,写入加密后的 PDF。
快速参考
| 任务 | 最佳工具 | 命令/代码 |
|---|---|---|
| 合并 PDF | pypdf | writer.add_page(page) |
| 拆分 PDF | pypdf | 每页一个文件 |
| 提取文本 | pdfplumber | page.extract_text() |
| 提取表格 | pdfplumber | page.extract_tables() |
| 创建 PDF | reportlab | Canvas 或 Platypus |
| 命令行合并 | qpdf | qpdf --empty --pages ... |
| OCR 扫描 PDF | pytesseract | 先转为图像 |
| 填写 PDF 表单 | pdf-lib 或 pypdf(见 FORMS.md) | 见 FORMS.md |
后续步骤
- 高级 pypdfium2 用法见 REFERENCE.md
- JavaScript 库(pdf-lib)见 REFERENCE.md
- 如需填写 PDF 表单,遵循 FORMS.md 中的说明
- 故障排除指南见 REFERENCE.md
适用场景
- 需要从 PDF 中提取文本或表格
- 扫描件需要 OCR
- 需要填写或分析 PDF 表单
- 需要对 PDF 进行合并、拆分、旋转、加水印、加密解密
- 需要生成 PDF 作为最终交付物
限制
- 不是通用文档请求的默认技能;Word、表格、演示文稿应分别使用 docx、xlsx、pptx
- 仅要求写作帮助、摘要或结构化内容而无 PDF 要求时,应优先使用写作或文档工作流
- 部分功能依赖额外安装(如 OCR 需要 pytesseract 和 pdf2image)
- 关于收费、价格、平台支持范围等信息,资料中暂未提供