AnyDoc:把 Word、Excel、PPT 和 PDF 转成 Markdown
项目地址:firecrawl/anydoc
测试 API:可点击阅读原文
AnyDoc 读取 Word、PowerPoint、Excel、OpenDocument、RTF、EPUB 和 PDF,把内容统一转成 GitHub Flavored Markdown。转换在本机完成,不需要把文件交给第三方解析接口。
这个项目比较适合给知识库、RAG 和 Agent 补一个办公文档入口。扫描件 PDF、手写内容和图片文字仍需 OCR,AnyDoc 的本地解析器不会识别这些像素内容。
AnyDoc 官方浏览器演示页展示文档转 Markdown 与本地处理方式支持范围
项目公开支持 8 类文件、21 个扩展名:
- PowerPoint:
.ppt、.pps、.pot、.pptx、.pptm、.ppsx、.ppsm; - Excel:
.xls、.xlsx、.xlsm、.xlsb; - OpenDocument:
.odt、.ods、.odp;
文件类型优先从内容判断。PDF 头、RTF 起始组、OLE 流名称和 ZIP 包内的 mimetype 都能参与识别。扩展名写错时,解析器仍有机会找出真实格式;CSV 没有稳定文件签名,从字节输入时需要显式传入 csv。
统一文档模型
每种格式先进入同一套 Document 模型,再由同一个 Markdown 序列化器输出。标题、列表、合并单元格、脚注、演讲者备注和内嵌对象因此共用一套转换规则。
内嵌图片的二进制数据保留在 Document 模型中,Markdown 默认写出替代文本。需要把图片单独存入对象存储时,应调用 toDocument 读取资源,不能只拿最终 Markdown 字符串。
Node.js 绑定把转换工作放到 libuv 线程池,Python 绑定会释放 GIL,浏览器版本由 WebAssembly 执行。这些实现主要是为了处理事件循环和线程占用问题。
验证
命令行无需先全局安装:
npx @firecrawl/anydoc report.docx
保存到文件:
npx @firecrawl/anydoc slides.pptx -o slides.md
Node.js 可从路径或字节读取:
import { toDocument, toMarkdown, toMarkdownBytes } from "@firecrawl/anydoc";const markdown = await toMarkdown("report.docx");const document = await toDocument(buffer);const csv = await toMarkdownBytes(buffer, "csv");
验证时准备三份小文件:包含合并单元格的 .xlsx、带演讲者备注的 .pptx、一份文本型 PDF。检查标题层级、表格、备注和换行,再加入一份扫描 PDF,确认系统会明确进入 OCR 补充流程。
项目测试
项目说明中用 100 份真实文档比较 7 个转换器,样本覆盖 14 种格式。AnyDoc 的报告数据为:14/14 格式通过、单文档中位转换时间 4.4 毫秒、94 份文档进入质量评分、综合分 81/100。
这组数据来自仓库内的固定样本和评分脚本,本文没有独立复现。比较工具支持的格式数量不同,质量分也只覆盖成功进入评审的文档,不能把 4.4 毫秒直接套到任意文件大小和硬件。
失败条件
- Markdown 无法完整表达电子表格公式、复杂版式和动画;
- 浏览器版需要先下载数 MB 的 WebAssembly,首次加载时间取决于网络。
官方来源