浏览器 WebAssembly 中使用 anydoc - 本地转换
API 参考WebAssembly
anydoc 可以编译成 WebAssembly 在浏览器里跑——这是它最特别的一点:转换完全发生在用户的浏览器本地,文件永远不出设备。本站首页的在线转换器就是这么实现的。
安装
npm install @firecrawl/anydoc-wasm纯前端项目也能用,不需要任何后端。
基础用法
import init, { toMarkdownBytes, toDocument } from '@firecrawl/anydoc-wasm'
// 1. 初始化 wasm(应用启动时做一次即可)
await init()
// 2. 从 File 对象转
const file = inputElement.files[0]
const bytes = new Uint8Array(await file.arrayBuffer())
const markdown = toMarkdownBytes(bytes)
// 3. 停在文档模型(保留嵌入资源)
const document = toDocument(bytes)完整的上传即转示例
<input type="file" id="doc" accept=".docx,.pptx,.xlsx,.pdf,.doc,.ppt,.xls,.odt,.ods,.odp,.rtf,.epub,.csv" />
<pre id="out"></pre>import init, { toMarkdownBytes } from '@firecrawl/anydoc-wasm'
await init()
document.getElementById('doc').addEventListener('change', async (e) => {
const file = e.target.files[0]
if (!file) return
const bytes = new Uint8Array(await file.arrayBuffer())
try {
const md = toMarkdownBytes(bytes)
document.getElementById('out').textContent = md
}
catch (err) {
document.getElementById('out').textContent = `转换失败:${err.code || err}`
}
})隐私卖点:为什么文件不出设备
- 转换逻辑是编译进 wasm 的 Rust 代码,在浏览器沙箱里运行
- 没有上传请求、没有后端转发,
file.arrayBuffer()读完就留在内存里 - 非常适合敏感文档(合同、病历、财务数据)的在线转换场景
性能与体积
- wasm 二进制约几 MB(gzip 后更小),首次加载会有一点延迟,之后常驻
- 转换速度和原生接近——同样的 Rust 内核,只是跑在 wasm 沙箱里
- 本站首页的转换器就是用它实现的:拖文件即转,毫秒级出结果
小提示
await init()只做一次,把实例存起来复用,别每次转换都重新初始化- 大文件(几百 MB)在浏览器里要留意内存,wasm 会占用与文件等量的内存
- 扫描版 PDF 同样返回
Unsupported——浏览器端目前没有 OCR 能力,这是 anydoc 的设计边界