Как извлечь текст из PDF-файла в 1С:Предприятие?

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

В процессе автоматизации документооборота мы часто сталкиваемся с необходимостью считывать данные из накладных, счетов или этикеток, приходящих в формате PDF. Стандартными средствами 1С напрямую прочитать «внутренности» PDF без дополнительных инструментов бывает затруднительно, особенно если речь идет о неструктурированных документах. Давайте разберем, как решить эту задачу с помощью внешних утилит и обработки полученного текста.

Понимание природы проблемы

Прежде чем приступать к написанию кода, важно осознать, что PDF-файл — это формат отображения, а не база данных. Если документ был создан путем «печати» из текстового редактора, внутри него есть текстовый слой. Если же это отсканированная копия — перед нами набор изображений, для распознавания которых потребуется OCR (оптическое распознавание символов). Решения, которые мы рассмотрим, подходят именно для файлов, содержащих программно созданный текстовый слой.

Решение 1: Использование утилиты pdftotext

Самый надежный и проверенный способ — использование бесплатной консольной утилиты pdftotext. Она позволяет конвертировать содержимое PDF в обычный текстовый файл, который мы затем легко распарсим силами встроенного языка 1С. Для обеспечения скрытого запуска без «черных окон» консоли рекомендуется использовать дополнительную утилиту hstart.

Рассмотрим пошаговую реализацию:

  1. Подготовим макеты в конфигурации, где будут храниться файлы pdftotext.exe, hstart.exe и xpdfrc.
  2. Во время выполнения кода извлечем эти файлы во временную директорию.
  3. Сформируем строку запуска, передав параметры конвертации (например, флаг -layout для сохранения структуры строк).
  4. Прочитаем полученный текстовый файл и разберем его построчно.

Пример реализации алгоритма извлечения:


МакетУтилиты = ПолучитьМакет("pdftotext");
Адрес = ПоместитьВоВременноеХранилище(МакетУтилиты, Новый УникальныйИдентификатор);
ФайлУтилиты = КаталогВременныхФайлов() + "pdftotext.exe";
ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
ДанныеХранилища.Записать(ФайлУтилиты);

ТекстКоманды = """" + КаталогВременныхФайлов() + "hstart.exe"" /NOCONSOLE /WAIT ""pdftotext.exe -layout """ + ФайлPDF + """ """ + КаталогВременныхФайлов() + "temp.txt""""";
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run(ТекстКоманды, 5, 1);

Разбор полученных данных

После того как утилита создала файл temp.txt, нам нужно прочитать его с помощью объекта ЧтениеТекста. Здесь мы применяем стандартные функции работы со строками, такие как Найти(), СтрЗаменить() и Сред(), чтобы выделить нужные нам реквизиты (номера накладных, суммы, артикулы) и перенести их в ТаблицаЗначений.

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

Решение 2: Использование PDF2TXT и прямое чтение

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


ПутьPDF = Элемент.ПолноеИмя;
txt = СтрЗаменить(ПутьPDF, "pdf", "txt");
Команда = ПутьКPDF2TXT + "\pdf2txt.exe "" " + ПутьPDF + """ " + txt;
ЗапуститьПриложение(Команда, , Истина);

ОбъектТ = Новый ИзвлечениеТекста(txt);
ТекстФ = ОбъектТ.ПолучитьТекст();

Советы по безопасности и стабильности

  1. Очистка временных файлов: Не забывайте удалять временные текстовые файлы и копии утилит с помощью метода УдалитьФайлы() после завершения обработки. Это предотвратит засорение диска сервера.
  2. Проверка прав: Убедитесь, что пользователь, от имени которого работает сервер 1С, имеет права на запись в каталог временных файлов и запуск исполняемых файлов.
  3. Обработка ошибок: Если утилита возвращает пустой результат, проверьте, не является ли PDF защищенным паролем или графическим сканом (в этом случае pdftotext не поможет, потребуется внешнее решение OCR).
  4. Особенности имен файлов: Всегда экранируйте пути к файлам в коде, чтобы избежать проблем с пробелами в именах папок или документов.

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

← На главную