SuperAPI AI 工具集

pdf

办公与效率

查看项目

更新于 10-16 04:26

技能介绍

用途

该技能用于通过 Python 库和命令行工具完成综合性的 PDF 操作,并集成 OpenAI Codex,实现智能的 PDF 转 Markdown 转换。资料明确建议:处理任何 PDF 文档时,先使用 OpenAI Codex 将内容转换为 .md 文件,再基于该 Markdown 进行后续工作。

主要能力

资料列出的使用场景包括:

  • 将 PDF 转换为 Markdown(使用 OpenAI Codex 进行智能转换,被标注为推荐的第一步)
  • 从 PDF 文件中提取文本与元数据
  • 将多个 PDF 合并为单个文档
  • 将大 PDF 拆分为单独页面
  • 向 PDF 添加水印或注释
  • 对 PDF 进行密码保护或解密
  • 从 PDF 文档中提取图片
  • 对扫描文档进行 OCR 处理
  • 使用 reportlab 创建新 PDF
  • 从结构化 PDF 中提取表格

为什么先转换为 Markdown

资料给出的理由包括:更好地保留结构(标题、列表、表格);更易于文本处理(标准 Markdown 格式);提升 AI 理解(Codex 理解文档结构);格式灵活(Markdown 可再转换为任意格式);便于版本控制(纯文本、易于 diff)。

使用方式

前置依赖与安装

pip install openai pypdf
export OPENAI_API_KEY="your-api-key-here"

基础转换(OpenAI Codex)

资料提供 pdf_to_markdown_codex(pdf_path, output_md_path=None, model="gpt-4.1") 函数:使用 PdfReader 逐页 extract_text() 提取文本,拼接为带页码标记的字符串,调用 openai.OpenAI() 的 client.chat.completions.create,system 消息要求将 PDF 文本转换为结构良好的 Markdown(保留标题、章节、列表、表格、代码块、链接等),user 消息为待转换文本,temperature=0.3,最后写入输出 .md 文件。若未提供输出路径,则在 PDF 同级目录下以原文件名生成 .md。

调用示例:

md_file = pdf_to_markdown_codex("document.pdf")
print(f"Markdown saved to: {md_file}")

批量转换

batch_pdf_to_markdown(pdf_directory, output_directory=None, model="gpt-4.1") 使用 Path.glob("*.pdf") 遍历目录,默认输出到 pdf_directory/markdown,逐个转换并记录日志,单个失败仅记录错误并继续。

batch_pdf_to_markdown("/path/to/pdfs", model="gpt-4.1")

大 PDF 分块转换

pdf_to_markdown_chunked(pdf_path, output_md_path=None, chunk_pages=10, model="gpt-4.1") 按 chunk_pages 分块逐段调用模型,每块完成后打印进度,最后以 --- 分隔符合并各段并写入文件。

md_file = pdf_to_markdown_chunked("large_document.pdf", chunk_pages=20)

工作流:PDF → Markdown → 后续处理

pdf_workflow(pdf_path) 演示:先调用 Codex 转为 Markdown,再读取 Markdown 内容,提取以 # 开头的标题行,统计词数,返回包含 PDF 路径、Markdown 路径、Markdown 内容、标题列表和词数的字典。

成本更低的做法

资料给出两种方式:使用 gpt-4.1-mini(如 pdf_to_markdown_codex("document.pdf", model="gpt-4.1-mini"));或采用混合方案 hybrid_conversion——用 pypdf 本地免费提取文本,仅用 gpt-4.1-mini 做 Markdown 格式化。资料称本地提取免费,混合方案成本更低。

最佳实践(资料原文要点)

  • 始终先转换为 Markdown,便于下游处理
  • 大 PDF 使用分块,避免 token 限制与 API 超时
  • 缓存转换结果,避免重复转换
  • 根据复杂度选择模型:复杂文档用 GPT-4.1,简单文档用 GPT-4.1-mini
  • 校验输出,确认 Markdown 结构合理
  • 优雅处理错误:记录失败并继续批量处理

命令行工具

资料提供可保存为 pdf2md.py 的脚本,使用 argparse 接收 input(PDF 文件或目录)、-o/--output、-m/--model(默认 gpt-4.1)、--chunk-pages(默认 10)。当输入为文件时执行单文件转换,否则执行批量转换。

# Single file
python pdf2md.py document.pdf

# Directory
python pdf2md.py /path/to/pdfs -o /path/to/markdown

# With GPT-4.1-mini (cheaper)
python pdf2md.py document.pdf --model gpt-4.1-mini

Python 库用法

pypdf — 核心操作

合并 PDF:

from pypdf import PdfMerger

merger = PdfMerger()
merger.append("file1.pdf")
merger.append("file2.pdf")
merger.write("merged.pdf")
merger.close()

拆分 PDF:

from pypdf import PdfReader, PdfWriter

reader = PdfReader("document.pdf")
for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    writer.write(f"page_{i+1}.pdf")

提取元数据:

reader = PdfReader("document.pdf")
info = reader.metadata
print(f"Author: {info.author}")
print(f"Title: {info.title}")
print(f"Pages: {len(reader.pages)}")

pdfplumber — 高级文本提取

保留版面的文本提取:

import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)

表格提取:

import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    page = pdf.pages[0]
    tables = page.extract_tables()
    for table in tables:
        for row in table:
            print(row)

reportlab — 创建 PDF

从零创建:

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

c = canvas.Canvas("output.pdf", pagesize=letter)
c.drawString(100, 750, "Hello, World!")
c.showPage()
c.save()

多页文档:

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph
from reportlab.lib.styles import getSampleStyleSheet

doc = SimpleDocTemplate("output.pdf", pagesize=letter)
styles = getSampleStyleSheet()
story = []

story.append(Par

(资料中 reportlab 多页文档示例在此处截断,未提供后续内容。)

适用场景

根据资料所列能力,该技能适用于需要对 PDF 进行读取、转换、拆分合并、元数据提取、表格提取、图片提取、OCR、加密解密与新建 PDF 等操作的场景,尤其是希望把 PDF 先转为结构清晰的 Markdown 再做后续文本处理或 AI 处理的工作流。

限制与缺失信息

  • 资料未提供该技能的收费、价格信息。
  • 资料未提供支持平台的具体限制说明。
  • 资料未提供转换效果或准确率的量化保证。
  • 使用 OpenAI Codex 转换需要自行提供 OPENAI_API_KEY。
  • reportlab 多页文档示例在资料中被截断,后续步骤暂未提供。