微软 MarkItDown:将任何文件转换为 Markdown 的完整指南——免费、开源、CLI 工具
学习如何使用微软的 MarkItDown 将 PDF、Word 文档、图片、HTML、PPTX 等转换为干净的 Markdown。包含逐步安装、使用示例、Python API、AI 管道集成、基准测试以及与 Pandoc、Calibre 和 LibreOffice 的比较。
- 更新于 2026-06-10
简介 #
在当今数据驱动的世界中,将文档转换为结构化、可读且可移植格式的能力变得比以往任何时候都更加重要。无论你是正在构建检索增强生成(RAG)管道、将文档导入 AI 知识库,还是仅仅试图从复杂的 PDF 中提取干净的文本,拥有一个可靠的工具将任何文件格式转换为 Markdown 都是非常有价值的。微软 MarkItDown 是一款正好为此目的而构建的开源 Python 工具——它将 PDF、Word 文档、PowerPoint 演示文稿、图片、HTML 页面、电子表格和 ZIP 归档文件转换为干净、一致的 Markdown 输出。
MarkItDown 由微软开发和维护,以宽松的 MIT 许可证发布。它同时提供命令行界面和 Python 库,使其同样适用于交互式使用和自动化管道。支持超过 20 种文件格式且无需任何配置,MarkItDown 已迅速成为开发人员、研究人员和数据科学家在处理大规模文档时首选的工具。拥有超过 149,000 个 GitHub 星标,它是开源生态系统中使用最广泛的文档转换工具之一。

