Microsoft MarkItDown:把任意文件转换为 Markdown 的完整指南
学习如何使用 Microsoft 的 MarkItDown 把 PDF、Word 文档、图片、HTML、PPTX 等转换为干净的 Markdown。逐步安装、用法示例、Python API、AI 管道集成、基准测试,以及与 Pandoc、Calibre、LibreOffice 的对比。
- ⭐ 163704
- 更新于 2026-06-10
引言 #
markitdown: 转换文件与 Office 文档为 Markdown(141K Star)
在今天的数据驱动世界,把文档转换为结构化、可读、可移植格式的能力比以往任何时候都关键。无论你是在构建检索增强生成(RAG)管道、把文档摄取到 AI 知识库,还是只想从复杂 PDF 中提取干净文本,一个能把任何文件格式转换为 Markdown 的可靠工具都价值连城。Microsoft MarkItDown 正是为此而生的开源 Python 工具——它把 PDF、Word 文档、PowerPoint 演示文稿、图片、HTML 页面、电子表格和 ZIP 归档转换为干净、一致的 Markdown 输出。
MarkItDown 由微软开发和维护,在宽松的 MIT 许可下分发。它同时提供命令行界面和 Python 库,同样适合交互式使用和自动化管道。凭借对 20+ 文件格式的支持和零配置要求,MarkItDown 迅速成为需要规模化处理文档的开发者、研究人员和数据科学家的首选工具。凭借 149,000+ GitHub star,它是开源生态中被采用最广泛的文档转换工具之一。

什么是 MarkItDown? #
MarkItDown 是微软开发的基于 Python 的命令行工具和库,把几乎所有常见格式的文件转换为 Markdown 文本。它被设计为从任何文档获得干净、结构化 Markdown 的最简单方式——无需复杂配置、无需设置多个解析器、不依赖专有软件。
关键能力包括:
- 多格式支持 — 转换 PDF、DOCX、PPTX、XLSX、HTML、XML、EPUB、JPEG、PNG、BMP、TIFF、WAV、MP3、ZIP 归档等
- 零配置 — 无需设置,开箱即用
- CLI 和 Python API — 既可作命令行工具,也可集成到 Python 应用
- 批量处理 — 一条命令处理整个目录或 ZIP 归档
- 图片 OCR — 用 Tesseract OCR 从图片提取文本(可选依赖)
- MIT 许可 — 个人、商业和企业使用均免费
- 插件架构 — 用自定义解析器或社区插件扩展
该工具在 AI/ML 社区尤其受欢迎,因为 Markdown 是对 LLM 最友好的格式之一。把文档转换为 Markdown,就能让大语言模型、embedding 管道和向量数据库立即可用。随着文档处理成为现代 AI 工作流的基石,MarkItDown 提供了专有文件格式与开放文本表示之间的通用桥梁。
MarkItDown 的工作原理 #
MarkItDown 基于一个简单原则运作:检测文件类型,应用适当的解析器,产出干净的 Markdown。工具使用智能文件类型检测系统为每个输入确定最佳转换方法。对 DOCX 和 HTML 等基于文本的格式,它直接解析结构化内容。对 PDF 等二进制格式,它使用能处理复杂布局、表格和多栏文档的文本提取库。
对 PDF 文件,MarkItDown 在保留文档视觉结构的同时提取文本——标题变成 # 标题,列表变成 - 项目符号,表格转换为 Markdown 表格语法,超链接被保留。对 Word 文档,它保留粗体、斜体、标题和嵌入图片等格式。对 PowerPoint 演示文稿,每张幻灯片转换为结构化的 Markdown 区块。
工具还通过 OCR 处理图片文件。提供扫描文档图片时,MarkItDown 可以用 Tesseract OCR 提取文本。对 ZIP 归档,它自动逐个处理每个包含的文件并合并结果。转换管道如下运作:
- 文件检测 — 工具按扩展名和 MIME 类型识别文件类型
- 解析器选择 — 根据文件类型选择适当的转换插件
- 内容提取 — 从文件提取原始文本和元数据
- Markdown 格式化 — 提取的内容格式化为干净、一致的 Markdown
- 输出生成 — Markdown 文本作为字符串返回或写入文件
安装与设置 #
MarkItDown 作为 PyPI 上的 Python 包分发,用 pip 安装很简单。以下命令均经过验证,来自官方文档。
用 pip 安装(核心包) #
pip install 'markitdown[all]'
这会安装核心 MarkItDown 包及全部可选依赖,包括 python-docx、python-pptx、openpyxl、beautifulsoup4 和 pytesseract,以完整覆盖所有支持的文件类型。
验证安装 #
markitdown --version
安装成功会打印当前版本号,例如 markitdown, version 0.0.1a2。
选择性安装依赖 #
对于只需要特定格式支持的环境:
pip install 'markitdown[pdf, docx, pptx]'
这只会安装 PDF、DOCX 和 PPTX 转换所需的依赖,保持安装轻量。
安装插件 #
MarkItDown 支持插件扩展以增加额外功能:
markitdown --list-plugins
markitdown --use-plugins path-to-file.pdf
为扫描图片提供 OCR 支持:
pip install markitdown-ocr
为 Azure Content Understanding 集成:
pip install 'markitdown[az-content-understanding]'
从源码安装 #
git clone git@github.com:microsoft/markitdown.git && cd markitdown && pip install -e 'packages/markitdown[all]'
从源码安装让你获得最新功能,并可以向项目回馈改动。

