anydoc 新手入门 - 第一个文档转 Markdown
新手教程
第一次用 anydoc,很多人最担心的是"会不会装不上、转不了"。其实真正影响体验的,往往是没想清楚三个问题:anydoc 能转什么、在哪里跑最快、以及输出会不会丢东西。把这三件事先弄明白,第一个转换五分钟内就能完成。
先把预期放对
anydoc 是一个转换库,不是一个文档编辑器。它的任务是:把 Word、PPT、Excel、PDF 等 14 种办公文档,变成干净、结构完整的 GitHub Flavored Markdown。开始前先接受三件事:
- 转换是本地完成的,不联网、不上传,速度极快(中位数不到 5ms)
- 输出的是纯文本 Markdown,不会保留所有视觉细节(复杂排版会有取舍)
- 页眉、页脚、页码这类噪音默认被剔除——这是刻意的,为了给 LLM 干净的输入
开始前需要知道的事
- 支持格式:14 种(Word / PowerPoint / Excel / OpenDocument / RTF / EPUB / CSV / PDF)
- 许可证:MIT,免费、可商用
- 原生绑定:Rust / Node.js / Python / 浏览器(WebAssembly)/ CLI / Agent Skill
- 已知限制:扫描版(纯图片)PDF 不支持,需要 OCR
- 官方仓库:github.com/firecrawl/anydoc
第一个转换:CLI 三连
CLI 是上手最快的路径,不需要任何项目环境,一条命令就够:
# 1. 直接输出到终端
npx @firecrawl/anydoc report.docx
# 2. 输出到文件
npx @firecrawl/anydoc slides.pptx -o slides.md
# 3. 从 stdin 读取(适合管道)
npx @firecrawl/anydoc - --format csv < data.csv第一次跑会有点慢
npx 首次运行需要下载 CLI 包,之后就快多了。想要全局装:npm i -g @firecrawl/anydoc。
转完打开输出的 Markdown 看一眼:标题有没有变成 # 层级?表格规不规整?图片是不是  形式?这些就是 anydoc 给你打的样。
常用选项速记
| 用法 | 说明 |
|---|---|
anydoc <file> | 转换文件,Markdown 输出到 stdout |
anydoc <file> -o out.md | 输出到指定文件 |
anydoc - --format csv < data.csv | 从 stdin 读,用 --format 显式声明格式 |
anydoc <file> --json | 输出 JSON(文档模型视图,含嵌入资源元数据) |
各语言的第一行代码
CLI 之外,其他语言同样一行起步:
// Node.js
import { toMarkdown } from '@firecrawl/anydoc'
const markdown = await toMarkdown('report.docx')# Python
import anydoc
markdown = anydoc.to_markdown("report.docx")// Rust
let markdown = anydoc::to_markdown("report.docx")?;// 浏览器(WASM)
import init, { toMarkdownBytes } from '@firecrawl/anydoc-wasm'
await init()
const markdown = toMarkdownBytes(bytes)想深入某一端?看API 快速参考,或者直接进对应语言的完整页(Node.js / Python / Rust / WebAssembly / Agent Skill)。
三个常见误区
误区一:以为扩展名决定格式
anydoc 按文件内容识别格式,扩展名写错也能转。但前提是内容本身是合法的文档字节——把一个文本文件改名成 .docx 是转不出来的,会返回 Malformed 错误。
误区二:以为能无损还原排版
做不到,也不需要。anydoc 的目标是信息完整(标题层级、列表、表格、脚注都在),不是视觉一致。追求像素级还原请用 PDF 转换器,追求给 LLM 干净输入请用 anydoc。
误区三:以为图片会丢
图片不会丢,但默认以 alt 文本形式出现在 Markdown 里,原始字节保留在文档模型上(toDocument 层可取,带媒体类型标注)。直接转字符串时,图片以描述文本呈现。
新手要点清单
- 用
npx @firecrawl/anydoc先跑通第一个转换 - 从 stdin 读 +
-o写文件,能组合出大部分管道场景 - 页面元素默认剔除,需要保留再说(目前不支持开关,设计如此)
- 转出来的 Markdown 先肉眼抽查:标题、表格、代码块
- 扫描版 PDF 直接用会报 Unsupported,别慌,那不是 bug
如果只记一句话:anydoc 是"文档 → Markdown"这条管道的入口,先跑通 CLI,再按需深入各语言绑定。 下一步可以去看API 快速参考,或者直接跳到你的语言那一篇。