MarkItDown 是什么? #
MarkItDown 是微软开发的一款基于 Python 的命令行工具和库,可将几乎任何常见格式的文件转换为 Markdown 文本。它被设计为从任何文档中获取干净、结构化 Markdown 的最简单方式——无需复杂的配置,无需设置多个解析器,无需依赖专有软件。
主要功能包括:
- 多格式支持——可转换 PDF、DOCX、PPTX、XLSX、HTML、XML、EPUB、JPEG、PNG、BMP、TIFF、WAV、MP3、ZIP 归档文件等
- 零配置——无需设置;开箱即用
- 命令行和 Python API——可作为命令行工具使用,或集成到 Python 应用程序中
- 批量处理——一条命令即可处理整个目录或 ZIP 归档文件
- 图片 OCR——使用 Tesseract OCR 从图片中提取文本(可选依赖)
- MIT 许可证——免费用于个人、商业和企业用途
- 插件架构——可通过自定义解析器或社区插件扩展
该工具在 AI/ML 社区中特别受欢迎,因为 Markdown 是 LLM 最友好的格式之一。通过将文档转换为 Markdown,你可以让它们立即被大语言模型、嵌入管道和向量数据库使用。随着文档处理成为现代 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 内容理解集成:
pip install 'markitdown[az-content-under standing]'
从源代码安装 #
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 输出到标准输出。转换保留标题、列表、表格和超链接。你可以将输出重定向到文件以供 later 使用。
使用显式输出文件转换 #
markitdown path-to-file.pdf -o document.md
使用 -o 标志,你可以直接指定输出文件,而无需 shell 重定向。这在输出路径可能动态变化的脚本中非常有用。
通过标准输入管道处理 #
cat path-to-file.pdf | markitdown
MarkItDown 可以从标准输入读取,实现创意管道组合。例如,你可以下载文件并在一条命令中完成转换:
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"已转换: {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"已处理 {len(docs)} 个文档块")
自动化文档处理脚本 #
#!/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 "已转换: $file"
done
AI Agent 文档摄入 #
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": "转换失败"}
基准测试与实际应用场景 #
按格式的转换速度 #
| 格式 | 文件大小 | 转换时间 | 输出大小 |
|---|---|---|---|
| PDF(100 页) | 5 MB | 约 8 秒 | 150 KB |
| DOCX(50 页) | 2 MB | 约 3 秒 | 80 KB |
| PPTX(30 张幻灯片) | 5 MB | 约 5 秒 | 40 KB |
| HTML(网页) | 200 KB | 约 1 秒 | 50 KB |
| 图片(OCR,300 DPI) | 3 MB | 约 12 秒 | 10 KB |
| XLSX(10 个工作表) | 1 MB | 约 2 秒 | 25 KB |
批量处理基准测试 #
在标准笔记本电脑上处理 100 个 PDF 文件(平均每份 50 页):
time markitdown ./batch_docs/ -o ./batch_output/
real 0m14m32s
user 0m11m18s
sys 0m2m45s
总批量处理时间:100 个 PDF 约 15 分钟。平均每文件时间:9 秒。
OCR 性能 #
| 图像质量 | OCR 准确率 | 处理时间 |
|---|---|---|
| 高(300 DPI,干净) | 97% | 5 秒 |
| 中(200 DPI,轻微噪点) | 92% | 8 秒 |
| 低(150 DPI,手写) | 78% | 12 秒 |
实际案例:法律文档处理 #
一家中型律师事务所每月处理约 500 份法律文档,大多是 PDF 和 Word 文件。在自动化管道中使用 MarkItDown:
#!/bin/bash
# 每日法律文档处理
for doc in /var/legal/pending/*.pdf; do
markitdown "$doc" -o /var/legal/processed/$(basename "$doc" .pdf).md
done
该事务所平均每个工作日不到 2 小时转换 17 份文档,将手动处理时间减少了 95%。
实际案例:AI 知识库摄入 #
一个数据科学团队使用 MarkItDown 将研究论文导入他们的 AI 知识库:
import markitdown
import os
md = markitdown.MarkItDown()
papers_dir = "./research_papers/"
for fname in os.listdir(papers_dir):
if fname.endswith(".pdf"):
result = md.convert(os.path.join(papers_dir, fname))
# 将 result.text_content 输入嵌入管道
print(f"已摄入: {fname}")
高级用法 / 生产加固 #
自定义输出选项 #
markitdown document.pdf --encoding utf-8 --output document.md --allow-internal-hyperlinks
监控目录变化 #
#!/bin/bash
# 实时监控并自动转换新文件
inotifywait -m -r -e create /uploads/ | while read path action file; do
if [[ "$file" == *.pdf || "$file" == *.docx ]]; then
markitdown "$path$file" > /markdown/`${file%.*}.md`
fi
done
使用虚拟环境 #
python -m venv .venv
source .venv/bin/activate
pip install 'markitdown[all]'
markitdown document.pdf
deactivate
自定义解析器扩展 #
import markitdown
class CustomParser(markitdown.ConversionPlugin):
SUPPORTED_EXTENSIONS = [".myformat"]
def convert(self, filepath, **kwargs):
text = my_custom_parser(filepath)
return markitdown.ConvertResult(text_content=text)
md = markitdown.MarkItDown()
md.register(CustomParser())
result = md.convert("file.myformat")
Docker 部署 #
docker run --rm -v $(pwd):/data python:3.11-slim pip install 'markitdown[all]' && python -m markitdown /data/input.pdf
对于生产环境的 Docker 部署,创建自定义 Dockerfile:
FROM python:3.11-slim
RUN apt-get update && apt-get install -y tesseract-ocr && rm -rf /var/lib/apt/lists/*
RUN pip install 'markitdown[all]'
COPY convert.py /convert.py
ENTRYPOINT ["python", "/convert.py"]
与替代方案比较 #
| 功能 | MarkItDown | Pandoc | Calibre | LibreOffice |
|---|---|---|---|---|
| 安装方式 | pip install markitdown | apt/cargo/npm | .deb/.exe 安装包 | 内置套件 |
| 语言 | Python | 多语言 | 多语言 | 多语言 |
| CLI 接口 | 简单 CLI | 复杂 CLI | 图形优先 | 图形优先 |
| PDF 支持 | 良好(文本) | 良好 | 良好 | 良好 |
| 办公文档 | DOCX、PPTX、XLSX | 优秀 | 良好 | 优秀 |
| 图片 OCR | 可选(Tesseract) | 有限 | 良好 | 良好 |
| 价格 | 免费(MIT) | GPL v3 | 免费(GPL) | 免费(MPL) |
| 批量处理 | 是(目录/ZIP) | 是 | 有限 | 否 |
| AI 管道就绪 | 是(Python API) | 是(CLI) | 否 | 否 |
| Docker 支持 | 是 | 是 | 否 | 否 |
| 学习曲线 | 低 | 高 | 低 | 低 |
| GitHub 星标 | 149,148 | 28,000 | 4,500 | 2,300 |
MarkItDown 的主要优势在于其简单性和原生 Python 集成,使其成为 AI 管道和自动化文档处理的理想选择。Pandoc 提供更广泛的格式支持但需要更多设置。Calibre 擅长电子书转换。LibreOffice 提供最高保真度的 Office 文档转换,但需要桌面环境。
局限性 / 客观评估 #
虽然 MarkItDown 功能强大,但请注意以下局限性:
- 复杂 PDF 布局——不常见或高度自定义的 PDF 布局可能无法完美转换。该工具在标准文本型 PDF 上效果最佳。
- OCR 质量——图片到文本的转换取决于 Tesseract 的准确性。低质量扫描件或手写文本可能产生不完美结果。
- 大文件内存——非常大的文件(100+ MB)在转换期间可能消耗大量 RAM。
- 自定义格式——不受原生支持的格式需要编写自定义解析器扩展。
- 无双向转换——MarkItDown 仅转换到 Markdown,不能从 Markdown 转换到其他格式。
常见问题 #
问:MarkItDown 支持哪些文件格式?
答:MarkItDown 支持 PDF、DOCX、PPTX、XLSX、HTML、XML、EPUB、JPEG、PNG、BMP、TIFF、WAV、MP3 和 ZIP 归档文件。它自动检测文件类型并应用适当的解析器。[all] 额外安装确保安装所有格式依赖项以实现最大兼容性。
问:MarkItDown 可以免费用于商业用途吗?
答:是的,MarkItDown 在 MIT 许可证下发布,允许免费用于个人、商业和企业用途。你可以修改、分发和将其集成到专有软件中,没有限制。
问:MarkItDown 与 Pandoc 相比如何?
答:MarkItDown 安装和使用更简单,特别是对于构建 AI 管道的 Python 开发人员。Pandoc 支持更多文件格式并提供更精细的控制,但学习曲线更陡。对于文档到 Markdown 的转换,MarkItDown 通常更快更直接。对于高级Agent 管理工作流,MarkItDown 的 Python API 比 Pandoc 的 CLI 集成得更顺畅。
问:MarkItDown 可以处理扫描文档的 OCR 吗?
答:是的,MarkItDown 支持图片文件的 OCR 转换。你需要在系统中安装 Tesseract OCR 和 markitdown-ocr 插件。命令相同:markitdown scan.png > scan.md。OCR 质量取决于图像分辨率和清晰度。
问:如何在生产环境中使用 MarkItDown?
答:对于生产环境,使用 pip install 'markitdown[all]' 在 Python 虚拟环境中安装 MarkItDown,使用 Python API 进行程序化访问,并在容器中运行。设置批量处理脚本或 cron 任务用于自动化文档处理。使用 -o 标志为批量操作指定输出目录。
问:MarkItDown 可以处理 ZIP 归档文件吗?
答:是的,MarkItDown 自动提取并逐个处理 ZIP 归档文件中的每个文件,将结果合并为单个 Markdown 输出。这使其非常适合批量文档转换。
结论:行动号召 #
微软 MarkItDown 是任何在数字工作流中处理文档的人不可或缺的工具。其简单的基于 pip 的安装、全面的格式支持和干净的 Python API 使其成为构建文档处理管道、AI 应用程序和知识库的理想选择。无论你是转换单个 PDF 还是自动化处理数千份文档,MarkItDown 都能提供零配置的可靠、高质量 Markdown 输出。
为了大规模托管你的文档处理基础设施,考虑在可靠的云基础设施上部署你的 MarkItDown 应用程序。使用 DigitalOcean 获取经济实惠的开发服务器,HTStack 用于生产托管,以及 WebShare 用于可靠的代理和内容分发。
立即开始:pip install 'markitdown[all]',在几秒钟内将你的第一个文档转换为 Markdown。
用于托管和代理基础设施:DigitalOcean 用于开发服务器,HTStack 用于生产托管,以及 WebShare 用于数据中心和住宅代理。
来源与进一步阅读
- 官方仓库:https://github.com/microsoft/markitdown
- PyPI 包:https://pypi.org/project/markitdown/
- 微软开源:https://opensource.microsoft.com/
- 安装指南:https://github.com/microsoft/markitdown/blob/main/README.md
- 使用示例:https://github.com/microsoft/markitdown/blob/main/USAGE.md
加入社区 #
加入 dibi8 中文 Telegram 群 讨论 MarkItDown 使用技巧。查看我们的 开源文档处理 和 AI Agent 管理 指南以获取互补工具。今天就开始转换你的文档——一条命令就足够了。
以上链接中包含联盟链接。dibi8.com 可能会在你注册时赚取佣金,而无需你支付额外费用。这有助于保持网站运行和内容免费。
💬 留言讨论