anydoc 介绍 - 14 种文档格式转 Markdown 的开源库
"Any document in. Markdown out."——任何文档进,Markdown 出。
项目简介 What is anydoc
anydoc 是 Firecrawl 开发并开源的快速 Rust 库,专注于把各类办公文档——Word、PowerPoint、Excel、OpenDocument、RTF、EPUB、CSV 和 PDF——转换为干净的 GitHub Flavored Markdown(GFM)。
它的定位非常明确:为 LLM 时代扫清文档读取的障碍。当你要把一份 .docx 报告、一套 .pptx 幻灯片或一张 .xlsx 数据表喂给大模型时,anydoc 负责把它们变成结构完整、干净无噪音的 Markdown。单份文档的中位转换时间在个位数毫秒级,是 Firecrawl Parse 的底层转换引擎。
它不是又一个"套壳转换器":不依赖 LibreOffice、不调用 OCR 服务、不加载任何 ML 模型。整个转换就是一次纯粹的本地解析。
核心特性 Core Features
- 统一的输出标准:所有格式先解析进同一个文档模型,再由同一个 Markdown 序列化器渲染。标题(带锚点)、粗体/斜体/删除线、行内代码与代码块、链接与内部交叉引用、项目符号/编号/嵌套/任务列表(保留源编号样式)、带合并单元格的表格、块引用、脚注与尾注、演讲者备注——跨格式行为完全一致。
- 嵌入式资源保留:图片和嵌入对象在 Markdown 中以 alt 文本呈现,原始字节保留在文档模型上并标注媒体类型;外部 URL 图片转为普通 Markdown 图片。
- 基于内容的格式检测:从字节内容本身识别格式(PDF 头、RTF 起始组、OLE 流名、ZIP 包 mimetype),即使文件扩展名错误也能正确转换。
- 毫秒级性能:纯 Rust 实现,单文档中位转换耗时 < 5ms。
- PDF 本地直转:文本型 PDF 通过 pdf-inspector 本地转换,无需 OCR 服务。
- 多端绑定:Node.js(libuv 线程池,不阻塞事件循环)、Python(释放 GIL)、WebAssembly(浏览器端本地转换,文件不出设备)、CLI、Agent Skill。
- Agent 就绪:一条
npx skills add firecrawl/anydoc命令,即可让 Claude Code、Codex、Cursor 等 AI 代理直接读取办公文档。 - 安全性:内置解压、嵌套深度、节点数等固定安全限制,防范 zip 炸弹等恶意文件。
- 测试完备:快照测试、变异测试(mutation testing)、每格式 cargo-fuzz 模糊测试目标。
技术架构 Architecture
anydoc 的架构哲学可以用一句话概括:一个模型,全格式统一。
.docx / .xls / .pdf / .epub / ...
│
▼
格式解析器(per-format parsers)
│
▼
┌─────────────────────┐
│ 统一 Document 模型 │ ← 所有格式汇入同一结构
└─────────────────────┘
│
▼
统一 Markdown 序列化器
│
▼
GitHub Flavored Markdown关键依赖:
| 依赖 | 用途 |
|---|---|
| Rust | 核心语言,编译为原生库 / WebAssembly |
| calamine | Excel(xlsx/xls/xlsb 等)解析 |
| pdf-inspector | PDF 本地转换 |
| flate2 | 压缩流处理 |
| wasm-bindgen | WebAssembly 绑定 |
| maturin | Python 打包 |
注意:anydoc 不依赖 markitdown、firecrawl SDK 或 LibreOffice——它是 Firecrawl 自家的独立底层库,被 Firecrawl Parse 直接使用。
支持的格式 Supported Formats
| 类别 | 扩展名 |
|---|---|
| Word | .doc .docx .docm |
| PowerPoint | .ppt .pps .pot .pptx .pptm .ppsx .ppsm |
| Excel | .xls .xlsx .xlsm .xlsb |
| OpenDocument | .odt .ods .odp |
| Rich Text Format | .rtf |
| EPUB | .epub |
| CSV | .csv |
.pdf |
共 14 种格式,是同类工具中覆盖最全的(对比:libreoffice 12/14、unstructured 8/14、markitdown 6/14、pandoc 5/14、docling 4/14、mammoth 1/14)。
性能基准 Benchmark
Firecrawl 官方用 100 份真实文档、14 种格式做了一次七工具横向对比(得分 0-100,越高越好;速度为中位数转换耗时):
| 工具 | 格式数 | 中位耗时 | 评分 | 完整性 | 结构 | 格式 | 整洁度 |
|---|---|---|---|---|---|---|---|
| anydoc | 14/14 | 4.4ms | 81 | 87 | 79 | 78 | 81 |
| libreoffice | 12/14 | 1129.5ms | 40 | 59 | 42 | 40 | 24 |
| unstructured | 8/14 | 572.9ms | 58 | 63 | 76 | 59 | 51 |
| markitdown | 6/14 | 134.8ms | 33 | 65 | 78 | 66 | 60 |
| pandoc | 5/14 | 102.1ms | 34 | 56 | 74 | 57 | 56 |
| docling | 4/14 | 513.6ms | 21 | 57 | 60 | 60 | 57 |
| mammoth | 1/14 | 52.5ms | 8 | 70 | 84 | 71 | 75 |
结论很清楚:格式覆盖最全、速度最快、质量全面领先。详见性能基准页。
开源协议 License
anydoc 使用 MIT License,完全开源,可自由使用、修改与商用。源码在 github.com/firecrawl/anydoc,可通过 crates.io(Rust)、npm(Node/WASM/CLI)、PyPI(Python)安装。
快速体验 Try it now
一句话总结
anydoc = 14 种格式 + 一个文档模型 + 一套 Markdown 输出 + 毫秒级速度,纯本地、MIT、Agent 友好。