过去两年,大模型的发展速度几乎超过了所有人的预期,从 ChatGPT 到 Claude,再到 DeepSeek、Kimi、通义千问等国产模型,AI 已经可以完成越来越复杂的任务:写代码、分析数据、生成方案、辅助办公,甚至开始进入企业核心业务流程。
用 AI 处理文档是现在很常见的需求,总结一份报告、让 Agent 从一堆 PPT 里提取关键信息、搭一个知识库把公司历史文档都塞进去检索。
AI 模型本身读不了 .docx、.pptx、.xlsx 这些二进制格式,得先转成纯文本或者 Markdown。
而且文档格式五花八门,.doc、.docx、PowerPoint、Excel、OpenDocument、RTF、EPUB、CSV、PDF……

今天介绍一个专门把各种办公文档转换成干净、统一的 GitHub 风格 Markdown 文档的项目 -- anydoc。
anydoc 是 Firecrawl 开源的一个 Rust 库,支持 Word、PPT、Excel、ODF 开放文档、RTF、EPUB、CSV、PDF 等文件,将文档转换成标准 GitHub 风格 Markdown。
anydoc 同时提供 Node.js、Python 以及浏览器 WebAssembly 调用接口。

支持的格式:
.doc.docx.docm | |
.ppt.pps.pot.pptx.pptm.ppsx.ppsm | |
.xls.xlsx.xlsm.xlsb | |
.odt.ods.odp | |
.rtf | |
.epub | |
.csv | |
.pdf |
14 种格式,覆盖了日常能遇到的绝大部分办公文档类型。
功能特性:
统一转换标准:所有文档格式共用一套解析与渲染逻辑,新旧文件输出效果完全一致,格式规范统一。
完整结构还原:精准还原标题、样式文本、代码块、链接、各类列表、合并单元格表格、引用、脚注及演讲备注等全部文档元素。
保留内嵌资源:支持图片、内嵌对象解析,保留资源原始数据与媒体类型,外链图片自动适配标准 Markdown 格式。
智能格式识别:基于文件内容识别格式,不受错误文件后缀影响,错标文件也可正常转换。
极速本地转换:纯 Rust 原生开发,无模型、无外网请求,单文档转换耗时中位数低于 5 毫秒。
无阻塞高性能适配:Node.js、Python 适配多线程机制,不阻塞主线程,内置完整类型提示文件,开发友好。
原生支持文本 PDF:本地直接解析文本类 PDF 文件,无需额外 OCR 服务。
AI 代理开箱即用:可一键部署为 AI 代理技能,让各类智能代理直接解析、读取办公文档。
Firecrawl 拿 anydoc 和另外六个转换工具,在覆盖 14 种格式的 100 份真实文档上做了对比测试,用 Claude Sonnet 5 作为评分裁判,从完整性、结构、格式、整洁度四个维度打分。

安装和使用
1、Agent skill
anydoc 可作为智能代理技能直接使用,让你的 AI 代理能够解析遇到的任意文档:
npx skills add firecrawl/anydoc该 Agent skill 会调用 anydoc 命令行工具转换文档的能力,兼容 Claude Code、Codex、Cursor、OpenCode 以及其他所有适配的 AI 代理程序。
2、命令行
直接用 npx 跑:
npx @firecrawl/anydoc report.docx # 转换结果输出到终端npx @firecrawl/anydoc slides.pptx -o slides.md # 输出到文件npx @firecrawl/anydoc - --format csv < data.csv # 从标准输入读取
首次执行 npx 命令时,会自动下载适配你当前操作系统的预编译二进制程序。
想要全局永久使用 anydoc 命令,执行全局安装:
npm install -g @firecrawl/anydoc运行 anydoc --help 查看全部可用参数。
3、Node.js 安装使用
安装命令:
npm install @firecrawl/anydocimport { toDocument, toMarkdown, toMarkdownBytes } from '@firecrawl/anydoc';// 通过文件路径转换const markdown = await toMarkdown('report.docx');// 传入二进制数据,自动识别文件格式const fromBytes = await toMarkdownBytes(bytes);// 手动指定格式(无文件标识的格式如 CSV 需要显式声明)const fromCsv = await toMarkdownBytes(bytes, 'csv');// 获取原始文档结构对象,包含内嵌资源const document = await toDocument(bytes);
4、Python 安装使用
安装命令:
pip install firecrawl-anydoc调用实例:
import anydoc# 通过文件路径转换markdown = anydoc.to_markdown("report.docx")# 传入二进制数据,自动识别文件格式markdown = anydoc.to_markdown_bytes(data)# 手动指定格式(CSV 这类无标识文件需要)markdown = anydoc.to_markdown_bytes(data, "csv")# 获取文档原始模型,保留内嵌资源document = anydoc.to_document(data)
npm install @firecrawl/anydoc-wasmimport init, { toMarkdownBytes, toDocument } from '@firecrawl/anydoc-wasm';await init();// 传入二进制数据,自动识别格式const markdown = toMarkdownBytes(bytes);// 手动指定文件格式const fromCsv = toMarkdownBytes(bytes, 'csv');// 获取完整文档对象,包含内嵌资源const document = toDocument(bytes);
6、RUST 安装使用
安装命令 :
cargo add anydoc调用实例:
// 通过文件路径转换let markdown = anydoc::to_markdown("report.docx")?;// 传入二进制数据,交由程序自动识别格式let markdown = anydoc::to_markdown_bytes(&bytes, None)?;// 手动指定文件格式(CSV 等场景)let markdown = anydoc::to_markdown_bytes(&bytes, anydoc::Format::Csv)?;// 获取文档原始结构,携带内嵌资源let document = anydoc::to_document(&bytes, None)?;
夜雨聆风