Firecrawl · 文档转换引擎

文档
正文
毫秒级。

一个由 Firecrawl 打造的快速 Rust 库:把 Word、PowerPoint、Excel、 OpenDocument、RTF、EPUB、CSV 与 PDF,统一转换成干净的 GitHub 风格 Markdown。无论是什么格式,输出始终一致。

0.0 ms
中位转换耗时
0 /14
支持格式覆盖
0%
纯 Rust 实现
0 ms
内部硬性指标
/ 01

特性

为什么是 anydoc
F—01

所有格式统一输出

每种格式都解析为同一个文档模型,经同一序列化器渲染。无论是 2003 年的 .doc 还是昨天的 .pptx,转义、表格、标题锚点与脚注行为完全一致。

F—02

完整文档结构

带锚点的标题、粗体/斜体/删除线、行内代码与代码块、链接与交叉引用、保留原始编号的列表、合并单元格表格、块引用、脚注尾注与演讲者备注。

F—03

嵌入资源

图片与嵌入对象渲染为替代文本,原始字节保留在文档模型上并标记媒体类型;带外部 URL 的图片则转为普通 Markdown 图片。

F—04

基于内容的格式检测

格式从字节本身读取:PDF 头、RTF 开组、OLE 流名称、ZIP 包 mimetype。文件扩展名写错了,照样能正确转换。

F—05

纯 Rust 实现,无机器学习模型,无外部服务。单文档转换中位数低于 5ms

F—06

非侵入式绑定

Node.js 转换跑在 libuv 线程池,从不阻塞事件循环;Python 释放 GIL 让其他线程继续。TypeScript 类型与 Python 存根随包发布。

F—07

内置 PDF 支持

基于文本的 PDF 通过 pdf-inspector 在本地转换,无需 OCR 服务,数据不离开你的机器。

F—08

智能体就绪

以 Agent Skill 形式发布:一条 npx skills add firecrawl/anydoc,即可让任何智能体读取办公文档,兼容 Claude Code、Codex、Cursor、OpenCode 等。

/ 02

支持格式

8 大类 · 14 种扩展名
Word .doc.docx.docm
PowerPoint .ppt.pps.pot.pptx.pptm.ppsx.ppsm
Excel .xls.xlsx.xlsm.xlsb
OpenDocument .odt.ods.odp
RTF .rtf
EPUB .epub
CSV .csv
PDF .pdf
/ 03

快速开始

四处语言接口
report.docx → stdout
# Markdown 输出到 stdout
npx @firecrawl/anydoc report.docx

# 或输出到文件
npx @firecrawl/anydoc slides.pptx -o slides.md

# 从 stdin 读取
npx @firecrawl/anydoc - --format csv < data.csv

# 首次运行自动下载各平台二进制
# 永久安装:npm install -g @firecrawl/anydoc
npm install @firecrawl/anydoc

import { toDocument, toMarkdown, toMarkdownBytes } from '@firecrawl/anydoc';

// 从文件路径:
const markdown = await toMarkdown('report.docx');

// 从字节,格式自动检测:
const fromBytes = await toMarkdownBytes(bytes);

// 或指定格式名(无签名格式需如此):
const fromCsv = await toMarkdownBytes(bytes, 'csv');

// 或返回文档模型,携带嵌入资源:
const document = await toDocument(bytes);
pip install firecrawl-anydoc

import anydoc

# 从文件路径读取
markdown = anydoc.to_markdown("report.docx")

# 从字节,内容从自动检测
markdown = anydoc.to_markdown_bytes(data)

# 或指定格式名(无签名格式需如此)
markdown = anydoc.to_markdown_bytes(data, "csv")

# 或返回文档模型,携带嵌入资源
document = anydoc.to_document(data)
cargo add anydoc

// 从文件路径读取
let markdown = anydoc::to_markdown("report.docx")?;

