OCRmyPDF

OCRmyPDF — консольная программа для добавления распознаваемого текстового слоя в отсканированные PDF-документы без обязательной перерисовки всех страниц. Она делает сканы доступными для поиска и копирования, исправляет поворот и перекос листов, а результат может сохранить как обычный PDF или совместимый с PDF/A документ для долговременного хранения.

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

OCRmyPDF не является визуальным редактором и не предлагает панелей, миниатюр страниц или ручной правки распознанных слов. Её сильная сторона — воспроизводимый конвейер для Linux, macOS, Windows и серверных систем, где одни и те же параметры применяются к единичному скану, папке документов или автоматизированной очереди.

Скачать OCRmyPDF

Оценка 9.7 Рекомендуем
  • Редактирование PDF
  • Русский интерфейс
  • Просто новичкам
Скачать бесплатно на Windows
Лучшая альтернатива
OCRmyPDF
Оценка 8.5
  • Нет графического интерфейса
  • На Windows нужны компоненты
  • Не распознаёт рукопись
Скачать OCRmyPDF
Загрузка начнётся после нажатия

Что представляет собой OCRmyPDF

OCRmyPDF решает узкую, но технически сложную задачу: берёт PDF, в котором текст представлен главным образом изображениями страниц, распознаёт символы и помещает невидимый текстовый слой в те же координаты. Внешний вид документа при этом обычно остаётся прежним: пользователь видит исходный скан, однако поиск, выделение и копирование начинают работать. Такой подход полезен для договоров, счетов, технических инструкций, старых книг, судебных документов и любых коллекций, где важнее сохранить изображение листа, чем преобразовать его в редактируемый офисный файл.

Проект создан Джеймсом Р. Барлоу и распространяется по лицензии MPL-2.0. Выпуск 17.8.1 относится к стабильной ветке и требует Python 3.11 или новее. OCRmyPDF работает как командная программа и как библиотека Python. Основной движок распознавания — Tesseract, а операции с внутренним строением PDF выполняются через специализированные компоненты, включая pikepdf и QPDF. Для некоторых вариантов формирования PDF/A и растеризации применяется Ghostscript; современная архитектура также допускает альтернативные компоненты через плагины.

Название иногда принимают за веб-сервис, потому что встречаются сторонние страницы, контейнерные демонстрации и надстройки с браузерным окном. Основной продукт другим не становится: это локально устанавливаемое программное обеспечение. Дополнительный HTTP-интерфейс из комплекта предназначен для интеграции и тестирования в контролируемой среде, а не как публичный облачный сервис. Поэтому документы по умолчанию обрабатываются на компьютере пользователя или на его сервере и не отправляются разработчику.

Команда OCRmyPDF в терминале перед запуском обработки

Интерфейс: терминал вместо окон и кнопок

Встроенный интерфейс OCRmyPDF — командная строка. В минимальном сценарии нужно указать два пути: входной PDF и имя результата. Слева от них добавляют параметры, которые описывают язык, режим обращения со страницами, предварительную обработку, тип выходного документа и оптимизацию. Команда легко сохраняется в сценарии оболочки, журнале задания или конфигурации системы документооборота, поэтому повторный запуск даёт предсказуемый результат.

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

ocrmypdf input_scan.pdf output_searchable.pdf

После запуска программа выводит этапы работы: анализ содержимого, распознавание, постобработку, преобразование в PDF/A и оптимизацию. Прогресс показывается по страницам, а предупреждения объясняют, какие сведения не удалось сохранить или почему отдельный лист был пропущен. При пакетном запуске этот вывод можно перенаправить в журнал; для интеграции на Python доступна стандартная система логирования.

OCRmyPDF анализирует содержимое входного PDF

Как устроен конвейер обработки

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

Затем страницы, которым действительно требуется OCR, подготавливаются к распознаванию. В зависимости от параметров программа может определить поворот на 90, 180 или 270 градусов, выровнять небольшой наклон, очистить шум, удалить фон либо создать растровое представление страницы. Подготовленное изображение передаётся Tesseract или подключённому движку. Полученные слова и координаты превращаются в невидимый слой, который совмещается с визуальным содержимым.

На завершающей стадии страницы собираются, корректируются метаданные, выполняется выбранная нормализация PDF или PDF/A, а изображения при необходимости оптимизируются. OCRmyPDF сравнивает размеры и не обязана заменять встроенное изображение, если новая версия не даёт выгоды. Итог дополнительно проверяется, чтобы выявить повреждённый PDF или несоответствие ожидаемому типу файла.

Завершение анализа и начало параллельной обработки страниц

Установка и выбор дистрибутива

Linux

На Linux наиболее простой путь зависит от дистрибутива. В Ubuntu и Debian доступен системный пакет, который одновременно подтягивает подходящие зависимости. Репозиторий системы может содержать не самый новый выпуск; когда нужен более новый выпуск, сначала устанавливают системные компоненты, а затем обновляют Python-пакет в пользовательском или изолированном окружении. В Fedora, Alpine, Gentoo, Arch Linux и FreeBSD используются собственные менеджеры пакетов.

sudo apt update
sudo apt install ocrmypdf
ocrmypdf --version

Преимущество системного пакета — согласованные версии Tesseract, Ghostscript, QPDF и библиотек изображений. Python wheel удобен как официальный универсальный дистрибутив самого приложения, но не заменяет внешние программы, если они нужны выбранному конвейеру. Поэтому успешная установка wheel ещё не гарантирует, что доступны все языки, очистка unpaper или расширенная оптимизация.

macOS

На macOS рекомендуемый практический вариант — Homebrew. Формула устанавливает OCRmyPDF и основные зависимости, после чего команда становится доступной в Terminal. MacPorts предлагает отдельный пакет. Дополнительные языки Tesseract ставятся отдельно; для русскоязычных сканов нужно убедиться, что набор rus присутствует, иначе параметр языка завершится ошибкой либо будет использован другой доступный язык.

brew install ocrmypdf
brew install tesseract-lang
ocrmypdf --version

Windows

Windows поддерживается, но единого установщика, который разместил бы все компоненты одной операцией, нет. В нативной схеме требуются 64-разрядные Python, Tesseract и Ghostscript, после чего OCRmyPDF ставится через pip. Документация также описывает WSL, Docker и Cygwin64. Для большинства пользователей с опытом Linux удобен WSL; для интеграции в существующую Windows-систему подходит нативная установка, если пути к внешним программам настроены корректно.

