Anydoc: конвертация документов в Markdown на Rust

Anydoc: конвертация документов в Markdown на Rust

Anydoc — это библиотека для конвертации документов (Word, PowerPoint, Excel и др.) в чистый Markdown. Она написана на Rust и предоставляет привязки для Node.js и Python.

Этот инструмент полезен для разработчиков, которым нужно преобразовать офисные документы в Markdown, например, для подготовки текста к публикации на GitHub. Anydoc гарантирует одинаковый результат независимо от исходного формата, что уменьшает риск ошибок в конвертации. Также доступна версия для браузера на WebAssembly, что позволяет обрабатывать файлы локально без передачи данных на сервер.

Запускается через CLI с командой npx @firecrawl/anydoc и поддерживает работу с различными агентами через интеграцию с Agent Skills. Обрати внимание, что, несмотря на мощные возможности, библиотека может не полностью справляться с некоторыми типами документов без дополнительных технологий, таких как OCR для отсканированных страниц.

Проект anydoc — это библиотека на Rust, которая преобразует документы различных форматов (таких как Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV и PDF) в чистый Markdown, совместимый с GitHub. Библиотека включает привязки для Node.js, Python и WebAssembly (браузер).

Основная цель создания anydoc — быстрое преобразование офисных документов в Markdown, пригодный для больших языковых моделей, с гарантированным единообразием результата вне зависимости от формата входного документа. Библиотека была разработана компанией Firecrawl и используется в рамках продукта Firecrawl Parse, предоставляющего API для конвертации документов с поддержкой оптического распознавания текста (OCR) для сканированных страниц.

Ты можешь попробовать библиотеку прямо в своем браузере: демо-страница, на которой библиотека работает как WebAssembly, позволяет конвертировать файлы локально, не загружая их на сервер.

Быстрый старт

Навыки агента

anydoc доступен как Agent Skill, что позволяет твоему агенту обрабатывать любые документы:

npx skills add firecrawl/anydoc

CLI

Примеры команд для использования библиотеки в командной строке:

npx @firecrawl/anydoc report.docx               # Вывод Markdown в стандартный вывод
npx @firecrawl/anydoc slides.pptx -o slides.md  # Или в файл
npx @firecrawl/anydoc - --format csv < data.csv # Чтение из stdin
npx @firecrawl/anydoc scan.pdf --ocr hosted     # Сканированные страницы через Firecrawl Parse

Node.js

Для установки в проект:

npm install @firecrawl/anydoc

Пример использования:

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

// Из файла:
const markdown = await toMarkdown('report.docx');

// Чтобы включить OCR:
const markdown = await toMarkdown('report.docx', { ocr: 'hosted' });

// Из байтов, формат определяется автоматически:
const fromBytes = await toMarkdownBytes(bytes);

// Или укажи формат, если он не имеет сигнатуры (например, CSV):
const fromCsv = await toMarkdownBytes(bytes, 'csv');

// Или остановись на модели документа, которая также содержит встроенные ресурсы:
const document = await toDocument(bytes);

Python

Установка через pip:

pip install firecrawl-anydoc

Примеры кода:

import anydoc

# Из файла:
markdown = anydoc.to_markdown("report.docx")

# Чтобы включить OCR:
markdown = anydoc.to_markdown("report.docx", ocr="hosted")

# Из байтов, формат определяется автоматически:
markdown = anydoc.to_markdown_bytes(data)

# Или укажи формат, если он не имеет сигнатуры (например, CSV):
markdown = anydoc.to_markdown_bytes(data, "csv")

# Или остановись на модели документа:
document = anydoc.to_document(data)

Браузер (WebAssembly)

Установка:

npm install @firecrawl/anydoc-wasm

Код для работы с библиотекой:

import init, { toMarkdownBytes, toDocument } from '@firecrawl/anydoc-wasm';

await init();

// Из байтов, формат определяется автоматически:
const markdown = toMarkdownBytes(bytes);

// Или укажи формат, если он не имеет сигнатуры (например, CSV):
const fromCsv = toMarkdownBytes(bytes, 'csv');

// Или остановись на модели документа:
const document = toDocument(bytes);

Rust

Установка библиотеки:

cargo add anydoc

Пример использования:

// Из файла:
let markdown = anydoc::to_markdown("report.docx")?;

// Из байтов, формат определяется автоматически:
let markdown = anydoc::to_markdown_bytes(&bytes, None)?;

// Или укажи формат, если он не имеет сигнатуры (например, CSV):
let markdown = anydoc::to_markdown_bytes(&bytes, anydoc::Format::Csv)?;

