在 AI 应用越来越普及的今天,把企业内部的 Word 报告、PPT 方案、Excel 报表、PDF 合同喂给大模型做摘要、提取、分析,已经是很多团队的日常操作。
但每一种格式都像一个独立的"物种",需要不同的工具链、不同的转换逻辑,出来的 Markdown 质量也是参差不齐。
更糟糕的是,你好不容易找到一个能转 Word 的工具,换个 PPT 就不支持了;找到一个能转 Excel 的,表格合并单元格又处理不好;甚至同一种格式,用不同版本生成的文件,转换结果都不一样。
有没有一个"万能解药"?
Firecrawl 团队用 Rust 写的 anydoc 就是冲着这个目标来的。

这个开源项目在 GitHub 上已经斩获了 13300+ Star,支持 14 种办公格式统一转成 GitHub-Flavored Markdown,转换速度中位数不到 5 毫秒,更关键的是——所有格式转出来的 Markdown 结构完全一致。
项目介绍
anydoc 是 Firecrawl 团队开源的 Rust 文档转换库。
Firecrawl 本身是一家专注于 AI 时代数据提取和网页抓取的公司,他们的核心产品 Firecrawl Parse 已经在处理着大量的文档转换需求。
在实际业务中他们发现,客户的文档格式五花八门:Word、PPT、Excel、PDF、EPUB、RTF、CSV……甚至还有 OpenDocument 格式。
为了给下游的 LLM 提供干净、结构化的 Markdown 输入,团队不得不维护多个转换引擎,每个引擎的输出格式和质量都不一样。
Firecrawl 的联合创始人兼 CTO Nick 提到,"我们决定从零开始写一个库,用统一的架构处理所有格式。"
于是 anydoc 诞生了。它的目标很明确:一个库,14 种格式,统一输出,极速转换。
核心亮点
14 种格式一键通吃
在 Firecrawl 做的基准测试中,anydoc 是唯一能处理全部 14 种格式的工具。其他竞品最多支持 12 种,少的只支持 1-2 种。
具体支持的格式覆盖了办公领域几乎所有主流文件类型:
• Word: .doc、.docx、.docm• PowerPoint: .ppt、.pps、.pot、.pptx、.pptm、.ppsx、.ppsm• Excel: .xls、.xlsx、.xlsm、.xlsb• OpenDocument: .odt、.ods、.odp• 其他: .rtf、.epub、.csv、.pdf
这意味着你不需要再为 Word 准备一个库、为 PPT 准备另一个、为 Excel 再找一个。anydoc 一个就搞定。
所有格式输出一致的 Markdown
anydoc 最核心的设计理念是"共享文档模型 + 单一序列化器"。
它的架构是这样的:每种格式的文档先解析成同一个内部文档模型(包含 blocks、inlines、tables 等结构化节点),然后通过同一个 GitHub-Flavored Markdown 序列化器输出。
这带来了一个非常重要的结果:无论输入是 2003 年的 .doc 文件,还是昨天刚生成的 .pptx,输出的 Markdown 结构完全一致。 标题层级、嵌套列表、合并单元格的表格、脚注、代码块——这些元素在所有格式的转换结果中都能正确保留。
5ms 极速转换
anydoc 是纯 Rust 实现,不依赖任何 ML 模型或外部服务。在 Firecrawl 的基准测试中:
• 中位数转换时间:4.4-4.7 毫秒 • 对比 LibreOffice:中位数 1129.5 毫秒,慢了约 245 倍 • 其他竞品:52-1130 毫秒,慢了约 20-245 倍
这个速度在实际场景中的意义非常大:如果你要批量处理上百份文档,anydoc 可以在几秒钟内完成,而用其他工具可能需要几分钟。
浏览器版本地转换
anydoc 提供了编译成 WebAssembly 的浏览器版本(@firecrawl/anydoc-wasm),文件在浏览器本地转换,永远不会上传到任何服务器。
这对处理敏感文档(合同、财务报表、内部报告等)来说是非常重要的特性。
你可以在自己的 Web 应用中直接集成 WASM 版本,用户上传的文件在本地浏览器中完成转换,零隐私风险。
快速上手
anydoc 提供了 Rust、Node.js、Python 三种主要的编程接口,还有 CLI 工具和 Agent Skill,不同技术栈的开发者都能快速上手。
Node.js 用法
npm install @firecrawl/anydocimport { toMarkdown, toMarkdownBytes, toDocument } from '@firecrawl/anydoc';
// 从文件路径转换
const markdown = await toMarkdown('report.docx');
// 从字节转换,自动检测格式
import { readFile } from 'fs/promises';
const bytes = await readFile('report.docx');
const markdown2 = await toMarkdownBytes(bytes);
// 显式指定格式(CSV 等无签名格式需要)
const csvBytes = await readFile('data.csv');
const markdown3 = await toMarkdownBytes(csvBytes, 'csv');
// 获取文档模型(保留嵌入资源)
const document = await toDocument(bytes);
console.log(document.markdown);
console.log(document.assets); // 嵌入的图片等资源Node.js 版本的转换运行在 libuv 线程池上,不会阻塞事件循环,TypeScript 类型定义也随包提供。
Python 用法
pip install firecrawl-anydocimport anydoc
# 从文件路径转换
markdown = anydoc.to_markdown("report.docx")
# 从字节转换
with open("report.docx", "rb") as f:
data = f.read()
markdown2 = anydoc.to_markdown_bytes(data)
# 显式指定格式
markdown3 = anydoc.to_markdown_bytes(data, "csv")
# 获取文档模型
document = anydoc.to_document(data)
print(document.markdown)
print(document.assets)Python 版本在转换时会释放 GIL,不会阻塞其他线程,同样提供了类型存根。
Rust 用法
cargo add anydocuse anydoc::{to_markdown, to_markdown_bytes, Format};
// 从文件路径转换
let markdown = anydoc::to_markdown("report.docx")?;
// 从字节转换,自动检测格式
let markdown2 = anydoc::to_markdown_bytes(&bytes, None)?;
// 显式指定格式
let markdown3 = anydoc::to_markdown_bytes(&bytes, Some(Format::Csv))?;
// 获取文档模型
let document = anydoc::to_document(&bytes, None)?;CLI 工具
不想写代码?直接用命令行:
# 基本用法
npx @firecrawl/anydoc report.docx
# 输出到文件
npx @firecrawl/anydoc slides.pptx -o slides.md
# 处理 CSV
npx @firecrawl/anydoc - --format csv < data.csvAgent Skill
anydoc 还可以作为 Agent Skill 安装到 Claude Code、Codex、Cursor 等 AI 编程助手中:
npx skills add firecrawl/anydoc安装后,你可以直接在对话中让 AI 帮你转换文档,比如:"帮我把这份季度报告转成 Markdown"。
PDF 的特殊处理
anydoc 对 PDF 的处理有一个分层策略:
• 文本型 PDF:通过内置的 pdf-inspector库直接提取文本,转换为 Markdown• 扫描型 PDF:需要 OCR 处理,anydoc 本身不做 OCR,但可以对接 Firecrawl Parse API 获取 OCR 支持
需要注意的是,PDF 不能用 to_document 方法(因为它不经过文档模型),需要使用 to_markdown_bytes 或 to_markdown。
写在最后
把文档转成 Markdown 这件事,看起来简单,但真正做好并不容易。你需要同时解决格式解析、结构还原、一致性输出、性能优化等多个难题。
anydoc 的价值在于,它不是又一个"凑合用"的转换器,而是用工程化的方式重新定义了这件事的标准:
• 一个库,14 种格式:不再需要为不同格式维护不同的工具链 • 5ms 极速转换:在批量处理和实时场景下都能跑得动 • 统一的 GFM 输出:下游工具和 LLM 不需要做任何适配 • 本地处理,隐私安全:浏览器版不上传文件,服务器版无外部依赖 • 活跃的开发生态:Firecrawl 团队持续迭代,社区贡献不断
如果你平时有大量文档需要转给大模型处理——不管是 Word 报告、PPT 方案、Excel 数据还是 PDF 合同,anydoc 都值得放进你的工具箱里试一试。
GitHub:https://github.com/firecrawl/anydoc

如果本文对您有帮助,也请帮忙点个 赞👍 + 在看 哈!❤️

夜雨聆风