把一份几十页的 PDF 直接交给 AI,结果经常不太稳定:正文顺序错乱,表格被拆散,页眉页脚重复出现,真正需要的内容反而被大量格式信息淹没。
需要说明的是,文件体积并不等于 Token 数量。一个体积很大的扫描件,不一定比纯文字文档消耗更多 Token;最终消耗多少,主要取决于平台提取了哪些文字、图片和结构。不过,在进入大模型之前先把文档整理成简洁的 Markdown,通常更方便控制输入内容。
MarkItDown 就是负责这一步的工具。它由微软在 GitHub 上开源,能够把不同来源的文档转换成更适合大模型和文本分析程序读取的 Markdown。
MarkItDown 不是排版还原工具
MarkItDown 是一款 Python 命令行工具和开发库。它支持 PDF、Word、Excel、PowerPoint、HTML、CSV、JSON、XML、EPUB、ZIP、图片、音频以及 YouTube 链接等多种来源。
转换时,它会尽量保留标题、列表、表格、链接等重要结构,同时去掉字体、页面装饰和复杂样式。生成的内容更接近结构化纯文本,适合继续交给 ChatGPT、Claude、Codex、本地大模型或 RAG 知识库处理。
但它的目标并不是复刻原文档的视觉效果。微软在项目说明中明确表示,MarkItDown 的输出主要面向文本分析工具,不适合要求页面、字体和图文位置高度还原的正式文档转换。
一套工具处理多种文档
常见 Office 文件直接转换
MarkItDown 可以读取 DOCX、XLSX、XLS、PPTX 等格式。Word 中的标题和列表会转成 Markdown 层级,Excel 工作表会整理成表格,PPT 则按照幻灯片提取文字、备注及部分结构。
这对整理会议资料、产品说明、行业报告和历史办公文件很实用,不必分别寻找 Word、Excel 和 PPT 转换工具。
PDF 转换更适合文字型文档
带有正常文本层的 PDF 通常能够直接提取内容。普通报告、论文和电子说明书,可以先转换成 Markdown,再删除重复页眉、页脚和无关章节。
如果 PDF 是由扫描图片组成,或者采用复杂多栏排版,转换结果就不一定完整。此时需要借助 OCR 插件、视觉模型或 Azure 文档服务,不能把基础转换器当成万能 PDF 解析器。
HTML、数据文件和压缩包也能处理
除了办公文档,MarkItDown 还支持 HTML、CSV、JSON、XML 和 EPUB。处理 ZIP 文件时,它可以遍历压缩包中的内容。这让它比较适合资料归档、数据预处理和自动化文档管道。
既能使用命令行,也能嵌入程序
普通用户可以用一条命令转换单个文件,开发者则可以通过 Python API,把 MarkItDown 接入批量转换脚本、知识库导入程序或 AI Agent 工作流。
安装和转换方法
MarkItDown 没有传统的图形界面,需要先安装 Python 3.10 或更高版本。官方建议使用虚拟环境,以免不同 Python 项目之间出现依赖冲突。
希望一次安装全部格式支持,可以运行:
python -m pip install "markitdown[all]"
如果只处理 PDF、Word、PPT 和 Excel,也可以只安装对应依赖,减少安装体积:
python -m pip install "markitdown[pdf,docx,pptx,xlsx]"
安装完成后,使用下面的命令把 PDF 转换成 Markdown:
markitdown "项目报告.pdf" -o "项目报告.md"
Word、Excel 和 PPT 文件的使用方式相同,只需更换输入文件名:
markitdown "会议记录.docx" -o "会议记录.md"
markitdown "统计数据.xlsx" -o "统计数据.md"
markitdown "产品介绍.pptx" -o "产品介绍.md"
需要嵌入自己的 Python 程序时,可以这样调用:
from markitdown import MarkItDown
md = MarkItDown(enable_plugins=False)
result = md.convert("report.xlsx")
print(result.text_content)
转换后别急着直接交给 AI
MarkItDown 只负责提取和整理,不会自动判断哪些章节值得保留。面对篇幅较长的文档,推荐采用下面的流程:
- 先将原始文件转换成 Markdown;
- 打开结果,检查标题层级、表格和段落顺序;
- 删除重复页眉、版权声明、目录页和无关附件;
- 按照标题或主题拆分内容,再交给 AI 或写入向量数据库。
Markdown 的标记比较精简,确实有利于减少不必要的格式开销,但它不会压缩文档本身包含的信息。几百页正文即使变成 Markdown,依然可能超出模型上下文,需要分块处理。
把内容提交给 AI 时,可以搭配下面的要求:
以下内容由原始文档转换为 Markdown。
请只根据提供的内容回答,并保留标题层级。
如果表格字段缺失或段落顺序异常,请标记“无法确认”,不要自行补全。
这能减少模型把转换错误当成原始事实继续推测的情况。
OCR 和语音转文字有使用条件
MarkItDown 支持图片和音频相关的转换能力,但不能简单理解成安装后即可离线完成所有 OCR 和语音识别。
针对扫描 PDF,以及 Word、Excel、PPT 中嵌入图片的文字识别,微软提供了独立的 markitdown-ocr 插件。该插件需要配置兼容 OpenAI 接口的视觉模型;没有提供模型客户端时,OCR 会被跳过。
python -m pip install markitdown-ocr
python -m pip install openai
使用视觉模型意味着相关页面或图片可能被提交给外部服务,同时会产生模型额度或 API 费用。涉及合同、身份证明、内部报表等敏感资料时,应先确认所使用服务的数据处理规则。
音频转录也属于可选功能,需要安装 audio-transcription 依赖或完整版依赖。基础转录过程可能调用在线语音识别服务,并非默认的纯本地离线方案。更高质量的音视频分析还可以接入 Azure Content Understanding,但该服务按调用收费。
本地转换不代表所有功能都不联网
普通 PDF 和 Office 文档的基础提取可以在本机运行,不要求注册 MarkItDown 账号,也不需要大模型 API Key。
但是,转换在线 URL、获取 YouTube 字幕、调用视觉模型、使用 OCR 插件或者连接 Azure 服务时,程序都会产生网络请求。是否上传文件、是否付费,取决于启用的具体功能。
MarkItDown 还允许读取本地路径、远程 URI 和数据流,并继承当前 Python 进程的访问权限。如果准备把它部署成允许他人上传文件的在线服务,应限制文件路径、链接协议和网络访问范围。只处理本地文件时,开发者可以优先使用权限范围更明确的 convert_local()。
它更适合哪些人?
- 需要把 PDF、Word 和 PPT 交给大模型分析的用户;
- 正在制作企业知识库、文档问答或 RAG 系统的开发者;
- 需要批量整理旧办公文档和技术资料的团队;
- 希望统一文档输入格式的 Python 自动化项目;
- 准备把资料迁移到 Markdown 笔记或文档系统的用户。
如果只偶尔转换一两个文件,又不熟悉 Python,使用带图形界面的转换工具可能更省事。如果主要处理扫描件、复杂表格、公式和多栏论文,则应优先考虑带专业 OCR、版面分析或坐标输出的文档解析方案。
总结
MarkItDown 的价值并不是把文档“原样变成 Markdown”,而是用统一方式提取不同文件中的主要内容,为后续的大模型分析、知识库入库和自动化处理做好准备。
它支持的格式丰富,命令行和 Python API 都很简洁,基础转换也不强制使用云端服务。不过,复杂 PDF、扫描件、图表和嵌入图片仍然需要检查,OCR、语音识别和 Azure 增强功能也可能涉及联网与费用。
对于经常处理 AI 文档、RAG 数据和办公资料的用户,MarkItDown 是一个很实用的前置处理工具;但如果追求页面级还原,它并不是合适的选择。
官方相关链接
- MarkItDown 官方 GitHub 仓库:https://github.com/microsoft/markitdown
- MarkItDown 官方 README:https://github.com/microsoft/markitdown/blob/main/README.md

