PDF2PPT 是一个开源工具,致力于将 AI 生成的 PDF 文稿(如 Google NotebookLM 导出的内容)或其他标准 PDF 文档,通过智能解析转换为可编辑的 PowerPoint (PPTX) 演示文稿。
概览
是一个开源工具,致力于将 AI 生成的 PDF 文稿(如 Google NotebookLM 导出的内容)或其他标准 PDF 文档,通过智能解析转换为可编辑的 PowerPoint (PPTX) 演示文稿。 本项目基于 强大的文档解析能力,能够精准识别 PDF 中的文本、图片、表格和列表结构,并将其高保真地还原到 PPT 页面中。 本项目采用 MinerU API 作为 PDF 文档解析引擎,提供以下核心能力: - : 识别各级标题,保留层级关系 - : 提取段落文本,支持多语言 OCR - : 提取高清原图,包含图片标题 (image_caption) - : 识别复杂表格结构,支持 HTML 格式输出 - : 识别有序/无序列表,保留层级结构 - : 识别页脚和水印文字 - - 每个元素都带有精确的边界框坐标 [x1, y1, x2, y2] - 支持像素级定位,确保 PPT 还原布局一致性 - - 支持中英文混排识别 - LaTeX 公式识别(如 $360^{\circ}$) - 特殊字符和符号识别 - : 根据 bbox 面积和字符密度自动计算最佳字号 - : 自动处理 PDF 和 PPT 不同坐标系的转换 - : 自动转换 LaTeX 符号为 Unicode 字符(如 \circ → °) - : 自动检测和移除重复水印元素 - : 表格字号根据单元格高度自适应(10-16pt 范围) 1. : 将多页 PDF 拆分为单页,支持批量并发处理 2. : - 使用 VLM 模型进行深度 OCR 和版面分析 - 获取两个关键 JSON:layout.json(坐标系信息)和 content_list.json(元素内容) 3. : 自动检测并转换 layout 和 content 的不同坐标系 4. : - 根据元素类型进行专门处理 - 图片提取 caption 作为独立文本 - 表格解析为原生 PPT 表格 5. : - Area-based 算法计算最佳字号 - 精确 bbox 定位保证布局一致性 - LaTeX 符号清理优化显示效果
README
PDF2PPT
PDF2PPT 是一个开源工具,致力于将 AI 生成的 PDF 文稿(如 Google NotebookLM 导出的内容)或其他标准 PDF 文档,通过智能解析转换为可编辑的 PowerPoint (PPTX) 演示文稿。
本项目基于 MinerU 强大的文档解析能力,能够精准识别 PDF 中的文本、图片、表格和列表结构,并将其高保真地还原到 PPT 页面中。
核心优势
🚀 MinerU 技术加持
本项目采用 MinerU API 作为 PDF 文档解析引擎,提供以下核心能力:
-
🎯 精准元素识别
- 标题 (Title): 识别各级标题,保留层级关系
- 文本 (Text): 提取段落文本,支持多语言 OCR
- 图片 (Image): 提取高清原图,包含图片标题 (image_caption)
- 表格 (Table): 识别复杂表格结构,支持 HTML 格式输出
- 列表 (List): 识别有序/无序列表,保留层级结构
- 页脚 (Footer): 识别页脚和水印文字
-
📍 精确 Bbox 定位
- 每个元素都带有精确的边界框坐标
[x1, y1, x2, y2] - 支持像素级定位,确保 PPT 还原布局一致性
- 每个元素都带有精确的边界框坐标
-
🔍 强大 OCR 能力
- 支持中英文混排识别
- LaTeX 公式识别(如
$360^{\circ}$) - 特殊字符和符号识别
💡 智能转换特性
- Area-based 字号算法: 根据 bbox 面积和字符密度自动计算最佳字号
- 坐标系智能转换: 自动处理 PDF 和 PPT 不同坐标系的转换
- LaTeX 符号清理: 自动转换 LaTeX 符号为 Unicode 字符(如
\circ→°) - 水印智能过滤: 自动检测和移除重复水印元素
- 表格动态字号: 表格字号根据单元格高度自适应(10-16pt 范围)
工作流程 (Process Flow)
graph TD
A[输入PDF] -->|分拆单页| B(单页PDF)
B -->|批量上传| C{MinerU API v4}
C -->|VLM模型解析| D[结构化JSON]
D -->|layout.json| E1[Page Size + 坐标系]
D -->|content_list.json| E2[元素列表]
E1 --> F[坐标系转换]
E2 --> F
F -->|元素分类| G{元素类型}
G -->|Title/Text| H1[Area-based字号计算]
G -->|Image| H2[高清原图+Caption]
G -->|Table| H3[HTML解析原生表格]
G -->|List| H4[列表结构化渲染]
G -->|Footer| H5[水印检测过滤]
H1 --> I[智能布局]
H2 --> I
H3 --> I
H4 --> I
H5 --> I
I --> J[生成PPTX]
style C fill:#e1f5ff
style D fill:#fff4e1
style G fill:#ffe1f5
style J fill:#e1ffe1
流程说明:
- PDF 分页: 将多页 PDF 拆分为单页,支持批量并发处理
- MinerU 解析:
- 使用 VLM 模型进行深度 OCR 和版面分析
- 获取两个关键 JSON:
layout.json(坐标系信息)和content_list.json(元素内容)
- 坐标转换: 自动检测并转换 layout 和 content 的不同坐标系
- 元素处理:
- 根据元素类型进行专门处理
- 图片提取 caption 作为独立文本
- 表格解析为原生 PPT 表格
- 智能合成:
- Area-based 算法计算最佳字号
- 精确 bbox 定位保证布局一致性
- LaTeX 符号清理优化显示效果
转换效果对比
以下是实际转换效果对比(使用 Google NotebookLM 生成的 PDF 测试):
| PDF 原始页面 | 转换后的 PPT |
|---|---|
下载
您可以直接下载打包好的可执行文件,无需安装Python环境:
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 申请 MinerU Token
本项目依赖 MinerU API。请前往 MinerU API 管理台 注册并获取您的 API Token。
3. 配置环境
配置 config.py 文件(可参考 config.example.py):
# config.py
MINERU_TOKEN = "您的_MINERU_TOKEN"
PDF_INPUT_PATH = "input.pdf"
PPT_OUTPUT_PATH = "output.pptx"
CACHE_DIR = "temp" # 缓存目录,避免重复调用 API
USE_CACHE = True # 是否使用缓存
REMOVE_WATERMARK = True # 是否移除水印
4. 运行程序
方式一:GUI 界面 (推荐)
python app.py
方式二:命令行
python pdf2ppt.py
版本历史
🤖 Agent Skill 集成 (New!)
本项目现已提供标准的 AI Agent Skill 包,支持 Agent 直接调用。
- Skill 路径:
./skill-pdf2ppt - 能力描述: 将 PDF 文档转换为可编辑的 PowerPoint (PPTX) 演示文稿。
- 调用方式:
python skill-pdf2ppt/scripts/main.py --pdf_path "input.pdf" --token "YOUR_TOKEN" - 查看详情: 请阅读 skill-pdf2ppt/SKILL.md
版本历史
v0.3
🎯 智能解析增强
- ✨ Layout.json 多源解析: 同时利用
layout.json和content_list.json,提取 image_caption 的精确 bbox - 🔄 坐标系智能转换: 自动检测并转换不同坐标系,确保元素位置精确
- 🧹 LaTeX 符号清理: 增强 LaTeX 公式处理(支持
\circ,\degree,\times等常用符号) - 🚫 水印智能过滤: 优化水印检测算法,支持关键词匹配、位置判断和重复文本检测
📊 表格与文本优化
- 📐 表格动态字号: 基于单元格高度自适应字号(10-16pt 范围)
- ⚖️ 表格内容居中: 垂直和水平双向居中对齐,表头自动加粗
- 📏 Area-based 字号算法优化: 缩放因子从 0.8 提升至 0.95,文字更清晰
🛠️ 代码优化
- 🧼 日志精简: 移除表格尺寸、字号估算等调试信息
- 📦 缓存机制: temp 文件夹用于开发调试,生产环境直接使用 API 返回值
- 🎨 统一样式: 所有文字统一使用 Area-based 算法和 Microsoft YaHei 字体
v0.2
🎨 图形化界面
- ✨ GUI 界面: 基于 CustomTkinter 的现代化界面 (
app.py) - 🖱️ 操作便捷: 文件拖拽选择、参数可视化配置、实时日志显示
- 📦 打包支持: 提供
app.spec和version_info.txt,支持 PyInstaller 打包为 exe
🔧 功能增强
- 🚫 去水印功能: 自动检测和过滤 PDF 中的重复水印元素
- 🌐 日志汉化: 统计日志全面汉化,提升可读性
- 🔣 特殊字符处理: 针对
\u200b等特殊字符进行转义
v0.1
🎉 初始版本
- 🔗 MinerU 集成: 集成 MinerU API (v4) 上传与解析流程
- 🌳 递归解析: 实现基于递归的 Block 解析,支持复杂嵌套布局
- 📐 Area-based 算法: 引入字号估算算法,解决文字大小不一致问题
- 📊 元素支持: 支持 Text、Title、Image、Table、List、Footer 等元素类型
- 💾 配置与缓存: 配置分离 (
config.py) 和解析结果缓存 (temp/)
依赖库
customtkinter==5.2.1
python-pptx==0.6.21
pymupdf==1.23.8
requests==2.31.0
详见 requirements.txt。
致谢
感谢 MinerU 项目提供强大的文档解析能力!
License
MIT License
推荐工具
换一个关键词,或者移除筛选条件。
安装
npx skillfish add blacksamuraiiii/pdf2ppt