用途
本技能是一份 PDF 处理指南,用于在需要操作 PDF 时提供可执行的方案。它覆盖使用 Python 库和命令行工具完成 PDF 的读取、提取、创建、合并、拆分、旋转、加密、水印、OCR 等常见操作。资料说明,若需要高级功能、JavaScript 库和详细示例,可参阅 reference.md;若需要填写 PDF 表单,应阅读 forms.md 并按其说明操作。
主要能力
基础操作(pypdf)
- 读取 PDF 并获取页数:
PdfReader("document.pdf"),len(reader.pages)。 - 提取文本:遍历页面调用
page.extract_text()。 - 合并 PDF:使用
PdfWriter逐页add_page,再写出到输出文件。 - 拆分 PDF:逐页创建
PdfWriter并分别写出为page_{i+1}.pdf。 - 提取元数据:读取
reader.metadata的 title、author、subject、creator。 - 旋转页面:
page.rotate(90)后加入 writer 并写出。 - 添加水印:读取水印页,对每页调用
page.merge_page(watermark)。 - 密码保护:使用
writer.encrypt("userpassword", "ownerpassword")。
文本与表格提取(pdfplumber)
- 按布局提取文本:
page.extract_text()。 - 提取表格:
page.extract_tables(),可逐页遍历并打印行列。 - 高级表格提取:将表格转为 pandas DataFrame,合并所有表格后导出为 Excel(
to_excel("extracted_tables.xlsx", index=False))。
创建 PDF(reportlab)
- 基础创建:使用
canvas.Canvas绘制文本和线条,最后c.save()。 - 多页文档:使用
SimpleDocTemplate、Paragraph、Spacer、PageBreak和样式表构建 story 并doc.build(story)。
命令行工具
- pdftotext(poppler-utils):提取文本,支持
-layout保留布局,-f/-l指定页码范围。 - qpdf:合并(
--empty --pages ...)、拆分(--pages . 1-5 --)、旋转(--rotate=+90:1)、移除密码(--password=... --decrypt)。 - pdftk(如可用):合并(
cat output)、拆分(burst)、旋转(rotate 1east)。 - pdfimages(poppler-utils):
pdfimages -j input.pdf output_prefix提取图片为 jpg 序列。
常见任务
- 扫描件 OCR:需
pip install pytesseract pdf2image,先用convert_from_path转图像,再逐页pytesseract.image_to_string。 - 添加水印:见 pypdf 水印示例。
- 提取图片:使用 pdfimages。
- 密码保护:见 pypdf 加密示例。
使用方式
资料以代码片段和命令示例呈现,可直接复制到 Python 脚本或终端中执行。快速开始示例展示了读取 PDF、获取页数和提取文本的基本流程。对于表单填写,资料明确要求阅读 forms.md 并遵循其说明;高级 pypdfium2 用法和 JavaScript 库(pdf-lib)则指向 reference.md。
适用场景
- 需要从 PDF 中提取文本或表格数据并导出为 Excel。
- 需要合并、拆分、旋转或加密 PDF 文档。
- 需要从零创建 PDF 报告或多页文档。
- 需要处理扫描版 PDF(OCR)。
- 需要为 PDF 添加水印或提取内嵌图片。
- 需要在命令行批量处理 PDF。
限制
资料未提供关于收费、价格、平台支持范围、性能效果或具体版本兼容性的信息。部分功能依赖外部工具(poppler-utils、qpdf、pdftk)或额外 Python 包(pytesseract、pdf2image、pandas、reportlab、pdfplumber),需自行安装。表单填写、高级 pypdfium2 用法和 JavaScript 库的详细内容未在本资料中展开,需参考 forms.md 和 reference.md。