微软 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 Logo

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 归档文件,它自动逐个处理包含的每个文件并组合结果。转换流程如下:

  1. 文件检测——工具通过扩展名和 MIME 类型识别文件类型
  2. 解析器选择——根据文件类型选择适当的转换器插件
  3. 内容提取——从文件中提取原始文本和元数据
  4. Markdown 格式化——将提取的内容格式化为干净、一致的 Markdown
  5. 输出生成——将 Markdown 文本作为字符串返回或写入文件

安装与设置 #

MarkItDown 作为 PyPI 上的 Python 包分发,使用 pip 安装非常简单。以下所有命令均来自官方文档并经过验证。

通过 pip 安装(核心包) #

pip install 'markitdown[all]'

这将安装带有所有可选依赖项的核心 MarkItDown 包,包括 python-docxpython-pptxopenpyxlbeautifulsoup4pytesseract,以全面覆盖所有支持的文件类型。

验证安装 #

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]'

从源代码安装可以让你访问最新功能,并允许你将更改贡献回项目。

MarkItDown 转换流程

基本使用示例 #

将 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"]

与替代方案比较 #

功能MarkItDownPandocCalibreLibreOffice
安装方式pip install markitdownapt/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,14828,0004,5002,300

MarkItDown 的主要优势在于其简单性和原生 Python 集成,使其成为 AI 管道和自动化文档处理的理想选择。Pandoc 提供更广泛的格式支持但需要更多设置。Calibre 擅长电子书转换。LibreOffice 提供最高保真度的 Office 文档转换,但需要桌面环境。

局限性 / 客观评估 #

虽然 MarkItDown 功能强大,但请注意以下局限性:

  1. 复杂 PDF 布局——不常见或高度自定义的 PDF 布局可能无法完美转换。该工具在标准文本型 PDF 上效果最佳。
  2. OCR 质量——图片到文本的转换取决于 Tesseract 的准确性。低质量扫描件或手写文本可能产生不完美结果。
  3. 大文件内存——非常大的文件(100+ MB)在转换期间可能消耗大量 RAM。
  4. 自定义格式——不受原生支持的格式需要编写自定义解析器扩展。
  5. 无双向转换——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 可能会在你注册时赚取佣金,而无需你支付额外费用。这有助于保持网站运行和内容免费。

💬 留言讨论