Разработка и Конфигурация · 12 мин
Как прочитать PDF в 1С 8: рабочие способы и примеры кода
Как прочитать PDF-файл в 1С 8: встроенные средства, внешние компоненты, извлечение текста через код. Примеры, ограничения, ошибки и FAQ.
Задача прочитать PDF-файл из 1С 8 возникает чаще, чем кажется: нужно загрузить счёт от поставщика, извлечь реквизиты из актов, распарсить выгрузку из банка или просто показать документ пользователю. Встроенного полноценного механизма чтения PDF в платформе 1С нет — платформа умеет сохранять табличные и текстовые документы в PDF, но обратное преобразование «из коробки» не выполняет.
Поэтому на практике применяют несколько обходных путей: объект ПотокВПамяти и работа с двоичными данными для передачи файла, внешние утилиты и COM-объекты для извлечения текста, внешние компоненты по технологии Native API, а также веб-сервисы распознавания. Выбор зависит от того, что именно нужно: показать файл пользователю, извлечь текст или распознать структурированные данные из таблиц.
Важно понимать ограничение: если PDF — это скан (картинка без текстового слоя), извлечь текст программными средствами без OCR невозможно в принципе. В этом случае потребуется распознавание через внешние сервисы или компоненты с OCR. Перед выбором решения проверьте, есть ли в файле текстовый слой: откройте PDF в любом просмотрщике и попробуйте выделить текст мышью.
Определите, какой у вас PDF и что нужно получить
Первый шаг — классифицировать задачу. PDF-файлы делятся на два типа: с текстовым слоем (сформированные из Word, 1С, Excel) и сканы без текстового слоя (фактически изображения). От типа файла и от цели зависит весь дальнейший выбор инструментов.
Типичные цели в учётных системах такие: отобразить PDF пользователю в форме, сохранить файл в информационной базе как присоединённый, извлечь текст целиком для поиска, распарсить конкретные поля (номер, дата, сумма, ИНН) или разобрать табличную часть. Чем структурнее требуемый результат, тем сложнее решение.
Как выбрать подход
Показ PDF пользователю без извлечения текста
Если задача — только отобразить документ, самый простой способ в тонком клиенте — поле HTML-документа на форме. Современные браузерные движки, которые использует 1С, умеют отображать PDF. Добавьте на форму реквизит типа «Строка» с видом «Поле HTML-документа» и присвойте ему путь к файлу или сформируйте HTML с встроенным содержимым.
Альтернатива — открыть файл штатным просмотрщиком операционной системы. Для этого используется метод ЗапуститьПриложение() или НачатьЗапускПриложения() с указанием пути к файлу. Способ надёжен, но выводит пользователя из интерфейса 1С и требует, чтобы файл был доступен на диске клиентского компьютера.
// Открытие PDF во внешнем просмотрщике
ФайловаяСистема.ОткрытьФайл("C:\Документы\Счет.pdf");
Извлечение текста через внешнюю утилиту pdftotext
Наиболее популярный бесплатный способ извлечь текст из PDF с текстовым слоем — утилита pdftotext из состава пакета Poppler (доступна и для Windows). Схема работы: 1С сохраняет PDF во временный файл, запускает утилиту с параметрами командной строки, утилита создаёт текстовый файл, который 1С читает штатным объектом ЧтениеТекста.
- 1Скачайте сборку Poppler для Windows и разместите pdftotext.exe в доступном каталоге на сервере
- 2Сохраните PDF из базы во временный файл через Записать() у двоичных данных
- 3Запустите утилиту: pdftotext.exe -layout input.pdf output.txt через КомандаСистемы() или ЗапуститьПриложение()
- 4Дождитесь завершения процесса и проверьте наличие выходного файла
- 5Прочитайте результат объектом ЧтениеТекста с нужной кодировкой (обычно UTF-8)
- 6Удалите временные файлы после обработки
// Пример запуска внешней утилиты
ИмяPDF = ПолучитьИмяВременногоФайла("pdf");
ИмяTXT = ПолучитьИмяВременногоФайла("txt");
ДвоичныеДанные.Записать(ИмяPDF);
СтрокаКоманды = """C:\Tools\pdftotext.exe"" -layout """
+ ИмяPDF + """ """ + ИмяTXT + """";
КомандаСистемы(СтрокаКоманды);
Чтение = Новый ЧтениеТекста(ИмяTXT, КодировкаТекста.UTF8);
ТекстДокумента = Чтение.Прочитать();
Чтение.Закрыть();
Параметр -layout сохраняет примерное расположение текста как в оригинале — это критично для счетов и актов, где реквизиты расположены по колонкам. Без него текст выстраивается в сплошной поток, и привязать значения к полям становится заметно сложнее.
Чтение PDF через COM-объекты и внешние компоненты
На Windows-клиенте можно попробовать COM-автоматизацию: например, через установленный Adobe Acrobat (объект AcroExch) или через Word, который умеет открывать PDF и конвертировать его в редактируемый документ. Способ с Word прост: открываете файл через Word.Application, сохраняете как текст, читаете результат. Минус — требуется установленный Office на каждой машине, где выполняется код, и работает это только в файловом или толстом/тонком клиенте под Windows, не на Linux-сервере.
Более промышленный вариант — внешняя компонента по технологии Native API или COM, которая подключается через ПодключитьВнешнююКомпоненту() и предоставляет методы чтения PDF напрямую в память. Такие компоненты существуют как коммерческие, так и открытые. Плюс — работа без временных файлов и внешних процессов, минус — необходимость развёртывания компоненты на всех рабочих местах или сервере и зависимость от разрядности (32/64 бита).
Сравнение способов чтения PDF
Подходит для показа файла пользователю. Не извлекает текст и не работает для парсинга
Бесплатно, быстро, хорошо для текстовых PDF. Требует установки утилиты и работы через командную строку
Просто реализовать, но требует установленного ПО на клиенте и не работает на Linux-сервере
Быстро и без временных файлов, но нужно развёртывание и контроль разрядности
Единственный вариант для сканов. Требует интернета, может быть платным и иметь лимиты
Распознавание сканов: когда без OCR не обойтись
Если PDF представляет собой отсканированный документ, никакие текстовые библиотеки не помогут — внутри файла только изображение. Признак простой: pdftotext возвращает пустой файл, а в просмотрщике текст не выделяется мышью. В этом случае нужен OCR (оптическое распознавание символов).
Практических пути два. Первый — облачные сервисы распознавания, к которым 1С обращается по HTTP: файл отправляется через HTTPСоединение и POST-запрос, в ответ приходит текст или структурированный JSON. Второй — локальные OCR-решения, включая бесплатный движок Tesseract, который, как и pdftotext, можно запускать из командной строки. Качество распознавания зависит от чёткости скана: перекошенные и зашумлённые документы дают ошибки, которые придётся обрабатывать при парсинге.
Перед внедрением OCR проверьте, нельзя ли получить те же документы в машиночитаемом виде: многие контрагенты могут выгружать счета в XML или через ЭДО. Электронный документооборот полностью снимает задачу распознавания PDF.
Парсинг извлечённого текста: от строки к данным
Полученный текст — ещё не данные. Чтобы извлечь номер счёта, дату, ИНН или сумму, текст разбирают построчно или регулярными выражениями. В 1С нет встроенного движка регулярных выражений, поэтому либо используют VBScript.RegExp через COM (только Windows), либо пишут разбор средствами языка: СтрНайти(), Сред(), СтрРазделить(), циклы по строкам.
Надёжная стратегия — опираться на устойчивые маркеры. Например, в счётах одного поставщика сумма всегда идёт после слова «Итого», а ИНН — после строки «ИНН/КПП». Пишите парсер под конкретный шаблон документа и обязательно валидируйте результат: сумма должна преобразовываться в число, дата — в дату, ИНН — содержать 10 или 12 цифр. Если шаблон не совпал, отправляйте документ на ручную обработку, а не записывайте «как получилось».
// Пример поиска ИНН в тексте
ПозицияМаркера = СтрНайти(ТекстДокумента, "ИНН");
Если ПозицияМаркера > 0 Тогда
Фрагмент = Сред(ТекстДокумента, ПозицияМаркера, 30);
// далее выделение цифр из фрагмента
КонецЕсли;
Проверка результата и типичные ошибки
После внедрения любого способа проверьте решение на реальном массиве файлов, а не на одном образце. Проблемы всплывают на нестандартных документах: многостраничных счетах, повёрнутых страницах, PDF с вложенными шрифтами, файлах с цифровой подписью.
Как проверить результат
Текст читаем, русские символы корректны, структура строк сохранена
Пустой текст, иероглифы или сплошная каша без переносов строк
Значения преобразуются в число и совпадают с PDF при визуальной сверке
Числа с лишними разрядами, потерянными разделителями или нулевые
Код выполняется под серверной учётной записью, временные файлы создаются и удаляются
Ошибки доступа к каталогу, зависшие процессы внешних утилит
Партия из десятков файлов обрабатывается без ошибок и утечек памяти
На части файлов ошибки, которые нигде не фиксируются в журнале
Обязательно ведите журнал обработки: какие файлы обработаны успешно, какие отправлены на ручной разбор и почему. Без журнала при массовой загрузке вы не сможете отличить «файл не распознался» от «файл вообще не обрабатывался».
Что важно запомнить
1С 8 не читает PDF штатно: для показа используйте HTML-поле или внешний просмотрщик, для текста — pdftotext, COM или внешнюю компоненту, для сканов — OCR. Всегда валидируйте извлечённые данные перед записью в учётные документы и ведите журнал обработки.
Частые вопросы
Можно ли прочитать PDF в 1С без внешних программ и компонент?
Извлечь текст штатными средствами платформы нельзя — 1С умеет только сохранять документы в PDF, но не разбирать их. Без внешних средств возможно лишь отображение файла через поле HTML-документа или запуск просмотрщика. Для извлечения текста всегда нужен внешний инструмент: утилита, COM-объект, компонента или сервис.
pdftotext вернул пустой файл. В чём причина?
Чаще всего PDF является сканом без текстового слоя — проверьте, выделяется ли текст в просмотрщике. Вторая причина — ошибка запуска: неверный путь к утилите или файлу, нехватка прав у учётной записи сервера. Проверьте код возврата команды и попробуйте запустить утилиту вручную из командной строки с теми же параметрами.
Работает ли чтение PDF на Linux-сервере 1С?
Да, но не все способы. Poppler и Tesseract существуют в Linux-версиях и запускаются так же через командную строку. COM-объекты (Word, Acrobat, VBScript.RegExp) на Linux недоступны — для парсинга придётся использовать встроенные строковые функции или внешние компоненты, собранные под Linux.
Как извлечь таблицу из PDF в таблицу значений?
Прямого способа нет: извлекайте текст с параметром -layout, чтобы сохранить колоночную структуру, затем разбирайте строки по позициям или разделителям. Для сложных таблиц надёжнее специализированные библиотеки через внешний скрипт (например, на Python с последующей передачей результата в CSV или JSON), который 1С читает штатно.
Безопасно ли отправлять PDF с реквизитами в облачный OCR-сервис?
Это передача данных контрагентов третьей стороне, поэтому заранее оцените содержимое документов: счета и акты обычно не содержат персональных данных, но договоры и документы сотрудников — могут. Уточните у сервиса условия обработки и хранения данных, а для чувствительных документов рассмотрите локальный OCR вроде Tesseract.
Что делать, если у каждого поставщика свой формат счёта в PDF?
Универсальный парсер быстро становится неподдерживаемым. Практичный подход — отдельный шаблон разбора на каждого крупного поставщика с определением шаблона по ИНН или характерному маркеру в тексте, а всё нераспознанное — в очередь ручной обработки. Параллельно стоит предложить контрагентам перейти на ЭДО, где данные приходят в структурированном XML.