// 从字节,内容自动检测
let markdown = anydoc::to_markdown_bytes(&bytes, None)?;

// 或指定格式名:
let markdown = anydoc::to_markdown_bytes(&bytes, anydoc::Format::Csv)?;

// 或返回文档模型:
let document = anydoc::to_document(&bytes, None)?;
# 让任何智能体读取办公文档
npx skills add firecrawl/anydoc

# 兼容 Claude Code · Codex · Cursor
#       OpenCode · 及其他兼容智能体

> 完整 API 参考见各语言 README —— Node / Python 绑定随包发布。

/ 04

基准测试

479 次 LLM 盲测裁决
工具格式中位ms评审文档 总分完整性结构格式整洁度
anydoc14/144.794 80 88787779
libreoffice12/141129.587 40 59434324
unstructured8/14572.958 65 76625267
markitdown6/14134.833 65 80676153
pandoc5/14102.134 57 75575839
docling4/14513.621 57 63595752
mammoth1/1452.58 70 85687455

逐格式对比(anydoc 得分): doc 88 · docm 82 · docx 86 · epub 74 · odp 87 · ods 82 · odt 80 · ppt 80 · pptx 76 · rtf 89 · xls 77 · xlsm 70 · xlsx 70 —— 在除 EPUB 外的所有被评审格式上均为最高分。

评分方式: 由 LLM 评判(Claude Sonnet 5)在盲测中,将工具输出与基准真相(文档前六页由 LibreOffice 渲染为图像)对比,按完整性 / 结构 / 格式 / 整洁度评分;交换顺序各评审一次以消除位置偏差,共 479 次裁决。总分是各工具所支持格式的平均分——因此每行平均的格式集合不同,逐格式对比才是最公平的比较。

速度: Ryzen 9 9950X3D(Windows 11 · 64GB DDR5-6400)单线程、每个文档一次预热后计时。anydoc 与各语言库的计时排除了进程启动开销。

最佳适用场景

接收混合办公文档、需要统一结构化 Markdown 输出的流水线。anydoc 是唯一覆盖全部十四种格式的工具,除 EPUB 外在所有被评审格式上最高分,且转换速度比次快工具高出一个数量级。

/ 05

工作原理

一条统一流水线
因为所有格式都流经同一个文档模型与序列化器,输出问题只需修复一次—— docx 的表格转义修复,会自动成为 rtf、odt 及其它所有格式的修复。
STEP 01

格式检测

基于内容标记而非扩展名:PDF 头、RTF 开组、OLE 流名称、ZIP 包 mimetype。

STEP 02

格式解析器

每种格式一个解析器:doc · docx · ppt · pptx · xls · xlsx · odt/ods/odp · rtf · epub · csv。

STEP 03

文档模型

所有格式统一映射到共享模型:块、内联、表格、脚注、资源。

STEP 04

GFM 序列化器

统一输出 GitHub 风格 Markdown。PDF 由 pdf-inspector 直接产出 Markdown。

/ 06

格式检测

三种方式

格式从文件内容中读取,使用规范指定的标记:PDF 头、RTF 开组、OLE 流名称、ZIP 包 mimetype 与内容类型。CSV 没有此类标记,因此通过扩展名或显式格式名识别。Node(formatFromBytes 等)与 Python(anydoc.format_from_bytes 等)提供相同函数。

format_detect.rs
Format::from_bytes(&bytes);            // Some(Format::Docx)
Format::from_extension("pptm");        // Some(Format::Pptx)
Format::from_path(Path::new("report.odt")); // Some(Format::Odt)
/ 07

开发

本地构建
build & test
cargo test
cd node && npm install && npm run build && npm test
cd python && pip install maturin && maturin develop
    && python -m unittest discover -s tests

固定语料库快照测试 · 变异测试 · 每种格式的 cargo-fuzz 目标。版本以 v<version> 标签发布,同步发布 crate、npm 包与 PyPI 轮子。许可证 MIT。