乐于分享
好东西不私藏

anydoc:把文档转成 Markdown这件事,终于有人做到了极致

anydoc:把文档转成 Markdown这件事,终于有人做到了极致
OPEN SOURCE · RUST

14 种格式、亚毫秒级速度、开源免费,Firecrawl 团队的又一力作

说个可能你也经历过的场景:手上有一堆 Word、PPT、Excel 文件,想喂给大模型做分析,或者想整理成文档放进知识库。第一反应是什么?我之前是用 LibreOffice 转 PDF,再丢给一些在线工具提取文本。折腾一圈下来,格式乱七八糟,表格变成一堆散落的文字,列表层级全丢了,更别提什么脚注和批注了。

直到最近看到 Firecrawl 团队开源的 anydoc,我才意识到,文档转 Markdown 这件事,原来可以做得这么干净利落。

一个工具,14 种格式

anydoc 是一个用 Rust 写的文档转换库,核心功能就一句话:把各种办公文档转成干净的 GitHub Flavored Markdown

支持的格式列表挺长的:Word(.doc.docx.docm)、PowerPoint(.ppt.pptx等 7 种变体)、Excel(.xls.xlsx.xlsm.xlsb)、OpenDocument(.odt.ods.odp)、还有 RTF、EPUB、CSV、PDF。

注意,PDF 也是原生支持的,不需要额外装什么 OCR 工具。文本型 PDF 直接转,扫描件才需要 OCR(这个走 Firecrawl 的云端 API)。

支持的 14 种文件格式.docx.doc.docm.pptx.ppt+5 更多.xlsx.xls.csv.pdfAa.rtf.epub文档演示表格PDFRTF

转换速度到底有多快?

我一开始看到"中位数 <5ms"这个数据,心想这不扯淡吗?一个 Word 文档,光读取都不止 5ms 了吧。

后来仔细看了他们的测试方法:在 Ryzen 9 9950X 上,排除进程启动时间,纯转换时间的中位数是 4.4ms。对比一下,LibreOffice 的中位数是 1129ms——anydoc 快了差不多 250 倍

它快的原因很简单:纯 Rust 实现,不调用外部服务,不依赖 ML 模型,不开子进程。整个链路在内存里跑。

转换速度对比(中位数,越短越好)anydoc4.4 mspandoc102 msmarkitdown134 msunstructured572 msLibreOffice1129 ms

跟其他工具有什么不一样?

市面上做文档转 Markdown 的工具不少,我之前用过 pandoc、mammoth、markitdown。pandoc 只支持 5 种格式,碰到 .ppt没办法。mammoth 只处理 Word。markitdown Excel 表格转换效果一般。

anydoc 最打动我的不是速度,而是一致性。因为所有格式汇入同一个文档模型,不管输入是 2003 年的 .doc还是昨天的 .pptx,输出的 Markdown 在标题锚点、表格转义、脚注格式、列表缩进这些细节上完全一致。

Firecrawl 团队用 100 个真实文档做了评测,Claude Sonnet 5 做 LLM Judge:

anydoc:94 分(14 种格式全覆盖)

LibreOffice:87 分(12 种格式)

unstructured:58 分(8 种格式)

markitdown:33 分(6 种格式)

pandoc:34 分(5 种格式)

而且 anydoc 在每个单独格式上的得分都是最高的。不是某几种格式强、其他拉胯,而是全部拉通。

实际用起来是什么体验

anydoc 提供四种使用方式:Rust 原生、Node.js、Python、WebAssembly 浏览器版。对大多数开发者,Node 和 Python 就够了。

命令行直接用:

# 最简单的方式
npx @firecrawl/anydoc report.docx

# 输出到文件
npx @firecrawl/anydoc slides.pptx -o slides.md

# 从标准输入读取
npx @firecrawl/anydoc - --format csv < data.csv

Python 里调用:

import anydoc

markdown = anydoc.to_markdown("report.docx")

withopen("report.docx""rb"as f:
    markdown = anydoc.to_markdown_bytes(f.read())

Python 绑定转换时会释放 GIL,不会阻塞其他线程。Node 版本同样不阻塞事件循环。

适合什么场景?

1. AI Agent 读取文档

一行命令让 Claude Code、Cursor 等 AI 工具读取任意办公文档:npx skills add firecrawl/anydoc。本地运行,不存在数据泄露风险。

2. 文档批量入库

做知识库、RAG 系统,几千个文档批量转换,可能比启动 LibreOffice 的时间还短。格式检测基于文件内容而非扩展名,标错扩展名也能正确识别。

3. 内容迁移

从老旧系统导出的 Word、RTF 文件,转成 Markdown 放到 GitHub 或发布到博客。

anydoc 架构流程14 种格式WPXFRE+8 种变体统一文档模型Unified Doc ModelRust 原生 · 内存处理MarkdownGFM 输出

一些需要注意的地方

扫描件 PDF 处理不了,需要 OCR 走 Firecrawl 付费 API。CSV 没有文件签名需要手动指定格式。转出来是 Markdown 不是 HTML,不能保留精确排版。

亮点:WebAssembly 版本可在浏览器直接运行,文件不离开本机。图片的 alt text 渲染到 Markdown,原始字节保留在文档模型上。

最后说两句

anydoc 让我觉得特别舒服的一点是,它知道自己的边界。不搞花里胡哨的 AI 增强,不假装能处理扫描件,就是把"文档转 Markdown"这一件事做到极致——14 种格式、亚毫秒级速度、结构完整保留。

如果你经常需要处理各种办公文档,或者在做跟文档相关的 AI 应用,anydoc 值得一试。开源、MIT 协议、不依赖任何外部服务,试错的成本几乎为零。

项目地址:github.com/firecrawl/anydoc