// Или остановись на модели документа:
let document = anydoc::to_document(&bytes, None)?;

OCR

Библиотека anydoc может обрабатывать текстовые PDF локально, но не выполняет OCR. Если у тебя есть PDF с отсканированными или изображениями страницами, конвертация завершится с ошибкой NeedsOcr. Чтобы обработать такие документы, можно использовать опцию ocr: 'hosted'.

Особенности

  • Один выходной формат для всех входных. Каждый формат преобразуется в общую модель документа и рендерится через единый сериализатор для Markdown.
  • Полная структура документа с поддержкой заголовков, стилей, списков и таблиц.
  • Уравнения в формате LaTeX.
  • Встраиваемые ресурсы, такие как изображения, сохраняются и отображаются.
  • Ускоренное чтение формата на основе содержимого файла.
  • Быстрая конвертация, без использования внешних сервисов.
  • Совместимость с многими языками программирования и доступность через CLI.

Поддерживаемые форматы

ФорматРасширения
Word.doc, .docx, .docm
PowerPoint.ppt, .pps, .pot, .pptx, .pptm, .ppsx, .ppsm
Excel.xls, .xlsx, .xlsm, .xlsb
OpenDocument.odt, .ods, .odp
Rich Text Format.rtf
EPUB.epub
CSV.csv
PDF.pdf

Ограничения

Некоторые форматы могут не поддерживаться для конвертации, такие как зашифрованные документы или те, которые требуют OCR для работы с отсканированными страницами. В таких случаях конвертация завершится ошибкой.

Как это работает

anydoc выполняет следующие шаги:

  • Обнаружение формата на основе сигнатур в содержимом файла.
  • Парсинг формата в общую модель документа.
  • Сериализация на выход в Markdown.
  • Обработка PDF через встроенный инструмент.

Выводы одного формата обрабатываются единообразно, что избавляет от возможных ошибок при конвертации.

Лицензия

Проект лицензирован под MIT.

Радар проекта: 72 из 100 — крепкий проект

ИмпульсТемпЗрелостьСообществоСвежестьСтартПродакшенДовериеДокументацияЭкосистема72
  • Импульс 73 ≈ 47 звёзд в день
  • Темп разработки 58 27 коммитов за 12 недель
  • Зрелость 59 проекту 3 месяца, 14 релизов
  • Сообщество 65 9 участников, 1507 форков
  • Свежесть 95 последний коммит — 8 дней назад
  • Быстрый старт 75 есть: команда установки, сайт/демо, примеры
  • Готовность к продакшену 75 релиз v0.2.4, автосборка, тесты
  • Безопасность и доверие 60 лицензия MIT, организация
  • Документация 93 README 16.7 тыс. знаков, 22 раздела
  • Экосистема 64 57 подписчиков на обновления, 0 тем
Как считаем

Только открытые данные GitHub на 31.10.2026, без оценок нейросети. Каждая ось — от 0 до 100, итог — среднее.

  • Импульс — звёзд в день: за время наших замеров, а пока их нет — за всю жизнь проекта; 200 в день — максимум.
  • Темп разработки — коммитов за последние 12 недель; 300 — максимум. Пока GitHub не досчитал статистику, ось не учитывается.
  • Зрелость — возраст проекта (3 года — максимум) и число релизов (30 — максимум), поровну.
  • Сообщество — участников с коммитами (200 — максимум) и форков (5000 — максимум), поровну.
  • Свежесть — дней с последнего коммита: сегодня — 100, полгода и больше или архив — 0.
  • Быстрый старт — в README есть команда установки, раздел «быстрый старт» или примеры использования, в репозитории — Docker и папка примеров, у проекта есть сайт или демо.
  • Готовность к продакшену — релизы, версия 1.0 и выше, автосборка (GitHub Actions), тесты, лицензия, журнал изменений.
  • Безопасность и доверие — открытая лицензия (своя — половина балла), политика безопасности (SECURITY.md), проект организации, правила для участников, не в архиве.
  • Документация — объём и структура README, папка docs или сайт, оценка «здоровья сообщества» GitHub.
  • Экосистема — звёзды (50 тыс. — максимум), подписчики на обновления (1000 — максимум), темы репозитория.

Открыть на GitHub: firecrawl/anydoc →

Что нового на GitHub — короткие обзоры на русском Новые обзоры приходят в Telegram. Без спама, по делу.
Подписаться

Похожие статьи

Популярные темы на сайте