py -m pip install ocrmypdf
py -m ocrmypdf --version
py -m ocrmypdf input.pdf output.pdf

32-разрядная Windows не поддерживается. При нескольких версиях Python безопаснее вызывать модуль через конкретный интерпретатор, а не полагаться на случайную команду из PATH. Изолированное окружение pipx или uv снижает риск конфликта библиотек. При обновлении важно проверять не только номер OCRmyPDF, но и доступность Tesseract, Ghostscript и языковых файлов.

Первый запуск и проверка результата

Для первого теста лучше взять копию небольшого документа из трёх–пяти страниц. Имена входа и выхода должны различаться, если команда не предусматривает безопасное замещение. После завершения откройте результат в обычном просмотрщике, найдите редкое слово, выделите несколько строк и вставьте их в текстовый редактор. Это быстрее показывает, совпадает ли невидимый слой с изображением и правильно ли выбран язык.

ocrmypdf -l rus test_scan.pdf test_scan_ocr.pdf

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

Не удаляйте входной файл до проверки. Даже при сохранении исходных изображений PDF проходит структурную переработку, а некоторые параметры сознательно меняют визуальный слой. Раздельные каталоги для входов, результатов и журналов упрощают повторную обработку с другими настройками.

Языки распознавания и русский текст

OCRmyPDF передаёт Tesseract явный список языков. Если ничего не указать, обычно предполагается английский. Для русскоязычного документа применяют код rus, для смешанного русского и английского — сочетание rus+eng. Языковые модели должны быть заранее установлены в каталоге tessdata, который видит используемый экземпляр Tesseract.

ocrmypdf -l rus scan.pdf scan_ocr.pdf
ocrmypdf -l rus+eng mixed.pdf mixed_ocr.pdf
tesseract --list-langs

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

OCRmyPDF не определяет язык документа автоматически. Если в одной папке смешаны разные языки, их следует разделить по заданиям или применять внешнюю классификацию. Исторические шрифты и дореформенная орфография требуют специализированных traineddata, если они доступны; обычная модель rus может хорошо распознать часть текста, но не гарантирует корректность редких литер и лигатур.

Поворот, небольшой перекос и ориентация

Параметры rotate-pages и deskew решают разные проблемы. Первый исправляет страницы, развёрнутые на четверть или половину оборота. Для выбора ориентации движок анализирует текст и возвращает угол с оценкой уверенности. Второй параметр выравнивает небольшой наклон, характерный для листа, поданного в сканер неровно. Одновременное применение допустимо: сначала устраняется грубая ориентация, затем геометрический перекос.

ocrmypdf --rotate-pages --deskew -l rus input.pdf output.pdf

Автоповорот может ошибиться на странице с одной крупной цифрой, схемой или почти без текста. Порог уверенности регулируется отдельным параметром; слишком низкое значение повышает риск ложного поворота, слишком высокое оставляет часть листов без исправления. Для однородной партии документов полезно сначала обработать небольшой набор и просмотреть все страницы, которые содержат мало текста.

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

Очистка изображения и удаление фона

OCRmyPDF умеет подключать предварительную очистку, включая unpaper. Параметр clean подготавливает изображение для OCR, а clean-final применяет очищенную версию и к видимому результату. Это принципиальная разница: первый вариант может повысить распознавание, не заставляя пользователя смотреть на преобразованный лист; второй уменьшает шум в итоговом PDF, но способен удалить тонкие линии, точки, штампы или элементы схемы.

ocrmypdf --clean --deskew input.pdf output.pdf
ocrmypdf --clean-final input.pdf output_cleaned.pdf

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

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

Что делать со страницами, где уже есть текст

По умолчанию OCRmyPDF останавливается, если обнаруживает текст, потому что повторное распознавание может повредить качественный цифровой слой. В версии 17 единый параметр mode объединяет основные стратегии. Режим default сохраняет защитное поведение, skip пропускает страницы с текстом, redo удаляет старый невидимый OCR и создаёт новый, force растеризует всё содержимое и запускает OCR заново. Дополнительный режим strip предназначен для удаления текста без нового распознавания в тех сценариях, где это требуется.

ocrmypdf --mode skip mixed.pdf mixed_out.pdf
ocrmypdf --mode redo old_ocr.pdf new_ocr.pdf
ocrmypdf --mode force damaged_text.pdf rebuilt.pdf

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

Redo пытается сохранить видимый цифровой текст и заменить лишь невидимый слой распознавания. Это полезно после некачественного старого OCR. Force действует жёстче: страница превращается в изображение, интерактивные поля и часть структурных возможностей уплощаются. Такой режим оправдан для повреждённой карты символов или осознанного сведения страницы к визуальному представлению, но не должен применяться к качественному цифровому PDF без причины.

OCRmyPDF пропускает страницу с существующим текстом

Обычный PDF, PDF/A и режим auto

Тип результата задаётся output-type. Обычный pdf стремится сохранить функции исходного документа и не требует соответствия профилю PDF/A. Варианты pdfa формируют документ для долговременного хранения с ограничениями на шифрование, внешние зависимости и некоторые метаданные. Современный режим auto пытается получить PDF/A и при невозможности корректно завершить такое преобразование может сохранить обычный PDF, вместо того чтобы полностью провалить задание.

ocrmypdf --output-type auto input.pdf output.pdf
ocrmypdf --output-type pdf input.pdf output.pdf
ocrmypdf --output-type pdfa input.pdf output_pdfa.pdf

Выбор зависит от задачи. Для фонда отсканированных документов обычно полезен PDF/A. Для подписанного, интерактивного или структурно размеченного PDF важнее сохранить свойства исходника, поэтому выбирают обычный PDF и осторожный режим страниц. Преобразование через Ghostscript может удалить дерево тегов в некоторых сценариях; когда доступность и Tagged PDF критичны, следует проверять структуру специальным валидатором и избегать ненужной конверсии.

PDF/A не допускает парольного шифрования. Если результат должен быть защищён паролем, сначала создают обычный PDF, а политику защиты применяют отдельным инструментом. Само наличие надписи PDF/A в журнале не заменяет проверку требований организации: профиль, метаданные, встроенные шрифты и процесс хранения должны соответствовать внутреннему регламенту.

