1. 專案概覽
anydoc 是一個以 Rust 為基礎的快速函式庫,可將 Word、PowerPoint、Excel、OpenDocument、RTF、EPUB、CSV 和 PDF 檔案轉換為乾淨、一致的 GitHub-Flavored Markdown,為開發者和 AI 代理提供一條從任何辦公室文件到 LLM 就緒文字的可靠路徑。
2. 背景與定位
由 Firecrawl 開發,anydoc 旨在解決文件處理和 AI 管線中反覆出現的問題:辦公室文件以多種舊式與現代格式送達,而每個現有的轉換器僅能處理其中一部分,且輸出品質和速度往往差異極大。anydoc 的核心使命是為每一種格式——從 2003 年儲存的 .doc 到昨天匯出的 .pptx——提供一個共享的文件模型和一個 Markdown 序列化器,因此表格跳脫或標題錨點的修正能同時惠及所有格式,而非逐一重新實作。
它與 Pandoc、LibreOffice 的無頭轉換等通用轉換器,或 markitdown、unstructured、docling 等 Python 工具不同,差異有三點:它是純 Rust 實作,沒有 ML 模型或外部服務;它從檔案內容偵測格式,而非信任副檔名;而且——根據 anydoc 自行發布的、針對六種競爭工具的基準測試——它是唯一涵蓋全部十四種測試格式的工具,同時在品質上得分最高,轉換速度約比次快的工具快一個數量級。anydoc 也驅動了託管的 Firecrawl Parse API,該 API 為掃描頁面加入了 OCR,而開源函式庫刻意不嘗試此功能。
3. 功能類別
📄 格式涵蓋 — 8 種文件家族,20+ 種副檔名
轉換 .doc/.docx/.docm(Word)、.ppt/.pptx/.pptm/.pps/.ppsx/.ppsm/.pot(PowerPoint)、.xls/.xlsx/.xlsm/.xlsb(Excel)、.odt/.ods/.odp(OpenDocument),以及 .rtf、.epub、.csv 和 .pdf。目的:提供一個函式庫,取代一整排單一格式的轉換器。
🧱 文件結構保真度 — 完整保真的結構元素
帶有錨點的標題、粗體/斜體/刪除線、行內程式碼和程式碼區塊、連結和交叉引用、巢狀/編號/任務清單、含合併儲存格的表格、區塊引用、腳註/尾註,以及演講者備註。目的:保留足夠的結構,使 Markdown 輸出仍可用於下游解析,而不只是文字傾印。
🖼️ 內嵌資產 — 圖片和內嵌物件
在 Markdown 中以替代文字呈現圖片,同時在底層文件模型上保留原始位元組和媒體類型;外部圖片 URL 變成一般的 Markdown 圖片連結。目的:讓呼叫端自行選擇要保留、重新託管或丟棄二進位資產。
🔌 語言繫結 — 4 種執行目標
原生 Rust crate、Node.js 套件(透過 libuv 執行緒池非阻塞)、Python 套件(釋放 GIL),以及用於瀏覽器的 WebAssembly 建置。目的:讓相同的轉換邏輯能在後端服務、CLI、筆記本或完全用戶端執行。
🤖 代理整合 — 1 個一流的 Agent Skill
以可安裝的 Agent Skill(npx skills add firecrawl/anydoc)形式提供,相容於 Claude Code、Codex、Cursor、OpenCode 及其他支援 skill 的代理。目的:讓編碼代理在會話中遇到辦公室文件時,無需自訂膠水程式碼即可讀取。
4. 重點特色
- 一個文件模型,一個序列化器。 每種格式都解析為相同的內部
Document表示,並透過單一的 GFM 序列化器呈現,因此格式錯誤只需修正一次即可套用於所有格式,而非每個解析器各修一次。 - 基於內容的格式偵測。 anydoc 直接從位元組讀取 PDF 標頭、RTF 開頭群組、OLE 串流名稱或 ZIP 套件的 mimetype,因此標籤錯誤或無副檔名的檔案仍能正確轉換(
Format::from_bytes)。 - 低於 5 毫秒的中位數轉換時間。 純 Rust,沒有 ML 模型或網路呼叫;已發布的基準測試報告中位數轉換時間為 4.4 毫秒,遠快於 LibreOffice、Pandoc 或 Python 替代方案。
- 經獨立基準測試的品質領先者。 在針對 14 種格式、100 份真實文件的六種其他轉換器比較中,anydoc 是唯一完整涵蓋所有格式的工具,且在每個受評格式上都獲得最高品質分數(以 LLM 對照頁面渲染的真實結果進行評判)。
- 內建 PDF 支援。 基於文字的 PDF 可透過配套的 pdf-inspector crate 在本機轉換——該路徑無需外部 OCR 服務。
- 型別化、依變體區分的錯誤處理。
ConvertError列舉(Unsupported、Malformed、Encrypted、ResourceLimit、MissingPart、Io)讓呼叫端程式碼能區分「跳過此檔案」的情況與真正的失敗,並在 Node/Wasm 中以error.code對應,在 Python 中以型別化例外對應。
5. 依角色區分的使用案例
- 一般開發者 — 將 anydoc 放入文件擷取管線(Rust、Node.js、Python 或瀏覽器/WASM),將混合格式的上傳內容標準化為 Markdown,無需為每種格式維護單獨的解析器。
- 資料/研究科學家(以及 AI/ML 工程師) — 使用 anydoc 將異質語料庫(報告、簡報、試算表、CSV、PDF)轉換為乾淨、結構一致的 Markdown,適合嵌入、RAG 索引或 LLM 上下文視窗。
- 專案經理/工具團隊 — 採用 Agent Skill,讓編碼代理(Claude Code、Cursor、Codex、OpenCode)能在會話中讀取以原生辦公室格式提供的設計文件、規格或會議記錄。
6. 開始使用
找到你需要的
查看支援格式表和各繫結的 API 參考(node/README.md、python/README.md、wasm/README.md),確認你的格式和執行環境已涵蓋。
安裝/整合
# CLI(無需安裝,執行預先建置的二進位檔)
npx @firecrawl/anydoc report.docx
# Node.js
npm install @firecrawl/anydoc
# Python
pip install firecrawl-anydoc
# Rust
cargo add anydoc
# 瀏覽器 / WebAssembly
npm install @firecrawl/anydoc-wasm
貢獻
git clone https://github.com/firecrawl/anydoc.git
cd anydoc
cargo test
直接在 GitHub 儲存庫 上開啟 issue 或 pull request;專案也在 tests/ 和 fuzz/ 下維護基於 fixture 的快照測試、突變測試和 cargo-fuzz 目標,供貢獻者新增格式支援。
7. 專案結構
anydoc/
├── src/ # 核心 Rust 函式庫:格式解析器 + 文件模型 + GFM 序列化器
├── node/ # Node.js 繫結(npm 套件,TypeScript 型別)
├── python/ # Python 繫結(透過 maturin 的 PyPI wheel)
├── wasm/ # WebAssembly / 瀏覽器繫結
├── skills/ # Agent Skill 定義(convert-documents-to-markdown)
├── bench/ # 速度和品質基準測試框架
├── tests/ # Fixture 語料庫、快照和穩健性測試
├── fuzz/ # 每種格式的 cargo-fuzz 目標
├── examples/ # 使用範例
└── Cargo.toml # Crate 清單(已發布版本的來源依據)
src/ 中每種格式各有一個解析器,全部匯入共享的 Document 模型後再進行渲染,這是儲存庫其餘部分(繫結、基準測試、測試)所圍繞的架構核心。
8. 相關生態系
- Firecrawl — 上層平台;anydoc 的轉換邏輯驅動了託管的 Firecrawl Parse API,該 API 為掃描/純圖片頁面加入 OCR。
- pdf-inspector — anydoc 用於本機、非 OCR PDF 文字擷取的配套 Rust crate。
- Agent Skills — anydoc 的 Agent Skill 發布所在的生態系/規範,使其可被 Claude Code、Codex、Cursor 和 OpenCode 發現。
- Crates.io / npm / PyPI — anydoc 以
anydoc(crate)、@firecrawl/anydoc和@firecrawl/anydoc-wasm(npm)以及firecrawl-anydoc(PyPI)發布官方套件。
9. 授權
✅ 可自由使用、修改和散布,包括在商業和閉源產品中(MIT 授權)。
✅ 可自由嵌入專有管線和 SaaS 產品,無需發布你自己的原始碼。
❌ 不提供任何保證;作者不對使用所產生的損害負責。
ℹ️ 必須在軟體的副本或重要部分中保留 MIT 授權條款和版權聲明。
10. 常見問題
問:anydoc 支援哪些文件格式?
答:Word(.doc/.docx/.docm)、PowerPoint(.ppt/.pptx/.pptm/.pps/.ppsx/.ppsm/.pot)、Excel(.xls/.xlsx/.xlsm/.xlsb)、OpenDocument(.odt/.ods/.odp)、RTF、EPUB、CSV 和 PDF。
問:anydoc 是否對掃描的 PDF 或圖片執行 OCR?
答:不——anydoc 透過 pdf-inspector 在本機轉換基於文字的 PDF,但不包含 OCR。對於掃描文件,託管的 Firecrawl Parse API 在相同的轉換引擎之上加入 OCR 模型。
問:我可以在不安裝任何東西的情況下使用 anydoc 嗎?
答:可以,執行 npx @firecrawl/anydoc report.docx 即可使用預先建置的二進位檔立即轉換檔案,或試用瀏覽器示範,它完全透過 WebAssembly 在用戶端執行。
問:anydoc 如何偵測檔案格式?
答:從檔案內容而非副檔名偵測——讀取 PDF 標頭、RTF 開頭群組標記、OLE 串流名稱或 ZIP 套件的 mimetype/內容類型。CSV 沒有此類標記,因此依賴副檔名或明確的格式引數。
問:anydoc 的商業使用授權為何?
答:它採用 MIT 授權,因此可自由用於商業和專有軟體;詳見第 9 節。
11. 快速連結
- 儲存庫:github.com/firecrawl/anydoc
- 即時示範/首頁:firecrawl.github.io/anydoc
- Node.js API 參考:node/README.md
- Python API 參考:python/README.md
- WebAssembly API 參考:wasm/README.md
- 基準測試方法:bench/README.md
- Agent Skill 定義:skills/convert-documents-to-markdown/SKILL.md
12. 總結
anydoc 為團隊提供單一、快速、依賴輕量的方式,將 Word、PowerPoint、Excel、OpenDocument、RTF、EPUB、CSV 和 PDF 檔案轉換為乾淨、結構忠實的 Markdown——這項任務以往需要拼接多個品質不一的格式特定工具。它最適合建置文件擷取管線的開發者、準備語料庫以供嵌入或 LLM 上下文的資料/AI 團隊,以及需要即時讀取辦公室文件的編碼代理,所有這些使用者都能受惠於其廣泛的格式涵蓋、經基準測試的輸出品質和毫秒級的轉換速度。