Как реализовать пакетную печать PDF-файлов в 1С с возможностью предварительного просмотра?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

В рамках данной статьи мы разберем несколько подходов к решению этой задачи: от использования современных возможностей платформы 8.3.22 до применения внешних утилит и обходных путей для более ранних версий.

Метод 1. Использование штатного объекта ДокументPDF (версия 8.3.22 и выше)

Начиная с версии платформы 8.3.22, разработчикам стал доступен специализированный объект ДокументPDF. Это наиболее «чистый» и правильный способ работы с форматом, который позволяет реализовать предпросмотр без сторонних библиотек. Рассмотрим, как интегрировать этот механизм в форму пакетной печати.

Для реализации предварительного просмотра нам потребуется разместить на форме элемент управления. Проанализируем последовательность действий:

  1. Добавим на форму реквизит с типом Строка (в котором будет храниться путь к временному файлу или адрес в хранилище) или используем объект ДокументPDF напрямую.
  2. В элементе формы выберем вид «Поле PDF документа».
  3. Программно загрузим файл в этот элемент.

Пример кода для вывода PDF на форму:


// Создаем объект и загружаем файл из временного хранилища или с диска
Документ = Новый ДокументPDF;
Документ.Прочитать(ПутьКФайлу);

// Отображаем документ в элементе формы "ПолеПросмотраPDF"
Элементы.ПолеПросмотраPDF.УстановитьДокумент(Документ);

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

Метод 2. Организация очереди печати (смешанный режим)

Часто возникает вопрос: как объединить ТабличныйДокумент (ТОРГ-12, Счет-фактура) и сторонний PDF (Сертификат) в одну очередь, чтобы принтер выдал их по порядку? Проанализируем подход с разделением потоков.

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

Алгоритм работы пакетной печати в этом случае выглядит так:

  1. Система формирует массив объектов для печати.
  2. Если объект — это ТабличныйДокумент (например, если вы используете факсимиле подписей для УТ 11), вызывается метод ТабДок.Напечатать().
  3. Если объект — это файл PDF, вызывается внешняя команда печати.

Метод 3. Использование внешних утилит для качественной печати (Silent Print)

Для реализации печати PDF «без лишних окон» (тихая печать) отлично подходят консольные утилиты. Это позволяет сохранить векторное качество документа и высокую скорость работы. Рассмотрим популярную утилиту SumatraPDF.

С помощью метода ЗапуститьПриложение() мы можем отправить документ на принтер по умолчанию или на конкретное устройство, выбранное пользователем в 1С. Проанализируем пример команды:


КомандаЗапуска = "C:\Program Files\SumatraPDF\SumatraPDF.exe -print-to-default -exit-on-print """ + ПутьКФайлуPDF + """";
ЗапуститьПриложение(КомандаЗапуска, , Истина);

Параметр -print-to-default отправляет файл на текущий принтер, а -exit-on-print закрывает приложение сразу после передачи задания в очередь печати Windows. Этот способ работает стабильнее, чем использование тяжелого Adobe Reader.

Метод 4. Предварительный просмотр через Поле HTML документа

Если ваша конфигурация работает на версии платформы ниже 8.3.22, вы все равно можете реализовать предпросмотр. Современные движки 1С (основанные на WebKit/Chromium) умеют отображать PDF внутри Поля HTML документа. Разберем, как это реализовать:

  1. Разместите на форме элемент с типом Поле HTML документа.
  2. Передайте в него навигационную ссылку на файл или прямой путь.

// Путь к файлу на диске
ПутьКФайлу = "file://" + СтрЗаменить(ПолныйПутьКPDF, "\", "/");
Элементы.ПолеПредпросмотраHTML.Текст = "<html><body style='margin:0;padding:0;'>" 
    + "<embed src='" + ПутьКФайлу + "' type='application/pdf' width='100%' height='100%' />" 
    + "</body></html>";

В этом случае 1С задействует встроенные механизмы браузера для отображения PDF. Пользователь получит полноценное окно просмотра с инструментами печати и поиска.

Метод 5. Конвертация PDF в изображение для ТабДока (крайний случай)

Если архитектура пакетной печати в вашей конфигурации жестко завязана на использовании только одного объекта ТабличныйДокумент (например, когда нужно вывести несколько документов на одном листе), придется прибегнуть к конвертации. Выясним основные нюансы этого процесса.

Важно: Для сохранения читаемости текста при конвертации PDF в JPG или PNG необходимо использовать разрешение не менее 300 DPI. Стандартные 72/96 DPI сделают сертификаты нечитаемыми.

Для программной конвертации часто используют Ghostscript или библиотеки .NET через COM-обертку. После получения картинки её можно вставить в область табличного документа:


Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка(ПутьКПолученномуJPG);
Рисунок.ГраницыСверху = 0;
// Установка размеров и позиции...

Внимание: Помните, что хранение десятков картинок высокого разрешения в одном ТабличномДокументе может привести к ошибке «Недостаточно памяти», особенно на 32-битных клиентах 1С. Проанализируйте объем оперативной памяти перед формированием огромных пакетов печати.

Резюме и рекомендации

Подведем итог нашего анализа. Выбор метода зависит от версии вашей платформы и требований к качеству:

Разберем ситуацию с сохранением типового функционала «Управления торговлей». Вы можете расширить процедуру печати в модуле менеджера или обработке печати, добавив проверку: если в присоединенных файлах документа найден PDF, система должна не пропускать его, а добавлять в список выводимых объектов со специальным флагом ЭтоPDF, который в дальнейшем будет обработан формой предварительного просмотра.

← На главную