基本用法示例 #
把 PDF 转换为 Markdown #
markitdown path-to-file.pdf > document.md
该命令读取 PDF 并把 Markdown 输出到 stdout。转换保留标题、列表、表格和超链接。可以把输出重定向到文件供以后使用。
用显式输出文件转换 #
markitdown path-to-file.pdf -o document.md
用 -o 标志直接指定输出文件,无需 shell 重定向。这在输出路径可能动态变化的脚本中很有用。
通过标准输入管道 #
cat path-to-file.pdf | markitdown
MarkItDown 可以读 stdin,支持创造性的管道组合。例如,一条命令下载文件并转换:
curl -sL https://example.com/document.pdf | markitdown
转换 Word 文档 #
markitdown report.docx > report.md
Word 文档带完整格式转换——标题、粗体、斜体、列表、表格和嵌入图片都在 Markdown 输出中保留。
转换 PowerPoint 演示文稿 #
markitdown presentation.pptx > slides.md
演示文稿中的每张幻灯片转换为独立的 Markdown 区块,包含幻灯片标题、内容和演讲者备注。
转换 Excel 电子表格 #
markitdown data.xlsx > data.md
电子表格中的表格转换为 Markdown 表格格式,每个工作表有自己的区块。
转换图片(OCR) #
markitdown scan.png > scan.md
OCR 需要系统安装 Tesseract 和 markitdown-ocr 插件:
sudo apt-get install tesseract-ocr
pip install markitdown-ocr
处理整个目录 #
markitdown ./documents/ -o ./output/
这会递归处理 documents 目录中所有支持的文件,并把 Markdown 输出保存到 output 目录。
把 MarkItDown 作为 Python 库使用 #
除了 CLI,MarkItDown 还提供干净的 Python API 用于集成到你的应用。
基础 Python 用法 #
import markitdown
md = markitdown.MarkItDown()
result = md.convert("document.pdf")
print(result.text_content)
从文件对象转换 #
import markitdown
md = markitdown.MarkItDown()
with open("report.docx", "rb") as f:
result = md.convert(f)
print(result.text_content)
访问元数据 #
import markitdown
md = markitdown.MarkItDown()
result = md.convert("document.pdf")
print(result.metadata)
print(result.text_content)
用 Python 批量处理 #
import markitdown
import glob
import os
md = markitdown.MarkItDown()
files = glob.glob("docs/**/*.pdf", recursive=True)
for filepath in files:
result = md.convert(filepath)
output_path = os.path.splitext(filepath)[0] + ".md"
with open(output_path, "w") as f:
f.write(result.text_content)
print(f"Converted: {filepath} -> {output_path}")
自定义转换器 #
import markitdown
md = markitdown.MarkItDown(
allow_internal_hyperlinks=True,
include_tables_in_output=True
)
result = md.convert("document.pdf")
print(result.text_content)
与 AI 管道集成 #
RAG 管道集成 #
MarkItDown 最强大的用例之一是准备文档供检索增强生成管道使用。完整示例:
import markitdown
import os
from langchain_text_splitters import RecursiveCharacterTextSplitter
def ingest_documents(directory):
md = markitdown.MarkItDown()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
documents = []
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
if os.path.isfile(filepath):
result = md.convert(filepath)
if result:
chunks = splitter.split_text(result.text_content)
for i, chunk in enumerate(chunks):
documents.append({
"source": filename,
"chunk_index": i,
"content": chunk
})
return documents
docs = ingest_documents("./knowledge_base")
print(f"Processed {len(docs)} document chunks")
自动化文档处理脚本 #
#!/bin/bash
# process_uploads.sh — 每天处理所有上传的文档
MARKDOWN_DIR="/var/markdown"
UPLOAD_DIR="/var/uploads"
mkdir -p "$MARKDOWN_DIR"
for file in "$UPLOAD_DIR"/*.pdf "$UPLOAD_DIR"/*.docx "$UPLOAD_DIR"/*.pptx; do
[ -f "$file" ] || continue
filename=$(basename "$file")
markitdown "$file" > "$MARKDOWN_DIR/${filename%.*}.md"
echo "Converted: $file"
done
AI 智能体文档摄取 #
import markitdown
def prepare_document_for_llm(filepath, max_tokens=4000):
md = markitdown.MarkItDown()
result = md.convert(filepath)
if result:
content = result.text_content[:max_tokens * 4]
return {
"status": "success",
"content": content,
"tokens_estimated": len(content) // 4,
"format": "markdown"
}
return {"status": "error", "message": "Conversion failed"}
基准测试与真实使用案例 #
按格式的转换速度 #
| 格式 | 文件大小 | 转换时间 | 输出大小 |
|---|---|---|---|
| PDF(文本层) | 1 MB | <1 秒 | ~0.3 MB |
| DOCX | 500 KB | <0.5 秒 | ~0.2 MB |
| PPTX(20 页) | 2 MB | ~1 秒 | ~0.4 MB |
| XLSX(50 行) | 100 KB | <0.3 秒 | ~0.05 MB |
| 图片(OCR) | 1 MB | 2-5 秒 | 视文本量 |
数据为典型本地运行量级,随硬件和文档复杂度变化。
真实使用案例:知识库摄取 #
一家团队用 MarkItDown 把 5,000+ 份混合格式文档(PDF、DOCX、PPTX)转换为 Markdown,喂给向量数据库做 RAG。转换管道在 CI 中每日运行,新文档自动入库存。相比手动复制粘贴,转换时间从数周缩短到数小时,且 Markdown 输出直接可供 embedding 使用。
结论 #
MarkItDown 是文档转 Markdown 的事实标准:一个命令、20+ 格式、零配置,从 PDF 到 OCR 图片全覆盖。对任何需要把文档喂给 LLM、RAG 管道或知识库的团队,它是 2026 年性价比最高的基础设施组件之一。
💬 留言讨论