将 Word(.docx)、PDF 和 PowerPoint(.pptx)文档转换为 Markdown,自动提取图片并 识别图片中的文字,得到"正文 + 图片文字"的完整内容。
- 三格式支持:.docx、.pdf、.pptx 输入,可混合批量转换
- 正文完整提取:
- Word:标题层级、加粗/斜体、有序/无序列表、表格、引用、超链接
- PDF:文本、表格(GFM 格式)、标题(字号识别)、页眉页脚自动去除
- PPT:每页标题作为二级标题,正文按大纲层级转为嵌套列表,加粗/斜体/超链接保留, 表格与图表数据转为 GFM 表格,演讲者备注以引用块附在页末
- 图片自动提取:文档中的图片保存到 Markdown 旁的
images/目录,正文以相对路径引用 - 图片文字识别(OCR):默认用 RapidOCR 识别图片中的中英文文字,以引用块附在对应图片下方; 纯图片扫描页(截图型 PDF、整页截图的幻灯片)也能提取出文字
- 自动检测模式:不带参数运行时,自动转换脚本所在目录下所有 .docx / .pdf / .pptx
- 批量与目录递归:支持一次传入多个文件或整个目录(递归查找)
- Python 3.10+(开发环境为 Python 3.14.6,Windows)
- 依赖库见
requirements.txt:
| 包 | 用途 |
|---|---|
| mammoth | .docx 解析为 HTML(标题/列表/表格/图片提取) |
| markdownify | HTML 转 Markdown(GFM 表格支持) |
| pymupdf4llm | PDF 解析为 Markdown(文本/表格/图片提取) |
| python-pptx | .pptx 解析(逐页文本/表格/图表/图片/备注提取) |
| rapidocr_onnxruntime | 图片文字识别 OCR(中英文,onnxruntime 后端) |
# 建议在虚拟环境中安装
pip install -r requirements.txt
rapidocr_onnxruntime为可选依赖:不安装也能运行,只是无法识别图片中的文字。python-pptx也只在需要转换 PPT 时才必需,缺失时遇到 .pptx 会提示安装。
# 自动检测: 转换脚本所在目录下所有 .docx / .pdf / .pptx (输出到同目录)
python word2md.py
# 转换单个/多个文件 (三种格式可混选)
python word2md.py test.docx
python word2md.py 季度复盘.pptx report.pdf test.docx
# 目录批量转换 (递归查找), 并指定输出目录
python word2md.py docs/ -o output/
# 只提取图片, 不识别图片中的文字
python word2md.py 季度复盘.pptx --no-ocr
# 自定义图片存放目录名 (默认 images)
python word2md.py test.docx --images-dir assets| 参数 | 说明 |
|---|---|
inputs |
.docx/.pdf/.pptx 文件或目录(可多个);不填则自动检测脚本所在目录 |
-o, --output |
输出目录(默认与源文件同目录) |
--images-dir |
图片存放目录名(默认 images) |
--no-ocr |
不识别图片中的文字,只提取图片 |
-h |
查看帮助 |
每个源文件生成同名 .md,图片统一放在 Markdown 旁的 images/ 目录
(文件名带源文档前缀,批量转换不会互相覆盖)。
若同名不同格式的文件(如 报告.docx 与 报告.pptx)同时转换,
先转换的输出为 报告.md,后一个自动改名为 报告(2).md。
图片与其识别出的文字在 Markdown 中的呈现形式:

> **图片中的文字:**
> 月度销售报表
> 产品:智能手表 销量:1200 台
> 合计:4700 台,同比增长 18%
## 后续正文...PPT 每页之间用 --- 分隔,页内元素按原叠放顺序输出:
## 2026 年第三季度业务复盘
汇报人:张伟 | 数据截至 2026-09-30
---
## 本季度关键进展
- 营收同比增长 18%
- 其中海外市场贡献 42%
- **风险提示**:供应链交付周期仍偏长
| 区域 | 销量(台) | 同比 |
| --- | --- | --- |
| 华东 | 1,240 | +18% |
> **图表:主力品类季度销量**
| 类别 | 智能手表 | 智能音箱 |
| --- | --- | --- |
| Q3 | 1240 | 860 |

> **图片中的文字:**
> 产品质检报告
> 合格率 98.5% 批次 B-2049
> **备注:**
> 强调合格率环比提升 0.7 个百分点。图片文件名中的
s5表示第 5 页,避免与同名 Word 文档提取的图片重名。
- 旧版
.doc/.ppt格式不支持,请先另存为.docx/.pptx - 图片/扫描件内的表格会提取出文字行,但无法还原表格结构
- PDF 标题识别基于字号启发式,偶尔会将正文误判为标题
- Word / PPT 中 EMF/WMF 矢量图会原样保存,但其中的文字无法识别
- pymupdf4llm 布局引擎对含纯图片页的文档有丢正文 bug, 脚本已内置检测并自动回退到兼容解析模式(会有提示,图片位置改为所在页文本之后)
- PPT 相关限制:
- SmartArt 图形的文字无法提取(会以标注行提示),如需保留请截图后作为图片插入
- 嵌入对象(OLE)、音频/视频只标注对象名,不提取内容
- 图表只提取第一组绘图数据;散点图等无类别/系列概念的图表退化为一行说明
- 页码、页脚、日期占位符属于版面信息,会被剔除,不写入正文
- 母版/版式上的装饰性文字不提取(只取幻灯片自身的元素)
- 页内元素不保留坐标信息,按叠放顺序输出;表格首行固定作为表头(GFM 语法要求)
word2md/
├── word2md.py # 主脚本
├── requirements.txt # 依赖清单
└── README.md # 本文档