微软突然开源这款文档转换工具,我们把它改造成了「在线工具箱」
支持 PDF/Word/Excel/PPT/图片一键转 Markdown,还有 OCR 和 AI 对话!

01 你是否也经历过这种绝望?
凌晨两点,你盯着屏幕上一个 200 页的 PDF 文档,欲哭无泪。
老板说:”把这个 PDF 扔给 ChatGPT,让它帮我总结一下。”
你打开 ChatGPT,发现上传按钮只能接受图片和 PDF,而 PDF 里的表格、公式、图片文字全都变成了乱码。
你又尝试把 Word 文档丢进去,结果格式全乱了,标题变成了普通文本,表格直接消失。
你开始怀疑人生:为什么 AI 这么厉害,却读不懂我的文档?
02 问题的根源:格式之殇
这是一个困扰无数人的世纪难题——
AI 擅长处理纯文本,但我们的世界充满了各种”复杂格式”。
-
📄 PDF 是”图片式”文档,文字被”拍”成了图片 -
📊 Excel 的合并单元格、公式、多 sheets 让人头疼 -
📑 Word 里的标题层级、表格、脚注堪称地狱级难度 -
🖼️ PPT 里的文字、图表、动画更是复杂到爆炸 -
📷 图片里的文字(扫描件、截图)根本无法直接复制
你以为 AI 不想帮你吗?它只是”看不清”你的文档长什么样。
03 微软出手,一个工具通吃所有格式
就在最近,微软悄悄开源了一款神器——MarkItDown。
它的使命只有一个:把世间所有格式的文档,都转换成 AI 最能理解的 Markdown 格式。
没有花哨的界面,没有复杂的配置,就是两个字——转换。
支持的格式,多到离谱
📄 文档:PDF、Word (.docx/.doc)📊 表格:Excel (.xlsx/.xls)📑 演示:PowerPoint (.pptx/.ppt)🖼️ 图片:JPG、PNG、GIF、BMP、WebP(含 OCR 识别)🎵 音频:MP3、WAV、M4A、FLAC(语音转文字)🌐 网页:HTML📚 电子书:EPUB📦 压缩包:ZIP(自动遍历内容)...以及更多格式
一个命令搞定转换
# 安装(一行命令)pip install 'markitdown[all]'# 使用(更简单)markitdown 你的文件.pdf > 输出.md
是的,你没看错,就是这么简单。
04 我们对它进行了二次开发
微软原版的 MarkItDown 是命令行工具,使用起来确实方便,但对于不熟悉命令行的同事来说,还是有些门槛。
于是我们对它进行了二次开发,用 FastAPI + HTML/JS 构建了一个在线工具箱。
现在,任何人都可以通过浏览器使用这套工具——拖拽文件,3 秒出结果,全程本地处理,隐私安全有保障。
05 先来看看效果
想象一下这样的场景:
你在工作群收到一份 50 页的 PDF 合同,想让 AI 帮你分析关键条款。
以前你要:
-
把 PDF 上传到某个网站(泄露隐私) -
手动复制粘贴(累死) -
忍受格式错乱(崩溃)
现在你只要打开这个页面,拖拽文件,3 秒出结果👇
✅ PDF → Markdown✅ Word → Markdown✅ Excel → Markdown✅ PPT → Markdown✅ 图片文字 → 提取✅ 图片内容 → AI理解✅ 任意格式 → AI对话
全程在本地处理,你的文件不会上传到任何服务器。
06 核心技术栈
这个项目用了一套轻量但强大的技术组合:
|
|
|
|
|---|---|---|
| 后端 |
|
|
| 转换引擎 |
|
|
| 前端 |
|
|
| 通信 |
|
|
后端:FastAPI 服务
# 核心 API 端点@router.post("/api/convert") # 文件转 Markdown@router.post("/api/ocr") # 图片 OCR 识别@router.post("/api/multimodal") # 多模态理解@router.post("/api/chat") # AI 对话@router.get("/api/formats") # 支持的格式列表
启动服务只需一行命令:
python app/main.py# 服务地址:http://localhost:8000# API 文档:http://localhost:8000/api/docs
前端:纯原生实现
<!-- 零框架,零依赖 --><linkrel="stylesheet"href="/static/css/style.css"><scriptsrc="/static/js/app.js"></script>
为什么不用 React/Vue?
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
07 实际效果有多炸?来看对比
测试一:PDF 论文转换
原始 PDF:
┌─────────────────────────────────────────┐│ 第三章 基于深度学习的目标检测算法 ││ ───────────────────────────── ││ 3.1 数据预处理........................││ 表 3-1 实验参数配置 ││ ┌────────┬────────┬────────┐ ││ │ 学习率 │ 批量大 │ Epochs │ ││ ├────────┼────────┼────────┤ ││ │ 0.001 │ 32 │ 100 │ ││ └────────┴────────┴────────┘ │└─────────────────────────────────────────┘
转换后 Markdown:
# 第三章 基于深度学习的目标检测算法## 3.1 数据预处理**表 3-1 实验参数配置**| 学习率 | 批量大小 | Epochs ||--------|----------|--------|| 0.001 | 32 | 100 |
标题层级保留、表格完美还原,这就是 MarkItDown 的实力。
测试二:Word 文档转换
各种格式、页眉页脚、目录、批注… 通通搞定。
测试三:图片 OCR
上传一张截图,文字瞬间提取,准确率惊人。
08 功能展示:四大核心能力
能力一:文件转 Markdown
拖拽或选择任意格式文件,自动转换为 Markdown。
支持的格式:
📄 文档:PDF、DOCX、DOC📊 表格:XLSX、XLS📑 演示:PPTX、PPT🖼️ 图片:JPG、PNG、GIF、BMP、WebP📚 电子书:EPUB🌐 网页:HTML📦 其他:CSV、JSON、XML、ZIP
能力二:图片 OCR 识别
上传图片,提取文字。支持批量处理多张图片。
能力三:多模态图片理解
上传任意图片,让 AI 帮你描述内容。还可以自定义提示词,控制输出格式。
能力四:AI 对话
直接和 AI 助手聊天,支持多轮对话上下文。
09 代码解析:关键实现
文件转换 API(后端)
@router.post("/api/convert")asyncdefconvert_file( file: UploadFile = File(...), use_ocr: bool = Form(True), use_multimodal: bool = Form(True)):"""上传文件并转换为 Markdown"""# 1. 检查文件类型 ext = get_file_extension(file.filename)if ext notin SUPPORTED_EXTENSIONS:raise HTTPException(status_code=400, detail="不支持的文件类型")# 2. 保存临时文件 temp_dir = Path(tempfile.gettempdir()) / "markitdown" temp_dir.mkdir(exist_ok=True) unique_filename = f"{uuid.uuid4().hex[:8]}_{file.filename}" file_path = temp_dir / unique_filenamewithopen(file_path, "wb") as f: f.write(await file.read())# 3. 调用 MarkItDown 转换 result = md.convert(str(file_path))# 4. 返回 Markdown 结果return JSONResponse({"success": True,"markdown": result.markdown,"text_content": result.text_content })
文件上传处理(前端)
asyncfunctionhandleConvert() {if (!state.convertFile) return;showLoading(true);const formData = newFormData(); formData.append('file', state.convertFile); formData.append('use_ocr', elements.useOcr.checked); formData.append('use_multimodal', elements.useMultimodal.checked);const response = awaitfetch('/api/convert', {method: 'POST',body: formData });const result = await response.json();if (result.success) { state.markdownResult = result.markdown; elements.markdownOutput.textContent = result.markdown;showToast('转换成功!'); } else {showToast('转换失败: ' + result.detail); }showLoading(false);}
Tab 切换(前端)
functionswitchTab(tabId) { state.currentTab = tabId;// 更新导航状态 elements.navTabs.forEach(tab => { tab.classList.toggle('active', tab.dataset.tab === tabId); });// 更新面板显示 elements.panels.forEach(panel => { panel.classList.toggle('active', panel.id === `${tabId}-panel`); });}
拖拽上传(前端)
functionsetupDropzone(dropzone, fileInput, handler) { dropzone.addEventListener('click', () => fileInput.click()); dropzone.addEventListener('dragover', (e) => { e.preventDefault(); dropzone.classList.add('dragover'); }); dropzone.addEventListener('dragleave', () => { dropzone.classList.remove('dragover'); }); dropzone.addEventListener('drop', (e) => { e.preventDefault(); dropzone.classList.remove('dragover');const files = e.dataTransfer.files;if (files.length > 0) {handler(files); } }); fileInput.addEventListener('change', () => {if (fileInput.files.length > 0) {handler(fileInput.files); } });}
10 为什么 AI 工程师都在用 MarkItDown?
原因一:大厂背书,质量有保证
MarkItDown 来自微软 AutoGen 团队,这不是个人开发者的练手项目,而是真正的企业级产品。
原因二:LLM 原生设计
Markdown 是 AI 最熟悉的格式。GPT-4 原生”会说”Markdown,训练数据中 Markdown 格式占比极高。
用 Markdown 给 AI 喂资料,效果远超纯文本。
原因三:插件生态,扩展性满分
除了核心功能,还有丰富的插件:
|
|
|
|---|---|
| markitdown-ocr |
|
| markitdown-mcp |
|
| Azure 集成 |
|
原因四:命令行/API/代码 三种使用方式
命令行(适合临时使用):
markitdown 文档.pdf -o 结果.md
Python API(适合集成到代码):
from markitdown import MarkItDownmd = MarkItDown()result = md.convert("文档.xlsx")print(result.markdown)
FastAPI 服务(适合搭建文档转换平台):
# 已经帮你写好了,直接启动python app/main.py# 访问 http://localhost:8000/docs
11 技术亮点:为什么选择这些技术?
为什么选择 Markdown 作为中间格式?
- AI 原生友好
:GPT-4 原生理解 Markdown,训练数据中 Markdown 占比极高 - 结构保留
:标题、列表、表格、代码块都能完整保留 - 纯文本
:易于传输、存储、索引 - 格式简洁
:比 HTML 轻量,比 DOCX 简单
为什么选择 FastAPI?
# 看看这简洁的代码@router.post("/api/convert")asyncdefconvert_file(file: UploadFile = File(...)): ...# 自动生成 API 文档# http://localhost:8000/api/docs
- 类型提示
:完整的 TypeScript 类型推导体验 - 自动文档
:Swagger UI + ReDoc 一键生成 - 异步支持
:文件 IO 不阻塞 - 高性能
:基于 Starlette,比 Flask 快 10 倍
12 适合哪些人?
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 免费用起来(完整教程)
方式一:5 分钟快速上手
# 1. 安装(需要 Python 3.10+)pip install 'markitdown[all]'# 2. 使用markitdown 你的文件.pdf > 输出.md
方式二:使用 Web 服务
项目自带 FastAPI 服务,克隆后直接运行:
git clone https://github.com/microsoft/markitdown.gitcd markitdown# 安装依赖pip install -r requirements.txtpip install -e 'packages/markitdown[all]'# 启动服务python app/main.py
然后访问 http://localhost:8000,上传文件即可转换。
方式三:接入 AI 助手
安装 MCP 版本,让 Claude Desktop 能直接读取你的文档:
pip install markitdown-mcpmarkitdown-mcp
然后在 Claude Desktop 配置中使用它。
14 写在最后
在 AI 时代,文档格式不应该成为获取知识的障碍。
MarkItDown 解决的就是这个问题——让 AI 能真正”读懂”你的资料,而不是对着乱码发呆。
我们对它进行了二次开发,用 FastAPI + HTML/JS 构建了在线工具箱,让不熟悉命令行的同事也能轻松使用。
工具已开源,地址:
https://github.com/microsoft/markitdown
如果你觉得有用,转发给需要的朋友,一起提升效率。
往期热门文章推荐:
-
你还在手动整理笔记?这款 AI 工具让你效率提升 10 倍 -
2024 年最值得学习的 5 个 AI 开源项目
关注后回复「文档」,领取本文涉及的完整配置文件
关于本文
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
夜雨聆风