
嗨,我是小华同学,专注解锁高效工作与前沿AI工具!每日精选开源技术、实战技巧,助你省时50%、领先他人一步。👉免费订阅,与10万+技术人共享升级秘籍!
文档处理最烦的,往往不是“转成 Markdown”,而是 Word、PPT、Excel、PDF 每种格式都带着自己的脾气。
anydoc 的思路很直接:先把不同文件解析成同一个 Document 模型,再从同一条出口生成干净 Markdown。
如果你正在做 RAG、知识库、文档问答或 Agent 文件读取,这个项目值得先收藏。本文只讲它解决了什么问题,以及接入前必须知道的边界。

很多团队一开始会给每种文件找一个工具:DOCX 用一个解析器,PPTX 再接一个,PDF 还要单独处理,最后把结果拼到同一条 AI 流程里。
问题很快就会出现:
真正难的是让“输入格式不同”不再影响“输出结构”。
一句话理解:anydoc 是一个用 Rust 编写的文档转换底座,把多种办公文档统一转成 GitHub-Flavored Markdown。
官方 README 列出的输入包括 Word、PowerPoint、Excel、OpenDocument、RTF、EPUB、CSV 和 PDF,同时提供 Rust、Node.js、Python、浏览器 WebAssembly 和 CLI 绑定。项目还附带 Agent Skill,可以让兼容的编程 Agent 直接学会调用它读取文档。

官方在线 Demo 还有一个很值得注意的细节:浏览器版本使用 WebAssembly 在本地完成转换,文件不会上传到服务器。对于内部资料、合同和本地知识库,这个默认路径很有吸引力。
处理环节 | 传统拼接式方案 | anydoc 的统一路线 |
|---|---|---|
文件识别 | 经常按扩展名分流 | 根据文件内容标记判断格式 |
解析结果 | 每个工具一套结构 | 汇入共享 Document 模型 |
Markdown 输出 | 各工具自己拼规则 | 统一 GFM 序列化器 |
表格、脚注、标题 | 需要逐格式修补 | 在统一输出层集中处理 |
嵌入图片和对象 | 容易在中间丢失 | 模型保留资源字节和媒体类型 |

这个设计带来的实际收益是:修一次 Markdown 转义、表格或标题锚点问题,多个输入格式都能一起受益。

这条链路对 AI 应用尤其重要:你可以把 Markdown 作为通用中间格式,也可以保留 Document 模型里的图片和嵌入资源,不必一开始就把所有内容压扁成纯文本。
项目支持 .doc、.docx、.docm,多种 PowerPoint 和 Excel 格式,以及 OpenDocument、RTF、EPUB、CSV、PDF。对于“用户随手上传什么都可能有”的系统,这比只支持 DOCX 的解析器更省分流逻辑。
README 列出的结构包括标题锚点、粗体、斜体、删除线、行内代码、代码块、链接、内部交叉引用、嵌套列表、合并单元格、表头、引用、脚注、尾注和演讲者备注。
图片和嵌入对象会在 Markdown 中以替代文本呈现,同时原始字节会保留在 Document 模型中,并带有媒体类型信息。做知识库时,你可以根据业务决定:只喂文字,还是把图片资产一起入库。
项目强调纯 Rust、无机器学习模型、无外部服务。README 的基准测试中,anydoc 在 100 份真实文档、14 种格式上给出的中位转换时间是 4.4ms。不过这是项目自己的测试结果,真实耗时仍要用你的文件集回归。
项目基准指标 | anydoc 结果 |
|---|---|
覆盖格式 | 14/14 |
中位转换时间 | 4.4ms |
综合得分 | 81 |
测试文档 | 100 份 |
它不仅是一个库,还提供了 Agent Skill:
npx skills add firecrawl/anydoc
```bash安装之后,Agent 可以把文档转换当成一个标准能力来调用。对 Codex、Claude Code、Cursor 这类需要读取项目资料和附件的工作流来说,这个入口比每次手写解析脚本更容易复用。
npx @firecrawl/anydoc report.docx
npx @firecrawl/anydoc slides.pptx -o slides.md
npx @firecrawl/anydoc - --format csv < data.csv
```bashnpm install @firecrawl/anydoc
```bashimport { toMarkdown, toMarkdownBytes } from '@firecrawl/anydoc'
const markdown = await toMarkdown('report.docx')
const fromBytes = await toMarkdownBytes(bytes, 'csv')
```bashnpm install @firecrawl/anydoc-wasm
```bashimport init, { toMarkdownBytes } from '@firecrawl/anydoc-wasm'
await init()
const markdown = toMarkdownBytes(bytes)
```bash适合:
不适合直接当成:
anydoc 解决的是文档结构归一化,不是所有文档问题:
如果你的系统正在被“每种文件一个解析器”拖慢,anydoc 值得作为统一入口试一轮。它最有价值的地方,不是格式列表很长,而是把格式差异压在解析层,把后续 AI、搜索和入库流程统一起来。
后续我会继续拆解它的 Document 数据结构、Node/Python 绑定和 Agent Skill 实际接入方式。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。