Работа с форматом PDF в среде 1С всегда была нетривиальной задачей, так как этот формат предназначен в первую очередь для визуального представления документа, а не для хранения структурированных данных. Однако с развитием платформы 1С:Предприятие (особенно начиная с версий 8.3.22 и выше) появились инструменты, значительно упрощающие жизнь разработчику. В этой статье мы подробно разберем, как организовать поиск текста (например, списка фамилий) в большом массиве PDF-файлов, проанализируем различные подходы — от классических до самых современных — и выясним, какие подводные камни могут встретиться на этом пути.
Это классический способ, который доступен в 1С уже достаточно давно. Он позволяет получить текстовое содержимое файла в виде одной длинной строки, которую затем можно анализировать стандартными функциями работы со строками. Разберем по шагам, как это реализовать.
Основным преимуществом метода является его простота. Нам не нужно открывать файл в сторонних приложениях, достаточно создать объект ИзвлечениеТекста и передать ему путь к файлу. Проанализируем пример кода:
// Создаем объект для работы с текстом файла
ПоискТекста = Новый ИзвлечениеТекста(ПутьКФайлу);
// Извлекаем все текстовое содержимое
ПолныйТекст = ПоискТекста.ПолучитьТекст();
// Проверяем наличие нужной фамилии
Если СтрНайти(ПолныйТекст, "Иванов") > 0 Тогда
Сообщить("В файле " + ПутьКФайлу + " найдена искомая фамилия.");
КонецЕсли;
Важный нюанс: Эффективность этого метода на ОС Windows сильно зависит от установленных в системе IFilter. Если в системе не установлен компонент для работы с PDF (например, вместе с Adobe Reader или Foxit Reader), 1С может не «увидеть» текст внутри файла. На серверах под управлением Linux в последних версиях платформы (8.3.23+) этот механизм стал более независимым от внешних библиотек, что повышает стабильность работы.
Начиная с версии 8.3.22, в 1С появился объект ДокументPDF. Первоначально многие восприняли его только как средство для просмотра файлов, но его функционал гораздо шире. Рассмотрим подробнее, чем он может быть полезен при поиске данных.
В отличие от простого извлечения текста «простыней», ДокументPDF позволяет работать с документом как со структурой. Мы можем:
КоличествоСтраниц().Хотя прямое извлечение текста через этот объект может потребовать дополнительных манипуляций, сам факт появления нативного объекта для работы с PDF открывает путь к более глубокой интеграции без использования внешних компонент.
Выясним причину, по которой поиск может не работать даже при правильном коде. Часто PDF-файл является результатом сканирования бумажного документа и представляет собой просто картинку (набор пикселей), помещенную внутрь контейнера PDF. В этом случае ИзвлечениеТекста вернет пустую строку, так как текстового слоя в файле просто не существует.
Для решения этой задачи рассмотрим использование сервиса «1С:Распознавание документов». Это современное решение, которое использует нейросети для оптического распознавания символов (OCR). Разберем, как это работает в контексте нашей задачи:
Если ваша задача подразумевает работу со сканами, использование штатных средств извлечения текста будет бесполезным, и стоит сразу ориентироваться на OCR-решения.
Проанализируем ситуацию, когда файлов действительно много (тысячи или десятки тысяч). Перебор каждого файла кодом при каждом поисковом запросе будет крайне медленным. В 1С для этого предусмотрен механизм Полнотекстового поиска (ППС).
Рассмотрим правильный алгоритм организации такого поиска:
ИзвлечениеТекста.Это самый профессиональный и масштабируемый подход для работы с большими объемами данных.
В некоторых случаях стандартные средства 1С могут не справляться с нестандартными кодировками или защищенными файлами. Тогда разработчики прибегают к использованию внешних библиотек, таких как PDFium или Poppler, обернутых в Native API компоненты для 1С.
Рассмотрим, в чем их преимущество: - Высокая скорость работы. - Возможность извлекать текст с точными координатами каждого слова (это полезно, если нужно понять, в какой части бланка найдена фамилия). - Корректная обработка сложных шрифтов и нестандартных кодировок, которые часто встречаются в документах, созданных старым софтом.
Подведем итог. Для простого поиска в текстовых PDF используем ИзвлечениеТекста. Для работы с современными форматами в 8.3.22+ задействуем ДокументPDF. Если же перед нами сканы — не обойтись без 1С:Распознавание документов. А для высокой производительности на больших объемах обязательно внедряем полнотекстовый поиск.