Постобработка и начало преобразования OCRmyPDF в PDF/A

Индикатор преобразования страниц в PDF/A

Текстовый sidecar и извлечение распознанного текста

Параметр sidecar создаёт рядом с PDF обычный текстовый файл. Он удобен для полнотекстового индекса, поиска регулярными выражениями, первичной классификации и передачи в систему анализа. Sidecar содержит текст, который OCRmyPDF распознала в текущем запуске. Страницы, пропущенные из-за существующего текста, ограничения размера или тайм-аута, не добавляют свой старый текст автоматически.

ocrmypdf --sidecar result.txt -l rus input.pdf result.pdf

Если нужен полный текст смешанного PDF, sidecar следует дополнить извлечением уже существующего слоя через pdftotext либо другой PDF-инструмент. Это важное отличие от команды экспортировать весь документ в TXT. OCRmyPDF отвечает за OCR и сообщает именно результаты своей работы.

Можно отказаться от выходного PDF и получить только sidecar, указав соответствующий тип результата. Такой режим полезен для индексации копий, когда визуальный файл уже хранится отдельно и изменять его нельзя. Однако привязка слов к координатам в простом TXT теряется; для задач, где нужны позиции, применяют API, hOCR или плагины.

Метаданные документа

Командная строка позволяет задать заголовок, автора, тему и ключевые слова. Эти значения записываются в допустимые поля PDF и XMP с учётом выбранного выходного стандарта. При конверсии в PDF/A часть входных метаданных может оказаться недопустимой, о чём программа выводит предупреждение.

ocrmypdf --title "Технический паспорт" --author "Отдел контроля" input.pdf output.pdf

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

Для документов с юридически значимой цифровой подписью любое изменение байтов нарушает криптографическую проверку. OCRmyPDF обнаруживает подписи и по умолчанию отказывается менять такой PDF. Параметр invalidate-digital-signatures допускает продолжение только когда пользователь сознательно принимает потерю действительности подписи.

Выбор страниц и работа с крупными файлами

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

ocrmypdf --pages 1-3,8,12-15 -l rus input.pdf selected.pdf

Для очень больших страниц действуют ограничения Tesseract по пиксельным размерам. OCRmyPDF умеет уменьшать слишком крупное изображение только для распознавания, сохраняя физическую привязку слоя. Порог можно настроить; отключение автоматического уменьшения оправдано лишь при понимании ограничений движка.

Параметр skip-big пропускает страницы выше заданного числа мегапикселей, а tesseract-timeout ограничивает время OCR одной страницы. Пропуск лучше полного зависания очереди, но он создаёт документ с неполным поиском. Журнал необходимо анализировать, а пропущенные листы обрабатывать отдельным профилем с большим лимитом.

ocrmypdf --skip-big 50 --tesseract-timeout 300 big.pdf big_out.pdf

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

OCRmyPDF распределяет страницы по нескольким рабочим процессам и по умолчанию использует доступные ядра. Параметр jobs ограничивает параллелизм. На рабочей станции уменьшение числа процессов оставляет ресурсы другим приложениям; на сервере ограничение предотвращает конкуренцию нескольких заданий за память и диск.

ocrmypdf --jobs 4 -l rus input.pdf output.pdf

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

Python API допускает только одну OCR-операцию на процесс из-за глобального состояния плагинов и внутренней синхронизации. Для параллельной обработки нескольких документов используют отдельные процессы или очередь заданий. Запуск множества вложенных параллельных процессов без лимитов часто снижает производительность из-за переподписки CPU.

OCRmyPDF показывает ход параллельного распознавания

Распознавание OCRmyPDF близко к завершению

Оптимизация размера и качества

После добавления текста OCRmyPDF может оптимизировать встроенные изображения. Уровень optimize определяет глубину обработки и доступные внешние кодировщики. Программа стремится не заменять изображение, если новый вариант не уменьшает файл, поэтому итог иногда почти совпадает по размеру с входом. Это нормальная ситуация для уже хорошо сжатых JPEG.

Для монохромных страниц эффективен lossless JBIG2, если кодировщик установлен. В современной ветке опасный режим с потерями, способный подменять похожие символы, удалён. Это важное решение для договоров, счетов и технических документов: небольшая экономия объёма не должна достигаться ценой изменения визуальных знаков.

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

OCRmyPDF предупреждает о метаданных и оптимизирует изображения

Завершённая обработка OCRmyPDF с отчётом о размере

Поддерживаемые входы и ограничения форматов

Главный входной формат — PDF. Для удобства OCRmyPDF принимает одиночное изображение и может создать из него PDF, если известна корректная плотность пикселей. Для набора изображений рекомендуют сначала собрать их в PDF через img2pdf, который умеет помещать многие растровые данные без лишнего перекодирования.

ocrmypdf --image-dpi 300 page.png page.pdf
img2pdf page-*.jpg | ocrmypdf - book.pdf

Значение DPI влияет на физический размер страницы и точность совмещения невидимого текста. Если файл изображения не содержит надёжной плотности, её задают явно. Завышение DPI сделает страницу физически меньше, занижение — больше; OCR может распознать символы, но координаты и печать будут неудобными.

OCRmyPDF не является конвертером Word, Excel или HTML в PDF и не экспортирует документ в DOCX с восстановленной версткой. Она также не выполняет ручную коррекцию распознанных слов. Для редактируемого результата с таблицами и стилями нужен продукт другого класса; OCRmyPDF сохраняет визуальный PDF и добавляет поиск.

Стандартные потоки, контейнеры и серверные сценарии

Вход или выход можно связать со стандартным потоком, обозначив его дефисом. Это позволяет объединять OCRmyPDF с img2pdf, системой загрузки, хранилищем объектов или фильтром очереди без постоянных промежуточных имён. При выводе бинарного PDF в stdout журнал должен идти в stderr, иначе поток окажется повреждён текстовыми сообщениями.

