Skip to content
charmingchi1Public

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

word2md — Word/PDF/PPT 转 Markdown 工具

将 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 中的呈现形式:

![](images/report_1.png)

> **图片中的文字:**
> 月度销售报表
> 产品:智能手表  销量:1200 台
> 合计:4700 台,同比增长 18%

## 后续正文...

PPT 每页之间用 --- 分隔,页内元素按原叠放顺序输出:

## 2026 年第三季度业务复盘

汇报人:张伟 | 数据截至 2026-09-30

---

## 本季度关键进展

- 营收同比增长 18%
  - 其中海外市场贡献 42%
- **风险提示**:供应链交付周期仍偏长

| 区域 | 销量(台) | 同比 |
| --- | --- | --- |
| 华东 | 1,240 | +18% |

> **图表:主力品类季度销量**

| 类别 | 智能手表 | 智能音箱 |
| --- | --- | --- |
| Q3 | 1240 | 860 |

![](images/季度复盘_s5_1.png)

> **图片中的文字:**
> 产品质检报告
> 合格率 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         # 本文档

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages