Извлечение текста из PDF с помощью OCR на C#

Обзор

Обычное извлечение текста читает текстовый слой PDF документа. Когда страница представляет собой сканированное изображение или иным образом не содержит выделяемого текста, такие классы, как TextFragmentAbsorber, ничего не возвращают, потому что читать нечего.

Для таких случаев Aspose.PDF for .NET предоставляет класс OcrTextAbsorber (пространство имён Aspose.Pdf.Ocr). Он распознаёт простой текст на страницах любого PDF документа с помощью OCR (оптического распознавания символов) и возвращает его в виде строки. Он следует стандартному для Aspose.PDF шаблону absorber/visitor, поэтому подключается к тем же точкам входа Accept, что и другие абсорберы.

Распознавание текста на отдельной странице PDF

Создайте OcrTextAbsorber, вызовите метод Accept страницы и считайте результат из свойства Text. Вызов absorber.Visit(page) — прямой эквивалент page.Accept(absorber).

Распознавание текста во всём PDF документе

Вызовите метод Accept коллекции Pages, чтобы распознать каждую страницу. Текст каждой страницы объединяется с использованием разделителя страниц из параметров.

Настройка параметров распознавания

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

Член По умолчанию Значение Проверка
Language OcrLanguage.English Язык распознавания.
Resolution 300 Разрешение распознавания в DPI. Практический диапазон ~200–600. Более высокие значения требуют больше памяти/процессора при незначительном выигрыше в точности. Выбрасывает ArgumentOutOfRangeException, если <= 0.
PageSeparator "\n\n" Вставляется между распознанным текстом соседних страниц (не перед первой страницей). string.Empty объединяет страницы без разрыва. Выбрасывает ArgumentNullException, если задано null.

Автоматическое определение языка

Когда язык документа неизвестен, задайте свойству Language значение OcrLanguage.Auto, чтобы определить его автоматически. Язык распознавания выбирается с помощью перечисления OcrLanguage, которое поддерживает английский (по умолчанию), арабский, китайский, французский, немецкий, индонезийский, итальянский, японский, казахский, корейский, польский, португальский, русский, испанский, украинский и Auto.

Как возвращаются результаты распознавания

  • Text заменяется, а не накапливается. Каждый вызов Accept/Visit перезаписывает Text результатом этого вызова; считывайте его после каждого вызова, чтобы сохранить несколько результатов. До первого вызова и для документа без страниц оно равно string.Empty.
  • Объединение нескольких страниц. Текст отдельных страниц объединяется с помощью Options.PageSeparator (по умолчанию "\n\n"); перед первой страницей разделитель не добавляется. string.Empty объединяет страницы без разрыва.
  • Разрешение. 300 DPI — значение по умолчанию и практический оптимум; ~200–600 — полезный диапазон.