Как найти фамилии или произвольный текст в куче PDF-файлов средствами 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с форматом PDF в среде 1С всегда была нетривиальной задачей, так как этот формат предназначен в первую очередь для визуального представления документа, а не для хранения структурированных данных. Однако с развитием платформы 1С:Предприятие (особенно начиная с версий 8.3.22 и выше) появились инструменты, значительно упрощающие жизнь разработчику. В этой статье мы подробно разберем, как организовать поиск текста (например, списка фамилий) в большом массиве PDF-файлов, проанализируем различные подходы — от классических до самых современных — и выясним, какие подводные камни могут встретиться на этом пути.

Метод 1. Использование объекта ИзвлечениеТекста

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

Основным преимуществом метода является его простота. Нам не нужно открывать файл в сторонних приложениях, достаточно создать объект ИзвлечениеТекста и передать ему путь к файлу. Проанализируем пример кода:


// Создаем объект для работы с текстом файла
ПоискТекста = Новый ИзвлечениеТекста(ПутьКФайлу);

// Извлекаем все текстовое содержимое
ПолныйТекст = ПоискТекста.ПолучитьТекст();

// Проверяем наличие нужной фамилии
Если СтрНайти(ПолныйТекст, "Иванов") > 0 Тогда
    Сообщить("В файле " + ПутьКФайлу + " найдена искомая фамилия.");
КонецЕсли;

Важный нюанс: Эффективность этого метода на ОС Windows сильно зависит от установленных в системе IFilter. Если в системе не установлен компонент для работы с PDF (например, вместе с Adobe Reader или Foxit Reader), 1С может не «увидеть» текст внутри файла. На серверах под управлением Linux в последних версиях платформы (8.3.23+) этот механизм стал более независимым от внешних библиотек, что повышает стабильность работы.

Метод 2. Новые возможности платформы: Объект ДокументPDF

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

В отличие от простого извлечения текста «простыней», ДокументPDF позволяет работать с документом как со структурой. Мы можем:

  1. Узнать точное количество страниц в документе с помощью метода КоличествоСтраниц().
  2. Получить метаданные файла (автор, заголовок, тема, дата создания).
  3. Организовать более адресный поиск. Например, если нам нужно найти фамилию только на первой или последней странице, это сэкономит значительные ресурсы при обработке тяжелых файлов.

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

Метод 3. Проблема «пустых» PDF и использование OCR

Выясним причину, по которой поиск может не работать даже при правильном коде. Часто PDF-файл является результатом сканирования бумажного документа и представляет собой просто картинку (набор пикселей), помещенную внутрь контейнера PDF. В этом случае ИзвлечениеТекста вернет пустую строку, так как текстового слоя в файле просто не существует.

Для решения этой задачи рассмотрим использование сервиса «1С:Распознавание документов». Это современное решение, которое использует нейросети для оптического распознавания символов (OCR). Разберем, как это работает в контексте нашей задачи:

Если ваша задача подразумевает работу со сканами, использование штатных средств извлечения текста будет бесполезным, и стоит сразу ориентироваться на OCR-решения.

Метод 4. Поиск в «куче файлов» через полнотекстовый поиск

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

Рассмотрим правильный алгоритм организации такого поиска:

  1. При загрузке PDF-файла в базу (или при регистрации ссылки на него) мы один раз извлекаем из него текст с помощью ИзвлечениеТекста.
  2. Сохраняем этот текст в специальный индексируемый реквизит (например, в справочнике или регистре сведений).
  3. После обновления индекса полнотекстового поиска, поиск любой фамилии будет занимать доли секунды, так как система будет искать по уже готовому текстовому индексу, не обращаясь к самим PDF-файлам.

Это самый профессиональный и масштабируемый подход для работы с большими объемами данных.

Метод 5. Использование внешних компонент (Native API)

В некоторых случаях стандартные средства 1С могут не справляться с нестандартными кодировками или защищенными файлами. Тогда разработчики прибегают к использованию внешних библиотек, таких как PDFium или Poppler, обернутых в Native API компоненты для 1С.

Рассмотрим, в чем их преимущество: - Высокая скорость работы. - Возможность извлекать текст с точными координатами каждого слова (это полезно, если нужно понять, в какой части бланка найдена фамилия). - Корректная обработка сложных шрифтов и нестандартных кодировок, которые часто встречаются в документах, созданных старым софтом.

Подведем итог. Для простого поиска в текстовых PDF используем ИзвлечениеТекста. Для работы с современными форматами в 8.3.22+ задействуем ДокументPDF. Если же перед нами сканы — не обойтись без 1С:Распознавание документов. А для высокой производительности на больших объемах обязательно внедряем полнотекстовый поиск.

← На главную