Работа с PDF-документами внутри платформы 1С:Предприятие часто ставит перед разработчиками сложные задачи. Поскольку PDF является сложным бинарным форматом, 1С не имеет встроенных нативных методов для глубокого анализа структуры документа, разбивки его на страницы или извлечения текста из «нетекстовых» слоев. Рассмотрим, как эффективно решить задачу поиска фрагмента текста на каждой странице и сохранения нужных страниц в отдельные файлы.
ЧтениеТекста?Многие начинающие разработчики пытаются использовать объект ЧтениеТекста для обработки PDF. Важно уяснить: это приведет к ошибке или получению нечитаемого набора символов. PDF — это не просто текст, а сложная структура объектов, сжатых данных и кодировок. Для качественной работы нам потребуется архитектурное решение с привлечением специализированного консольного ПО.
PDFДля решения нашей задачи мы будем использовать связку из двух мощных инструментов, которые позволяют «подружить» 1С с файлами PDF:
QPDF — идеальный инструмент для манипуляции структурой документа. Он быстро и надежно разрезает многостраничный файл на отдельные файлы страниц, сохраняя целостность данных даже в защищенных документах.Ghostscript — движок, который может потребоваться в тех случаях, если текст в документе представлен в виде растровых изображений или требуется сложная конвертация содержимого для последующего анализа.Разберем процесс автоматизации по этапам, следуя логике взаимодействия 1С с внешними утилитами.
Чтобы не требовать от пользователей сложной установки ПО на каждый компьютер, мы можем включить утилиты в конфигурацию. Создайте в 1С Макет типа «Двоичные данные» и загрузите туда архив с нужной утилитой (например, qpdf). Это позволит нам разворачивать инструмент во временную папку «на лету».
После распаковки архива во временный каталог (используйте КаталогВременныхФайлов()), мы будем запускать QPDF через системную команду. Рассмотрим пример вызова:
Команда = \"qpdf --split-pages infile.pdf %d-out.pdf\";
ЗапуститьПриложение(Команда, , Истина, КодВозврата);
После выполнения этой команды исходный файл будет разбит на набор файлов: 1-out.pdf, 2-out.pdf и так далее. Это значительно упрощает последующий поиск.
Когда страницы разделены, нам нужно найти требуемый фрагмент в каждой из них. Если PDF содержит текстовый слой, мы можем использовать Ghostscript для извлечения текста в обычный текстовый файл, который уже легко анализируется средствами 1С.
Пример команды для Ghostscript:
gs -sDEVICE=txtwrite -o output.txt input.pdf
После этого мы используем стандартный объект ЧтениеТекста для поиска нужной фразы в полученном output.txt.
УдалитьФайлы() для очистки КаталогВременныхФайлов().PDF в отдельный микросервис на Python. Это позволит разгрузить сервер 1С и использовать библиотеки (например, PyMuPDF), которые работают с PDF в оперативной памяти, не создавая тысячи мелких файлов на диске.Таким образом, комбинируя возможности 1С по управлению процессами и мощь специализированных консольных утилит, мы можем успешно решать задачи автоматизированной обработки документов любой сложности.