img2pdf scans/*.jpg | ocrmypdf - result.pdf
ocrmypdf input.pdf - > result.pdf

Официальный контейнер упрощает зависимостями на сервере и ограничивает влияние обрабатываемого PDF на систему. В контейнер передают каталоги с файлами и явные параметры ресурсов. Для документов, которым нельзя покидать закрытый контур, контейнер остаётся локальным: наличие Docker не означает облачную передачу.

Дополнительный webservice-компонент предназначен для построения собственного интерфейса и демонстрации API. Его нельзя автоматически считать защищённым публичным сервисом. Перед сетевым развертыванием нужны аутентификация, лимиты размера, изоляция, очередь, контроль времени, антивирусная политика и очистка временных данных.

Python API и интеграция в приложение

Функция ocrmypdf.ocr позволяет вызвать тот же конвейер из Python. Параметры API близки командной строке, поэтому прототип легко перенести в код. Приложение может настроить логирование, обработать исключения и сохранить связь между заданием, входным документом и результатом.

import ocrmypdf

ocrmypdf.configure_logging(ocrmypdf.Verbosity.default)
ocrmypdf.ocr(
    'input.pdf',
    'output.pdf',
    language=['rus', 'eng'],
    deskew=True,
    output_type='auto',
)

API не следует вызывать одновременно из нескольких потоков одного процесса в расчёте на независимый OCR: библиотека использует глобальное состояние для плагинов и защищает операцию блокировкой. Для очереди документов создают рабочие процессы. Ошибки нужно различать по типу и коду, а не ловить безусловным except и помечать любой результат успешным.

Экспериментальные функции для промежуточного hOCR позволяют извлечь разметку, вручную исправить её и собрать PDF, но их интерфейс может меняться. Для устойчивой промышленной интеграции лучше опираться на публичную функцию ocr и документированные модели параметров.

Плагины и замена компонентов

Система плагинов построена на pluggy. Она позволяет добавлять аргументы, менять решение о необходимости OCR, фильтровать изображение перед распознаванием, заменять движок, растеризатор, генератор PDF/A, оптимизатор и исполнитель параллельных задач. Плагин можно подключить файлом для одного запуска либо установить пакетом.

ocrmypdf --plugin custom_filter.py input.pdf output.pdf

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

Сторонний пакет с названием, начинающимся на ocrmypdf-, не обязательно создан основной командой. Перед установкой проверяют автора, репозиторий, совместимость с версией API и модель безопасности. Плагин получает доступ к содержимому документа и может выполнять код с правами пользователя, поэтому доверие к нему столь же важно, как к самой программе.

Безопасность PDF и конфиденциальность

Локальная обработка не передаёт документ разработчику, но это не делает неизвестный PDF безопасным. Формат поддерживает сценарии, мультимедиа, формы и сложные структуры. OCRmyPDF должна открыть и интерпретировать файл, поэтому документация рекомендует обрабатывать только доверенные PDF либо изолировать задачу контейнером или виртуальной машиной.

Перед обработкой применяется pikepdf на основе QPDF, который исправляет многие синтаксические ошибки. Растеризация Ghostscript запускается с защитным режимом. Эти меры повышают устойчивость, но не превращают OCRmyPDF в средство обезвреживания. Результат, визуально похожий на вход, не является доказательством удаления всех потенциально опасных объектов.

Пароли OCRmyPDF не снимает. Защищённый файл предварительно расшифровывают отдельным инструментом при наличии законного пароля. Сертификатное шифрование также не поддерживается. Для PDF/A пароль на результате невозможен; для последующей защиты выбирают обычный PDF и отдельный контролируемый этап.

Цифровые подписи, формы и структурная разметка

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

Force-режим растеризует страницы и превращает визуальное состояние форм и аннотаций в плоское изображение. Поля перестают быть интерактивными, а скрытые слои могут исчезнуть. Skip и обычный PDF дают больше шансов сохранить цифровые страницы без изменений, однако итог всё равно нужно проверять.

Tagged PDF содержит дерево структуры для порядка чтения и специальных возможностей. OCRmyPDF не умеет восстановить полноценную логическую структуру по распознанным словам. Redo и force могут удалить несоответствующее дерево, а преобразование в PDF/A через некоторые версии Ghostscript также влияет на теги. Для доступного документа одного OCR недостаточно: нужна разметка заголовков, абзацев, таблиц и альтернативных описаний.

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

Tesseract определяет слова и их координаты, но PDF не получает от OCRmyPDF полноценную модель документа с семантическими абзацами. При копировании двух колонок просмотрщик сам решает, в каком порядке соединять фрагменты. Результат может чередовать строки соседних колонок, помещать подпись раньше изображения или смешивать колонтитул с основным текстом.

Для поиска это обычно не критично: отдельные слова остаются в нужных местах. Для экспорта сплошного текста проблема заметнее. Улучшить ситуацию можно обрезкой лишних полей, правильным поворотом и качественным сканом, но сложную газетную верстку лучше обрабатывать системой с анализом макета и экспортом структуры.

OCRmyPDF сохраняет позиционный слой, а не обещает редакционный набор. Это ключевое отличие от FineReader-подобных приложений: визуальная верность исходному PDF ставится выше восстановления таблиц, стилей и последовательности блоков.

Рукописный текст, печати и нестандартные символы

Стандартный Tesseract рассчитан на печатный текст. Связная рукопись, подписи и карандашные пометки распознаются ненадёжно, поэтому OCRmyPDF нельзя использовать как специализированную систему HTR. Даже хорошо читаемая человеком подпись обычно должна оставаться изображением, а её смысл вводится в карточку документа вручную.

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

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

Практические профили команд

Обычный русскоязычный скан

ocrmypdf -l rus --rotate-pages --deskew input.pdf output.pdf

Профиль исправляет грубую ориентацию и небольшой наклон, после чего распознаёт русский текст. Его удобно использовать как первую попытку для офисных сканов. Удаление фона и clean-final не включены, поэтому риск визуальной потери ниже.

Смешанный цифровой и сканированный PDF

ocrmypdf -l rus+eng --mode skip --output-type pdf input.pdf output.pdf

Страницы с текстом копируются без OCR, сканы получают новый слой. Обычный PDF выбран, чтобы не вводить дополнительную конверсию. После обработки проверяют, что цифровые страницы сохранили шрифты, ссылки и порядок чтения.

Замена старого невидимого слоя

ocrmypdf -l rus --mode redo --sidecar redo.txt input.pdf output.pdf

Режим redo удаляет старый невидимый OCR и распознаёт изображения, маскируя видимый цифровой текст. Sidecar помогает быстро оценить новый результат. Если старый слой нарисован нестандартно и выглядит видимым для анализатора, может потребоваться force, но он сильнее меняет страницу.

Только текст для индекса

ocrmypdf -l rus --sidecar index.txt --output-type none input.pdf -

PDF не формируется, а распознанный текст сохраняется отдельно. Такой профиль уменьшает объём вывода, но sidecar не включает текст страниц, которые были пропущены или уже содержали цифровой слой.

Ограниченная серверная задача

ocrmypdf --jobs 2 --tesseract-timeout 120 --skip-big 40 input.pdf output.pdf

Параметры сдерживают CPU, время одной страницы и размер изображения. Это не гарантирует фиксированное общее время, поскольку анализ, PDF/A и оптимизация тоже требуют ресурсов. Журнал должен отмечать пропуски для повторного задания.

Справочник основных параметров

Ниже перечислены параметры, которые чаще всего определяют поведение OCRmyPDF. Точное сочетание проверяют командой help установленной версии, потому что взаимоисключающие режимы и значения меняются аккуратнее, чем их можно угадать по старой инструкции.

ПараметрПрактический смысл
input.pdf output.pdfБазовая пара путей: читаемый вход и новый результат. Не следует бездумно указывать один и тот же файл, пока не продуман резервный экземпляр.
-l rusВыбирает русскую модель Tesseract. Для смешанного документа используют rus+eng, если оба языковых пакета установлены.
--mode skipКопирует страницы с существующим текстом и распознаёт только сканы. Подходит смешанным документам.
--mode redoУдаляет прежний невидимый OCR и создаёт новый, стараясь не затронуть видимый цифровой текст.
--mode forceРастеризует всё содержимое. Исправляет повреждённый текстовый слой, но уплощает формы и может ухудшить цифровые страницы.
--rotate-pagesИсправляет поворот на прямые углы по анализу ориентации текста. На страницах почти без текста возможны ошибки.
--rotate-pages-thresholdМеняет порог уверенности автоповорота. Повышение делает алгоритм осторожнее.
--deskewКомпенсирует небольшой наклон строк. Не заменяет коррекцию перспективы фотографии.
--cleanОчищает изображение для OCR, не обязательно показывая очищенную версию пользователю.
--clean-finalВставляет очищенное изображение в итоговый PDF. Требует визуального сравнения тонких деталей.
--remove-backgroundНормализует фон, но может затронуть цветные бланки, карандаш и слабые печати.
--sidecar text.txtСоздаёт отдельный TXT только с текстом, распознанным текущим заданием.
--pages 1-5,9Ограничивает обработку выбранными страницами. Полезно для теста и точечного повторного OCR.
--jobs 4Ограничивает число параллельных рабочих процессов и помогает контролировать нагрузку.
--tesseract-timeout 300Разрешает Tesseract работать заданное число секунд на странице; после лимита страница пропускается.
--skip-big 50Не запускает OCR для страниц крупнее заданного числа мегапикселей.
--image-dpi 300Задаёт плотность одиночного изображения, когда встроенное значение отсутствует или неверно.
--output-type autoПытается получить PDF/A и допускает переход к обычному PDF, если корректная конверсия невозможна.
--output-type pdfФормирует обычный PDF и подходит, когда важнее сохранить функции, несовместимые с PDF/A.
--output-type pdfaЯвно запрашивает PDF/A. Парольное шифрование с таким результатом несовместимо.
--optimize NВыбирает глубину оптимизации. Более высокий уровень требует дополнительных компонентов и проверки качества.
--title и --authorЗаписывают метаданные документа, но не меняют видимый текст страницы.
--invalidate-digital-signaturesРазрешает изменить подписанный PDF ценой недействительности криптографической подписи.
--keep-temporary-filesСохраняет рабочие файлы для диагностики. Они могут занимать много места и содержать конфиденциальные страницы.
--plugin module.pyПодключает расширение, которое выполняется с правами пользователя и должно быть доверенным.

Типовые ошибки и способы устранения

Сообщение об ошибке обычно точнее, чем предположение по внешнему виду PDF. Перед повтором сохраняют полный журнал, номер версии и точную команду. Ниже приведены распространённые ситуации и безопасная последовательность действий.

СитуацияЧто проверить и сделать
Команда не найденаПроверить, в какое окружение установлен пакет, выполнить модуль через python -m ocrmypdf и исправить PATH.
Не найден TesseractУстановить 64-разрядный Tesseract, проверить tesseract --version и каталог, который видит процесс.
Не найден языковой пакетВыполнить tesseract --list-langs, установить traineddata нужного кода и повторить с правильным -l.
Не найден GhostscriptУстановить совместимую 64-разрядную версию либо выбрать доступный альтернативный путь растеризации в поддерживаемой конфигурации.
В документе уже есть текстВыбрать mode skip для смешанного PDF, redo для старого OCR или force только при необходимости растеризации.
Страница пропущена по времениУвеличить tesseract-timeout, уменьшить изображение или вынести тяжёлую страницу в отдельное задание.
Страница слишком большаяРазрешить автоматическое уменьшение для Tesseract, изменить порог или подготовить копию подходящего разрешения.
Нет прав на записьВыбрать доступный каталог, проверить владельца, свободное место и отсутствие блокировки выходного файла.
Вход и выход конфликтуютСохранить результат под новым именем, проверить его и только затем заменить рабочую копию.
PDF защищён паролемЗаконно расшифровать отдельным инструментом при наличии пароля; OCRmyPDF пароль не удаляет.
PDF подписанОставить оригинал неизменным и создать поисковую копию; не инвалидировать подпись без регламента.
Повреждённый PDFПроверить открытие в нескольких программах, восстановить QPDF и повторить на копии; тяжёлое повреждение может быть необратимым.
Текст смещён относительно изображенияПроверить DPI, нестандартный плагин, изменение размера страницы и агрессивную предварительную обработку.
Русские слова распознаны латиницейУстановить rus, указать -l rus или rus+eng и проверить, что запускается ожидаемый Tesseract.
Результат стал большеОценить исходное сжатие, доступность JBIG2, уровень optimize и необходимость дополнительных преобразований.
Исчезли тонкие линииОтказаться от clean-final или remove-background, вернуть оригинал и применять очистку только к копии для OCR.
Неправильный порядок колонокСчитать PDF поисковым, а для структурированного экспорта использовать систему анализа макета.
Процесс использует всю системуОграничить jobs, запускать задания очередью и размещать временные данные на локальном диске.

Разбор качества распознавания

Оценивать OCR только по тому, что поиск нашёл одно слово, недостаточно. Качество состоит из нескольких независимых параметров: доля правильно распознанных символов, совпадение координат, порядок копирования, сохранность изображения и полнота страниц. Хороший результат для поиска может быть плохим для автоматического извлечения суммы или номера договора.

Выборочную проверку строят по рискам. Для каждой партии берут первую и последнюю страницы, самый тёмный лист, мелкую таблицу, страницу с печатью, лист после поворота и несколько случайных страниц. Ищут слова с кириллическими буквами, похожими на латинские, длинные номера, даты и знаки пунктуации.

Для количественного контроля можно иметь эталонный набор и считать символьную или словарную ошибку. Однако метрика не замечает визуальных потерь. Поэтому автоматический тест дополняют сравнением изображений либо ручным просмотром страниц, где применялись clean-final, remove-background или force.

Рабочий процесс для договоров и деловой переписки

Договоры часто смешивают цифровые страницы, сканы приложений, подписи и печати. Начинать следует с mode skip и обычного PDF: цифровой текст не распознаётся повторно, а сканы получают слой. Подписанный оригинал не меняют; поисковая копия хранится отдельно и не выдаётся за подписанный экземпляр.

Русский и английский указывают одновременно только при реальном смешении. Поля с ИНН, номером, датой и суммой проверяют отдельно. Печать может распознаваться фрагментарно, но её изображение важнее OCR, поэтому удаление фона и clean-final обычно отключают.

Sidecar удобно направить в индекс, но извлечение реквизитов должно учитывать страницы с готовым цифровым текстом. Полный индекс строят объединением распознанного текста и текста, который уже был в PDF.

Рабочий процесс для книг, журналов и старых сканов

Книжные развороты требуют аккуратного разделения страниц до OCR. OCRmyPDF не исправляет изгиб у корешка и не делит фотографию разворота автоматически. Подготовка в сканирующей программе часто даёт больший прирост качества, чем агрессивные фильтры после сборки PDF.

Для старой бумаги deskew полезен, а remove-background тестируют на нескольких страницах. Пожелтение само по себе не мешает распознаванию, если контраст текста достаточен. Очистка может стереть сноски, тонкие рамки и карандашные пометы.

Две колонки и сложные колонтитулы ухудшают порядок копирования. OCRmyPDF подходит для полнотекстового поиска по книге и сохранения изображения, но не заменяет редакционную подготовку электронного текста.

Рабочий процесс для счетов и массовой входящей корреспонденции

Большой поток лучше разделить на этапы: приём файла, антивирусная и форматная проверка, OCR в изолированном рабочем процессе, контроль кода завершения, извлечение текста, валидация результата и перемещение в постоянное хранилище. Файл нельзя считать успешно обработанным только потому, что он появился в выходной папке.

Лимиты размера, страниц, времени и параллелизма защищают очередь от одного аномального задания. Пропущенные страницы попадают в отдельный список. Повторный профиль может использовать больший timeout или другую предварительную обработку.

Данные из счета извлекает следующий компонент. OCRmyPDF поставляет поисковый PDF и текст, но не проверяет арифметику, не определяет поставщика как бизнес-сущность и не решает конфликт нескольких сумм.

Рабочий процесс для чертежей, карт и крупных листов

Крупноформатные листы быстро достигают ограничений по числу пикселей. Автоматическое уменьшение изображения для Tesseract позволяет получить OCR, не обязательно уменьшая визуальный слой, но мелкие подписи могут стать хуже. Порог и timeout подбирают на реальных листах.

Схемы содержат мало связного текста, множество линий и подписи под разными углами. Автоповорот всей страницы может оказаться ненадёжным, а deskew ориентируется на общую геометрию. Для подписей, расположенных вертикально и диагонально, нужен специализированный анализ.

Force и очистка способны превратить в растр векторные линии или удалить тонкие элементы. Если главная цель — поиск нескольких маркировок, следует минимально менять исходный PDF и проверять точность слоя в нужных зонах.

Рабочий процесс для фотографий документов

OCRmyPDF принимает одиночное изображение, но не выполняет полный набор мобильного сканера. Перспектива, блики, тени от рук, искривление и неодинаковый масштаб должны быть исправлены раньше. После этого задают достоверный DPI и создают PDF.

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

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

Сравнение OCRmyPDF с аналогами

OCRmyPDF конкурирует не со всеми PDF-редакторами, а с решениями, которые превращают сканы в поисковые документы. Разница определяется интерфейсом, автоматизацией, качеством анализа макета и тем, насколько важно сохранить исходное изображение.

ПрограммаЛучше подходит дляГлавное ограничение
OCRmyPDFСерверные сценарии, пакетный OCR и PDF/AНет встроенного графического интерфейса
PDF CommanderРучное редактирование PDF и OCR в понятном окнеНе рассчитан на сложные CLI-конвейеры
NAPS2Сканирование и OCR с настольным интерфейсомАвтоматизация менее гибкая, чем у OCRmyPDF
TesseractРаспознавание изображений и разработка своих системСам по себе не сохраняет существующий PDF-конвейер
Adobe Acrobat ProOCR и редактирование PDF в единой средеКоммерческая модель и меньше свободы серверной автоматизации
ABBYY FineReader PDFСложная верстка и экспорт в редактируемые форматыКоммерческая лицензия и более тяжёлый рабочий процесс

OCRmyPDF выбирают, когда нужны открытый код, командная строка, массовая обработка и сохранение вида PDF. PDF Commander удобнее пользователю, который хочет просматривать страницы и вручную редактировать документ. NAPS2 логичен рядом со сканером. Чистый Tesseract подходит разработчику, строящему собственный конвейер. Acrobat и FineReader сильнее там, где вместе с OCR нужны визуальная правка, анализ сложного макета и экспорт в офисные форматы.

Сильные стороны OCRmyPDF

  • Добавляет позиционный текстовый слой, обычно сохраняя визуальный вид скана.
  • Подходит для одиночных файлов, пакетных сценариев, контейнеров и серверных очередей.
  • Поддерживает многоязычный Tesseract и явный выбор моделей распознавания.
  • Умеет исправлять ориентацию, небольшой перекос и выполнять осторожную предварительную обработку.
  • Различает страницы с готовым текстом и предлагает стратегии skip, redo и force.
  • Формирует обычный PDF или PDF/A и проверяет итоговый документ.
  • Создаёт sidecar для индекса и предоставляет Python API.
  • Расширяется плагинами и сохраняет локальную модель обработки данных.

Главное достоинство — инженерная предсказуемость. Команда фиксирует все решения, её можно повторить на тестовом наборе, включить в контроль версий и применить к новой партии. Для организаций это часто важнее красивого окна: правила обработки становятся частью воспроизводимого процесса.

Слабые стороны и границы применения

  • Нет встроенного просмотра страниц и ручной коррекции слов.
  • Установка на Windows требует нескольких внешних компонентов или отдельной среды.
  • Качество зависит от Tesseract, языковых моделей и качества скана.
  • Рукопись и сложная семантическая структура документа не являются основной задачей.
  • Sidecar не объединяет автоматически старый цифровой текст с новым OCR.
  • Некоторые параметры меняют видимый слой и требуют визуального контроля.
  • PDF/A, цифровые подписи, формы и Tagged PDF требуют осознанного выбора режима.
  • Неизвестные PDF следует обрабатывать в изоляции, поскольку программа не является фильтром вредоносного содержимого.

Эти ограничения не делают программу слабой; они очерчивают её специализацию. OCRmyPDF — конвейер добавления OCR к PDF, а не универсальный редактор, сканирующая станция, система распознавания рукописи или средство восстановления логической структуры.

Как выбрать настройки без риска испортить документ

  1. Сохранить неизменяемую копию входного PDF.
  2. Определить, есть ли цифровой текст, подписи, формы и структурная разметка.
  3. Установить только нужные языки и проверить их список.
  4. Начать с минимальной команды и обычного режима обработки.
  5. Добавлять rotate-pages и deskew после теста на характерных страницах.
  6. Не включать clean-final и удаление фона для всей партии без сравнения деталей.
  7. Выбрать output-type по требованиям к PDF/A, интерактивности и тегам.
  8. Проверить поиск, копирование, координаты слоя и визуальную сохранность.
  9. Проанализировать предупреждения, пропущенные страницы и размер результата.
  10. Только после проверки применять профиль к полной очереди.

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

Обновление до ветки 17 и совместимость сценариев

Ветка 17 требует Python 3.11 и объединяет стратегии обращения с текстом в параметре mode. Старые флаги skip-text, redo-ocr и force-ocr сохранены как совместимые псевдонимы, однако новые сценарии удобнее писать через mode. При обновлении автоматизации проверяют help, коды завершения и итоговый тип PDF на тестовом наборе.

Современная архитектура расширила модель OCR-элементов и возможности плагинов, а также поддерживает альтернативные растеризаторы и генераторы. Это не означает, что любая внешняя комбинация автоматически совместима: плагин должен соответствовать API конкретной версии.

Режим output-type auto снова ориентирован на PDF/A, но способен отступить к обычному PDF, когда корректная конверсия не получается. Поэтому система, которой строго нужен PDF/A, должна проверять фактический тип результата, а не только успешный код процесса.

Диагностический журнал и воспроизводимость

Для сложной ошибки сохраняют версию OCRmyPDF, Tesseract, Ghostscript, операционную систему, точную команду и полный вывод. Одного снимка последней строки недостаточно: причина часто появляется раньше как предупреждение о странице, метаданных или зависимости.

Параметр keep-temporary-files помогает анализировать промежуточные изображения и понять, на каком этапе возникло смещение или потеря детали. Рабочие файлы могут содержать весь документ в несжатом виде, поэтому их нельзя оставлять в общем каталоге; после диагностики их удаляют по правилам конфиденциальности.

Профиль обработки полезно хранить как сценарий с комментариями и номером версии. Тогда результат можно повторить, сравнить после обновления и объяснить, почему был выбран skip, обычный PDF или конкретный язык.

Когда OCRmyPDF подходит лучше всего

Программа особенно уместна в Linux- и Python-инфраструктуре, на NAS, сервере документооборота, в контейнере и в задачах, где тысячи PDF должны пройти одинаковые этапы без ручного открытия. Она хорошо вписывается между приёмом скана и полнотекстовым индексом.

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

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

Контрольный лист для пакетного запуска

ЭтапПроверка
Приём заданияПроверить расширение, размер, число страниц и возможность чтения PDF без запуска активного содержимого.
ИдентификаторНазначить уникальное имя, чтобы журнал, временные данные и результат нельзя было перепутать с соседним заданием.
РесурсыПроверить свободное место, лимит памяти, число процессов и доступность локального временного каталога.
ЯзыкиСопоставить ожидаемые языки с выводом Tesseract и не добавлять модели, которых нет в документе.
Режим текстаВыбрать default, skip, redo или force после анализа страниц, а не по единственному примеру.
ПредобработкаВключать поворот, deskew и очистку только для наблюдаемого дефекта.
ФорматЗафиксировать, требуется ли строго PDF/A или допустим обычный PDF.
ЗапускСохранять точную команду, версии и поток ошибок.
ВалидацияПроверить код завершения, существование файла, фактический тип PDF и число страниц.
КачествоВыполнить поиск, копирование, визуальное сравнение и контроль критичных реквизитов.
ПропускиРазобрать страницы, пропущенные по тексту, размеру или времени.
ПубликацияПеремещать результат в постоянное хранилище только после всех проверок.

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

Сочетания параметров, требующие особого внимания

СочетаниеПрактическое последствие
rotate-pages + deskewПервый параметр исправляет ориентацию на прямой угол, второй — небольшой наклон. Порядок важен для корректной оценки строк.
mode skip + sidecarTXT содержит только вновь распознанные страницы; цифровой текст нужно извлекать отдельно.
mode force + формыВсе визуальные элементы сводятся к странице, а интерактивность форм теряется.
output-type pdfa + парольPDF/A не допускает шифрования, поэтому пароль применяют только к обычному PDF отдельным этапом.
clean-final + optimizeОбе операции меняют визуальные данные, поэтому сравнение с оригиналом обязательно.
jobs + несколько заданийЛимит одного процесса умножается на число одновременно запущенных документов; ресурсы планируют на всю очередь.
skip-big + индексПропущенная крупная страница останется без нового текста и должна быть явно отмечена.
timeout + тяжёлая страницаУвеличение лимита помогает только если распознавание реально продвигается; повреждённое изображение лучше подготовить отдельно.
redo + Tagged PDFЗамена слоя может сделать дерево структуры несоответствующим и привести к его удалению.
плагин + многопроцессностьРасширение импортируется в рабочих процессах и не должно зависеть от неразделяемого состояния.

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

Проверка выходного PDF техническими средствами

Визуальное открытие — только первый уровень контроля. Автоматический процесс должен убедиться, что файл существует, имеет ненулевой размер, открывается PDF-библиотекой и содержит ожидаемое число страниц. Затем проверяется фактический профиль результата: команда могла завершиться обычным PDF в режиме auto, хотя система ожидала PDF/A. Если соответствие стандарту обязательно, его подтверждают валидатором и отклоняют результат, который не прошёл проверку.

Полезно сравнивать геометрию страниц до и после обработки: MediaBox, CropBox, ориентацию и физические размеры. Неожиданное изменение указывает на неверный DPI изображения, растеризацию нестандартного листа или ошибку расширения. Число страниц и порядок должны совпадать, если команда не ограничивала диапазон.

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

Коды завершения и поведение автоматизации

Командная программа сообщает результат кодом завершения. Сценарий должен принимать успешный код, отличать предупреждаемую ситуацию от ошибки и не продолжать цепочку после сбоя. Проверка только наличия выходного имени опасна: неполный или прежний файл мог остаться после неудачного запуска. Перед заданием старый результат удаляют либо записывают в уникальное временное имя.

После успешной обработки файл сначала помещают в состояние ожидает проверки. Только затем выполняются валидация, контроль страниц, поиск тестовых слов и перенос в постоянный каталог. При ошибке сохраняются журнал и идентификатор задания, а исходный PDF остаётся неизменным. Повтор запуска с теми же параметрами не должен создавать дубль или перезаписывать ранее принятый результат без явного правила.

Предупреждения нельзя безусловно трактовать как успех. Сообщение о пропуске страницы, невозможности скопировать метаданные или переходе от PDF/A к обычному PDF может быть допустимым для одной задачи и критическим для другой. Политика приёма задаётся бизнес-требованиями, а не только кодом программы.

Имена файлов, каталоги и безопасная запись

Пути с пробелами заключают в кавычки, а сценарии не строят команду простым склеиванием непроверенных строк. Имена, пришедшие от пользователя или сетевой системы, нормализуют и передают как отдельные аргументы процесса. Это защищает от ошибочного толкования дефиса как параметра и от внедрения команд оболочки.

Для каждого задания удобны три зоны: только для чтения вход, рабочий каталог на быстром диске и каталог принятых результатов. OCRmyPDF создаёт временные данные, поэтому рабочая зона должна иметь запас места и ограниченный доступ. Конфиденциальный документ может оставаться в промежуточных изображениях до завершения очистки.

Безопасная запись выполняется во временное имя в том же файловом разделе, затем после проверки применяется атомарное переименование. Такой порядок не позволяет другой программе увидеть наполовину записанный PDF. На сетевых файловых системах семантика атомарности и блокировок проверяется отдельно.

Наблюдаемость серверной очереди

Для каждого задания фиксируют время ожидания, длительность анализа, OCR, PDF/A и оптимизации, размер входа и выхода, число страниц, число пропусков и итоговый профиль. Эти показатели помогают отличить медленный Tesseract от перегруженного диска и увидеть, что новый тип документов требует другого профиля.

Очередь ограничивает одновременно работающие документы и параметр jobs внутри каждого процесса. Например, четыре задания по восемь рабочих процессов могут создать тридцать два конкурирующих исполнителя, даже если каждое отдельно выглядит разумно. Планирование учитывает общий CPU, память, временное хранилище и внешние кодировщики.

Повторные попытки должны иметь предел. Повреждённый PDF или отсутствующий язык не исправятся бесконечным перезапуском. После нескольких одинаковых ошибок задание переводят на ручную диагностику вместе с журналом, версией компонентов и контрольной суммой входа.

Тестовый набор перед обновлением

Перед сменой версии создают небольшой набор, который представляет реальные риски: чистый скан, смешанный PDF, страницу с поворотом, слабую печать, две колонки, крупный лист, Tagged PDF и файл с цифровой подписью. Для каждого примера фиксируют ожидаемый код, тип результата, число страниц и несколько проверочных слов.

Новая версия запускается с теми же командами в отдельном окружении. Сравнивают не только размер и скорость, но и координаты текста, визуальный слой, сообщения о пропусках и сохранение структуры. Различие может быть правильным следствием исправления, однако его нужно понять до обновления рабочей очереди.

После перехода номера OCRmyPDF и внешних компонентов записывают вместе. Изменение Tesseract или Ghostscript способно повлиять на результат даже при неизменной версии основной программы. Воспроизводимость требует учитывать весь конвейер, языковые traineddata и плагины.

Когда нужен предварительный этап до OCRmyPDF

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

Если вход содержит множество отдельных изображений, их сортируют, задают ориентацию и собирают через инструмент, который не перекодирует без необходимости. Для каждого изображения проверяют DPI. После этого OCRmyPDF работает с единым PDF и сохраняет установленный порядок страниц.

Предварительная обработка не должна уничтожать оригинал. Рекомендуется хранить исходные снимки и отдельную нормализованную копию, чтобы при ошибке фильтра можно было изменить настройки без повторного сканирования. Особенно это важно для редких документов, печатей и едва заметных пометок.

Итоговая оценка

OCRmyPDF — зрелый специализированный инструмент для превращения сканированных PDF в поисковые документы. Он не маскирует сложность формата под одной кнопкой, а предлагает управляемые режимы для существующего текста, ориентации, очистки, PDF/A, оптимизации и интеграции. При корректном языке и хорошем скане результат сохраняет привычный вид страницы и добавляет практичный текстовый слой.

Лучший способ работы — начинать с минимальных изменений, хранить оригинал, проверять журнал и добавлять фильтры только по наблюдаемой причине. Особенно осторожно следует обращаться с цифровыми подписями, Tagged PDF, формами, удалением фона и полной растеризацией.

Для автоматизированной обработки, открытой инфраструктуры и локальной конфиденциальности OCRmyPDF остаётся одним из наиболее гибких решений своего класса. Для ручной коррекции, сложного анализа макета и экспорта в редактируемые форматы её разумно сочетать с графическими программами, а не требовать от консольного OCR-конвейера функций полноценного редактора.