Задача конвертации PDF в Excel в среде 1С:Предприятие является одной из самых трудоемких в области интеграции. Сложность заключается в самой природе формата PDF: он предназначен для отображения и печати («цифровая бумага»), а не для хранения структурированных данных. Если файл имеет фиксированный шаблон, задачу можно решить через COMОбъект, но что делать, когда структура документов постоянно меняется, содержит рисунки, текст и таблицы в произвольном порядке? В рамках данной статьи мы разберем современные подходы, которые позволяют автоматизировать этот процесс.
Рассмотрим базовый вариант, с которого начинают многие разработчики. Если у вас установлены профессиональные версии PDF-редакторов (например, Adobe Acrobat или Foxit), вы можете обратиться к их программному интерфейсу. Проанализируем примерный алгоритм взаимодействия:
Для работы через COMОбъект нам необходимо инициализировать приложение и вызвать методы открытия и сохранения файла. Однако, как отмечают участники обсуждения, такой метод стабильно работает только в том случае, если вы заранее знаете координаты ячеек или структура файла жестко фиксирована.
// Пример инициализации объекта Acrobat (требуется установленное ПО)
Попытка
AcroApp = Новый COMОбъект("AcroExch.App");
PDDoc = Новый COMОбъект("AcroExch.PDDoc");
Если PDDoc.Open("C:\отчет.pdf") Тогда
// Дальнейшая логика обработки документа
КонецЕсли;
Исключение
Сообщить("Ошибка при открытии Adobe Acrobat: " + ОписаниеОшибки());
КонецПопытки;
Важное ограничение: Этот подход плохо справляется с «общим случаем», когда таблицы могут начинаться с разных строк или иметь разное количество колонок. Кроме того, использование COM-объектов на стороне сервера 1С часто приводит к зависанию процессов.
Разберем более продвинутый способ, который не требует наличия тяжеловесного платного ПО. Существуют консольные утилиты (Command Line Interface), которые специализируются на извлечении таблиц. Одной из самых эффективных является Tabula.
Выясним, как это работает: 1С запускает внешнее приложение, передает ему путь к PDF-файлу, а на выходе получает структурированный файл CSV или XLSX. Для выполнения внешней команды используем метод ЗапуститьПриложение().
Проанализируем шаги реализации:
tabula-java).--guess для автоматического определения таблиц).
КомандаЗапуска = "java -jar tabula.jar -p all -a -f CSV ""C:\input.pdf"" -o ""C:\output.csv""";
ЗапуститьПриложение(КомандаЗапуска, , Истина); // Ждем завершения выполнения
// Далее читаем CSV файл стандартными средствами 1С
ЧтениеТекста = Новый ЧтениеТекста("C:\output.csv", КодировкаТекста.UTF8);
СтрокаДанных = ЧтениеТекста.ПрочитатьСтроку();
Пока СтрокаДанных <> Неопределено Цикл
// Разбор строк и заполнение ТаблицыЗначений
СтрокаДанных = ЧтениеТекста.ПрочитатьСтроку();
КонецЦикла;
Если файлы «не по шаблону» и содержат сложную верстку, лучшим решением на сегодняшний день является связка 1С + Python. Библиотеки Python, такие как pdfplumber, camelot и tabula-py, обладают встроенными алгоритмами поиска границ таблиц на основе визуального анализа линий и текстовых блоков.
Посмотрим, как организовать такое взаимодействие. 1С может передавать параметры в Python-скрипт через текстовый файл или аргументы командной строки, а забирать результат в формате JSON.
Рассмотрим пример логики Python-скрипта (библиотека pdfplumber):
import pdfplumber
import pandas as pd
with pdfplumber.open("document.pdf") as pdf:
all_tables = []
for page in pdf.pages:
table = page.extract_table()
if table:
all_tables.append(table)
# Сохранение в Excel для последующего забора в 1С
df = pd.DataFrame(all_tables)
df.to_excel("result.xlsx")
В 1С вам останется только вызвать этот скрипт. Этот метод позволяет обрабатывать даже те PDF, где таблицы не имеют явных границ (сетки), так как алгоритмы ориентируются на выравнивание текста.
В случаях, когда PDF представляет собой скан (картинку), ни программные библиотеки, ни COM-объекты не смогут извлечь текст напрямую. Здесь на помощь приходят облачные сервисы распознавания образов (OCR). Для практической реализации такого подхода подойдёт обработка для распознавания документов через Yandex Vision OCR.
Разберем преимущества использования Cloud API для 1С:
Для реализации в 1С используем объект HTTPСоединение. Мы отправляем POST-запрос с двоичными данными файла и получаем ответ, который парсим через ЧтениеJSON.
Соединение = Новый HTTPСоединение("vision.api.cloud.yandex.net", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/vision/v1/batchAnalyze");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
// Формирование тела запроса с передачей PDF в Base64
Ответ = Соединение.ОтправитьДляОбъекта(Запрос);
Проанализируем еще один интересный лайфхак. Платформа 1С умеет нативно работать с HTML-документами и извлекать из них таблицы. Если сконвертировать PDF в HTML (с помощью бесплатных утилит типа pdftohtml), то задача сводится к простому парсингу тегов <table>, <tr> и <td>.
Этот способ хорош тем, что сохраняется относительное позиционирование элементов, и вам не нужно вычислять координаты каждой буквы. 1С прочитает HTML-код как структуру объектов, что значительно упрощает программную обработку данных без использования внешних платных библиотек.
При реализации любого из перечисленных методов мы обязательно столкнемся с рядом проблем, которые нужно предусмотреть в коде 1С:
VBScript.RegExp) в 1С для дополнительной очистки данных.Итог: Для простых задач по шаблону используйте COMОбъект или консольные утилиты. Для сложных, меняющихся файлов и массовой обработки лучшим выбором будет связка с Python или использование Облачных API. Это обеспечит гибкость и избавит от необходимости переписывать код при малейшем изменении формата PDF-файла. В качестве готовой альтернативы можно использовать решение для автоматического распознавания PDF через ИИ.