# Docling: локальный разбор PDF, таблиц и OCR

Источник: https://modelium.tech/zhurnal/docling/

Docling преобразует PDF в структурированный документ и экспортирует его в Markdown или JSON; таблицы можно отдельно вывести в CSV. Для сканов нужен настроенный OCR-движок и подходящие языковые модели, а для офлайна — заранее загруженные артефакты. Проверяйте порядок чтения, ячейки и реквизиты на исходном документе: успешная конвертация не доказывает точность распознавания.

Документация Docling сверена по Git-ревизии `cd05bef2837c` от 29 сентября 2026 года. Команды ниже взяты из справочника этой ревизии, но **не запускались Modelium на PDF или OCR-модели**. Перед рабочими документами проведите самостоятельный тест на разрешённом файле.

## Что извлекает Docling и когда он полезен?

Docling — не одна OCR-модель. Он разбирает PDF и другие форматы в `DoclingDocument`: текст, таблицы, изображения, иерархию и, где доступно, координаты элементов; экспортирует результат в Markdown и JSON [s1](#src-s1)[s8](#src-s8). Для счета или инструкции это путь от исходного файла к проверяемой структуре, а не готовое заполнение реквизитов 1С. Если задача — выбрать движок для фото или скана, начните с [сравнения OCR](/zhurnal/ocr-modeli/); эта страница посвящена именно **запуску Docling, таблицам и проверке вывода**.

Вход: небольшой разрешённый PDF с текстовым слоем и второй файл со сканом страницы, русским текстом и таблицей. Ожидаемый выход: `.md` для чтения и `.json` с представлением документа; для последующего контроля строк — CSV из обнаруженной таблицы [s3](#src-s3)[s4](#src-s4)[s7](#src-s7). Сохраните исходные файлы, известные правильные значения и версии окружения до теста. Не считайте успешный код завершения оценкой качества распознавания.

## Как установить и конвертировать локальный PDF?

Документация указывает Python 3.10+ для актуальной линейки, установку `docling` через pip и поддержку macOS, Linux и Windows на обозначенных архитектурах. Вариант PyTorch, CPU/GPU и дополнительные OCR-пакеты зависят от вашего окружения; не выводите минимальную RAM или VRAM из размера пакета [s1](#src-s1)[s2](#src-s2). Выполняйте команды в отдельном Python-окружении со своей версией `python`, затем сверяйте установленный CLI:

python -m venv .venv. .venv/bin/activatepython -m pip install doclingdocling --versiondocling convert --help

Пример активации выше рассчитан на POSIX shell; на Windows используйте соответствующий способ активации virtualenv. Для закрытых файлов передавайте **локальный путь**, не URL. В закреплённом справочнике `convert` отделён от `convert-remote`: последняя команда обращается к серверу. По умолчанию `--to` выдаёт Markdown, `--output` задаёт каталог; явная команда для теста [s4](#src-s4):

mkdir -p ./docling-outdocling convert --to md --to json --output ./docling-out ./test-invoice.pdf

Документация также показывает короткий вызов `docling FILE` и Python `DocumentConverter().convert(source).document.export_to_markdown()`; синтаксис ключей CLI именно для этой ревизии сверяйте через `docling convert --help` [s1](#src-s1)[s3](#src-s3)[s4](#src-s4). Проверьте в выходном каталоге наличие и читаемость обоих файлов. JSON и Markdown не заменяют визуального сравнения с PDF: порядок строк, подписи колонок и цифры сумм могут требовать ручной сверки.

## Как получить таблицы, а не только плоский текст?

Стандартный CLI включает распознавание структуры таблиц (`--tables`) и режим `accurate`, при этом разрешает `--no-tables` и `--table-mode fast`; выбор меняет обработку, но авторская метка `accurate` не является нашим независимым замером точности [s4](#src-s4). В стандартном PDF-конвейере вариант `do_cell_matching=False` использует текстовые ячейки предсказанной структуры вместо сопоставления с ячейками PDF — диагностическая альтернатива, если колонки ошибочно склеиваются [s5](#src-s5). Запишите вариант режима, сверяйте на одном файле, не переключайте настройки после получения удобного результата без протокола.

В официальном примере `conv_res.document.tables` содержит обнаруженные таблицы; каждый `table.export_to_dataframe(doc=conv_res.document)` преобразует таблицу в DataFrame, из которого автор экспортирует CSV. Это пример API, **не** гарантия, что Docling распознает таблицу на конкретном счёте [s7](#src-s7). Для собственного скрипта после установки Docling и `pandas`:

from pathlib import Pathfrom docling.document_converter import DocumentConverterresult = DocumentConverter().convert("./test-invoice.pdf")out = Path("./docling-out")out.mkdir(exist_ok=True)for index, table in enumerate(result.document.tables, start=1):    frame = table.export_to_dataframe(doc=result.document)    frame.to_csv(out / f"table-{index}.csv", index=False)

Проверьте число строк и колонок, артикулы, единицы измерения, разделители чисел и совпадение каждой критичной суммы со сканом. Если `tables` пуст, сначала сравните наличие таблицы в исходнике и структуру PDF; не добавляйте фиктивную строку в CSV. CSV из извлечения — **черновик данных**, а не разрешение автоматически записывать их в 1С. [Сценарий сверки счёта и акта](/zhurnal/sverka-scheta-akta-i-1s/) продолжает процесс после парсинга.

## Что делать со сканами и русским OCR?

В стандартном CLI OCR и таблицы включены по умолчанию, но выбранный `--ocr-engine auto` и языки **не означают** автоматически проверенное распознавание русского [s4](#src-s4). Официальная документация перечисляет EasyOCR, RapidOCR, Tesseract CLI/tesserocr и другие движки; часть пакетов ставится отдельно, а Tesseract требует системной установки и языковых данных [s2](#src-s2)[s6](#src-s6). Для эксперимента задайте движок и язык осознанно:

docling convert --ocr-engine tesseract --ocr-lang iso:ru --to md --output ./docling-out ./scan-invoice.pdf

Это **только пример конфигурации**: нужен установленный Tesseract и русский traineddata. В этой ревизии `iso:` задаёт переносимый BCP-47 тег и преобразуется в собственный код движка; голое `ru` передаётся нативным кодом и у разных движков трактуется по-разному. Для RapidOCR `iso:ru` ведёт к `eslav` линейки PP-OCR v5, для EasyOCR — к кириллической модели; пустой выбор языка у RapidOCR обращается к китайскому варианту по умолчанию [s4](#src-s4)[s6](#src-s6). Не приписывайте Docling универсальную русскую модель и не объявляйте его OCR точнее Tesseract без одинакового корпуса и выбранного backend.

Если русский языковой файл отсутствует, подготовьте его через поддерживаемый пакет для вашей ОС; руководство Docling требует установленный Tesseract и настроенный путь к tessdata [s2](#src-s2)[s6](#src-s6). Сверяйте буквосочетания и цифры в исходнике, отдельно отмечайте ложные объединения строк, ошибки в ИНН, датах и суммах. Для PDF с готовым текстовым слоем сравните вывод стандартного пути с `--no-ocr` на одной странице; OCR не должен автоматически подменять достоверный текст [s4](#src-s4).

## Можно ли запускать Docling без сети?

По умолчанию модели могут загрузиться при первом использовании; документация предлагает `docling-tools models download`, указание каталога через `--artifacts-path` или `DOCLING_ARTIFACTS_PATH` и отдельную подготовку OCR-моделей нужных языков [s4](#src-s4)[s5](#src-s5). В сети подготовки загрузите **именно компоненты выбранного конвейера**, потом перенесите их по разрешённой процедуре. Пример для заранее подготовленного каталога:

docling convert --artifacts-path ./prepared-models --to md --output ./docling-out ./test-invoice.pdf

`convert-remote` отправляет документ в сервис; `convert` с локальным файлом — путь локальной обработки. При этом флаг `--no-enable-remote-services` запрещает явно поддерживаемые удалённые inference-сервисы, **но не является сетевым экраном** и не отменяет загрузку отсутствующих весов; это разные механизмы в документации [s4](#src-s4)[s5](#src-s5). Без независимой сетевой проверки всего окружения нельзя гарантировать «никаких исходящих соединений». [Протокол проверки офлайн-контура](/zhurnal/proverka-offline-kontura-ii/) — дополнительный контроль после успешной конвертации.

## Как решить, годится ли результат?

На одной и той же паре разрешённых PDF сохраните исходник, конфигурацию движка, версии Python/Docling и модельных артефактов, ожидаемые строки таблицы и поля. Сравните Markdown, JSON и CSV с визуальным оригиналом по порядку чтения, колонкам, цифрам и пропускам. Отдельно измерьте на **своём** оборудовании время и фактическую память, не используя чужой размер весов как требование. Если нужен поиск по документам, после качественного извлечения ещё потребуются разбиение, embeddings, хранилище и проверка цитат; Docling сам по себе не подтверждает качество итогового RAG.

**Следующий шаг:** [проверьте извлечённые реквизиты в сценарии для 1С](/zadachi/raspoznavanie-dokumentov-1s/) до загрузки в учётную систему. Modelium не запускал приведённые команды с Docling или клиентскими документами: статья опирается на закреплённую документацию, а не на собственный бенчмарк.

## Источники

1. [Docling — README, закреплённая ревизия](https://github.com/docling-project/docling/blob/cd05bef2837c879cb636b5e8e61b03405bfdf7b8/README.md) — получено 2026-09-29
2. [Docling — installation, закреплённая ревизия](https://github.com/docling-project/docling/blob/cd05bef2837c879cb636b5e8e61b03405bfdf7b8/docs/getting_started/installation.md) — получено 2026-09-29
3. [Docling — quickstart, закреплённая ревизия](https://github.com/docling-project/docling/blob/cd05bef2837c879cb636b5e8e61b03405bfdf7b8/docs/getting_started/quickstart.md) — получено 2026-09-29
4. [Docling — CLI reference, закреплённая ревизия](https://github.com/docling-project/docling/blob/cd05bef2837c879cb636b5e8e61b03405bfdf7b8/docs/reference/cli.md) — получено 2026-09-29
5. [Docling — advanced options: модели и локальное исполнение](https://github.com/docling-project/docling/blob/cd05bef2837c879cb636b5e8e61b03405bfdf7b8/docs/usage/advanced_options.md) — получено 2026-09-29
6. [Docling — OCR and language selection](https://github.com/docling-project/docling/blob/cd05bef2837c879cb636b5e8e61b03405bfdf7b8/docs/concepts/OCR.md) — получено 2026-09-29
7. [Docling — пример экспорта таблиц](https://github.com/docling-project/docling/blob/cd05bef2837c879cb636b5e8e61b03405bfdf7b8/docs/examples/export_tables.py) — получено 2026-09-29
8. [Docling — структура DoclingDocument](https://github.com/docling-project/docling/blob/cd05bef2837c879cb636b5e8e61b03405bfdf7b8/docs/concepts/docling_document.md) — получено 2026-09-29
