SuperAPI AI 工具集

pdf

办公与效率

查看项目

更新于 10-16 06:57

技能介绍

用途

本技能是一份 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。