乐于分享
好东西不私藏

微软突然开源这款文档转换工具,我们把它改造成了「在线工具箱」

微软突然开源这款文档转换工具,我们把它改造成了「在线工具箱」

支持 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
高性能 Python Web 框架,支持异步
转换引擎
MarkItDown
微软开源的文档转换库
前端
原生 HTML + CSS + JS
无框架依赖,加载飞快
通信
RESTful API
简单直观,易于扩展

后端: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?

考虑因素
选择原生 JS 的原因
体积
无需加载几百 KB 的框架
性能
单页应用,DOM 操作简单
复杂度
4 个 Tab 切换,完全不需要状态管理
部署
静态文件,直接 CDN 分发

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.convertFilereturn;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
摇身一变成为 MCP 服务器,接入 Claude Desktop
Azure 集成
接入 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 作为中间格式?

  1. AI 原生友好
    :GPT-4 原生理解 Markdown,训练数据中 Markdown 占比极高
  2. 结构保留
    :标题、列表、表格、代码块都能完整保留
  3. 纯文本
    :易于传输、存储、索引
  4. 格式简洁
    :比 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 适合哪些人?

人群
使用场景
👨‍💻 AI 应用开发者
快速构建”文档理解+AI问答”应用,输入 PDF,输出答案
📊 数据分析师
批量提取 Excel、PDF 中的数据,告别手动复制粘贴
📚 学术研究人员
快速将论文、书籍转换为可编辑文本,方便做笔记和引用
📝 内容创作者
从 PDF/Word 中提取素材,一键生成思维导图或摘要
🏢 企业用户
搭建企业级文档知识库,让 AI 能”读懂”所有历史文档

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 开源项目

关注后回复「文档」,领取本文涉及的完整配置文件


关于本文

项目
信息
转换引擎
MarkItDown (微软 AutoGen 团队)
后端框架
FastAPI
前端技术
HTML + CSS + JavaScript
开源协议
MIT
GitHub
https://github.com/microsoft/markitdown
想要获取我修改后的工具可关注公众号,进我们的社区群获取