科技前沿 推荐Skill推荐开发者工具开源

anydoc:把办公文档变成干净的 Markdown

📅 2026-08-22

Firecrawl 团队发布了一个用 Rust 写成的文档转换库 firecrawl/anydoc,把 Word、PowerPoint、Excel、OpenDocument、RTF、EPUB、CSV、PDF 统一转成干净的 GitHub Flavored Markdown。目前 17,771 stars,MIT 协议,提供 Node.js、Python、浏览器 WASM 三种绑定。定位很直接:让任何办公文档变成 LLM 可直接消费的结构化 Markdown。它也是 Firecrawl 自家 Parse 服务的底层。

核心亮点

一个输出模型,覆盖 14 种格式。 每种格式解析进同一个共享文档模型,再经同一个 GFM 序列化器输出。所以表格转义、标题锚点、脚注在 .doc.pptx.odt 上表现一致,修复一次全格式生效。这解决的是多格式文档管线最烦的「输出漂移」问题——不同格式之间不再需要各自打补丁。

速度是次名的零头。 纯 Rust、无 ML 模型、不调外部服务,转换耗时中位数约 4.4ms。官方基准测了 6 个竞品、100 份真实文档、14 个格式:

工具 覆盖格式 耗时中位数 整体分
anydoc 14/14 4.4ms 81
libreoffice 12/14 1129ms 40
unstructured 8/14 573ms 58
markitdown 6/14 135ms 33
pandoc 5/14 102ms 34
docling 4/14 514ms 21
mammoth 1/14 53ms 70

anydoc 是唯一覆盖全部格式、且在每个格式上单项都拿最高分的工具;单项分数上 doc(87)、docx(88)、rtf(88)、xls(80)都接近满分。按格式公平对比时,这个优势比整体分更直观。

干净的 Markdown 到底干净在哪。 转换保留完整文档结构:带锚点的标题、加粗/斜体/删除线、内联代码与代码块、链接和内部交叉引用、带原始编号的多级列表、含合并单元格和表头的表格、引用块、脚注与尾注、演讲者备注。表格用行间分隔而非全网格,脚注能对上,任务列表带勾选状态。这正好是内容管线入库时最需要的那套结构——不用再手工清理一遍。

内容型格式检测 + 公式转 LaTeX。 格式从文件字节读取(PDF 头、RTF 开组、OLE 流名、ZIP 包 mimetype),后缀标错也能转对。Word/PPT 的 OMML、OpenDocument/EPUB 的 MathML、RTF 公式会转成 $...$ 内联与 $$ 块,公式语义无损。这对手册、论文、技术文档的迁移是关键能力。

Agent 就绪。 项目同时发布为 Agent Skill,npx skills add firecrawl/anydoc 一次安装,Claude Code、Codex、Cursor 等 agent 都能直接读办公文档。

白物集管线的位置

白物集的内容管线入库接口读的是 content_md(GitHub Flavored Markdown)。文章、知识卡片,最终都以 Markdown 形式 POST 进 API。anydoc 正好是「源文档 → 这份 Markdown」的桥:把 Word 报告、PPT 讲稿、xlsx 数据表、EPUB 电子书一键转成管线要的格式,中间省掉人工复制粘贴那一环。转换结果直接作为 content_md 入库,不需要二次改写。

对比另一条线:白物集之前用视觉模型跑过 247 页扫描版专业书的 OCR。那是图片型 PDF,anydoc 会直接返回 Unsupported——它不解析扫描件,得先 OCR 成文本。所以两者是互补关系:文本型办公文档交给 anydoc,图片型扫描件走 OCR。管线的 Markdown 入口不变,输入侧多了一个可靠的转换器。

适合与不适合

适合: 文档类型混杂、需要统一 Markdown 输出的管线;批量转换 Word/PPT/Excel;不想嵌重型转换服务的场景(纯 Rust、无外部依赖);中文办公文档(转义与结构统一处理)。管线越杂、格式越乱,收益越大。

不适合: 图片型或扫描 PDF(返回 Unsupported,需先 OCR);需要还原品牌版面或视觉排版的场合(Markdown 只保留结构与语义,不还原布局);超出单文档范畴的 OCR、版面分析、视觉问答需求。

快速上手

CLI 最直观:

npx @firecrawl/anydoc report.docx              # 输出到 stdout
npx @firecrawl/anydoc slides.pptx -o slides.md # 输出到文件
npx @firecrawl/anydoc - --format csv < data.csv # 读 stdin

Python 绑定:

pip install firecrawl-anydoc
import anydoc

markdown = anydoc.to_markdown("report.docx")
markdown = anydoc.to_markdown_bytes(data)          # 从字节,自动检测格式
document = anydoc.to_document(data)                # 停在文档模型,自带嵌入资源

给 agent 装成技能:

npx skills add firecrawl/anydoc

浏览器里也能直接跑 WASM 演示,文件在本机转换、不上传。anydoc --help 看全部选项。

用的时候留一个注意点:转换失败只会在「完全转不出有意义的 Markdown」时报错,错误类型区分 Unsupported(未知格式、图片型 PDF)、Encrypted(加密或密码保护)、Malformed(结构不可用)、ResourceLimit(超过安全上限,如解压/嵌套/节点数)。批量处理时把 EncryptedUnsupported 单独记录、跳过并继续,而不是中断整批——这一点和管线的容错偏好一致。

← drawDB:免费在线数据库设计器,画图即建表 → Apple 频道
🍎 Apple 深度分析
本文基于 Apple 公开资料及行业分析撰写。观点仅供参考与学习交流。