anydoc API 快速参考 - 五端用法对照
API 参考
anydoc 的核心 API 就三件事,五端完全一致:
| API | 做什么 | 返回 |
|---|---|---|
toMarkdown(path) | 传路径,转 Markdown | 字符串 |
toMarkdownBytes(bytes) | 传字节,转 Markdown | 字符串 |
toDocument(bytes) | 传字节,停在文档模型层 | 结构化 Document(含嵌入资源字节) |
"从路径或从字节"二选一,需要保留嵌入资源(图片等)就停在 toDocument。
五端对照
Rust
use anydoc::ConvertError;
// 从路径
let markdown = anydoc::to_markdown("report.docx")?;
// 从字节
let bytes = std::fs::read("slides.pptx")?;
let markdown = anydoc::to_markdown_bytes(&bytes, None)?;
// 文档模型(保留嵌入资源)
let document = anydoc::to_document(&bytes, None)?;安装:cargo add anydoc
Node.js
import { toMarkdown, toMarkdownBytes, toDocument } from '@firecrawl/anydoc'
const markdown = await toMarkdown('report.docx')
const fromBytes = await toMarkdownBytes(bytes)
const document = await toDocument(bytes)
// 错误码:error.code('Unsupported' | 'Malformed' | 'Encrypted' | ...)安装:npm install @firecrawl/anydoc。转换在 libuv 线程池执行,不阻塞事件循环。
Python
import anydoc
markdown = anydoc.to_markdown("report.docx")
markdown = anydoc.to_markdown_bytes(data)
document = anydoc.to_document(data)
# 错误:异常子类,如 anydoc.UnsupportedError安装:pip install firecrawl-anydoc。转换期间释放 GIL,适合与 asyncio / 多线程混用。
WebAssembly(浏览器)
import init, { toMarkdownBytes, toDocument } from '@firecrawl/anydoc-wasm'
await init() // 加载 wasm,一次即可
const markdown = toMarkdownBytes(bytes)
const document = toDocument(bytes)安装:npm install @firecrawl/anydoc-wasm。转换完全在浏览器本地执行,文件不出设备——本站首页的在线转换器就是它。
CLI
npx @firecrawl/anydoc report.docx # 输出到 stdout
npx @firecrawl/anydoc slides.pptx -o slides.md # 输出到文件
npx @firecrawl/anydoc - --format csv < data.csv # 从 stdin 读Agent Skill
npx skills add firecrawl/anydoc装完后,Claude Code / Codex / Cursor 等支持 skills 协议的 AI 编程代理即可直接读取你项目里的办公文档。
错误处理
所有语言共用同一套错误语义(ConvertError),跨语言映射:
| 变体 | 含义 | 排查思路 |
|---|---|---|
Unsupported | 不支持的格式 / 扫描版 PDF | 检查文件真实格式;扫描 PDF 需 OCR 方案(如 Firecrawl Parse) |
Malformed | 文件损坏或内容非法 | 用官方软件重新保存一份再转 |
Encrypted | 文档被加密 | 先解密 / 移除密码保护 |
ResourceLimit | 超过安全限制(大小/嵌套深度/节点数) | 拆分文档;确认不是恶意构造(zip 炸弹) |
MissingPart | 压缩包内关键部件缺失 | 文件不完整,重新导出 |
Io | 底层 I/O 错误 | 检查路径、权限、文件占用 |
Node.js 通过 error.code 访问,Python 通过异常子类(anydoc.UnsupportedError 等),Rust 直接匹配 ConvertError 枚举。
嵌入式资源怎么取
let document = anydoc::to_document(&bytes, None)?;
// document 上保留图片/嵌入对象的原始字节与媒体类型
// Markdown 中对应位置以 alt 文本呈现需要把图片落盘?遍历文档模型的资源节点,按媒体类型写文件即可。这是任何 docx 转 md 流程的常见配套动作。
需要注意的事
- 页眉、页脚、页码、日期/时间占位符在所有格式中均被排除——这是设计决策,不是 bug
- 演讲者备注始终保留——PPT 转 Markdown 时备注会出现在输出里
- 外部 URL 图片转为普通 Markdown 图片;本地嵌入图片以 alt 文本 + 模型资源形式呈现
- 版本以官方 README 为准,本文基于 v0.1.8
按语言深入请进:Node.js · Python · Rust · WebAssembly · Agent Skill;遇到错误去错误处理与限制。