Как в 1С 7.7 сохранить печатную форму в PDF с прозрачностью и без лишних диалоговых окон?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

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

Решение 1: Использование внешней компоненты v7Moxel

Проанализируем одно из самых современных и технологичных решений — использование специализированной внешней компоненты v7Moxel. Это решение базируется на технологии .NET и предоставляет функционал, который значительно превосходит возможности стандартного Йокселя в части работы с PDF.

Основное преимущество v7Moxel заключается в том, что она умеет напрямую преобразовывать объект таблицы 1С или файл .mxl в формат PDF, поддерживая при этом прозрачность графических объектов (PNG с альфа-каналом). Рассмотрим алгоритм работы с этой компонентой:

  1. Подключите компоненту в глобальном модуле или непосредственно в обработке формирования отчета.
  2. Сформируйте таблицу штатными средствами 1С.
  3. Передайте объект таблицы в метод компоненты для экспорта.

Пример программного кода для использования этого метода:


// Создание объекта компоненты
Попытка
    Конвертер = СоздатьОбъект("AddIn.v7Moxel");
Исключение
    Сообщить("Компонента v7Moxel не зарегистрирована!");
    Возврат;
КонецПопытки;

// Сохранение текущей таблицы в PDF
// Таб - это сформированный объект типа "Таблица"
Конвертер.ExportPdf(Таб, "C:\Reports\Invoice_123.pdf");

Важно отметить, что данный метод требует наличия установленного .NET Framework v4, но взамен обеспечивает высокую скорость работы и безупречное качество выходного документа без участия промежуточных виртуальных принтеров.

Решение 2: Связка Ghostscript и монитора порта (mfilemon/RedMon)

Если по каким-то причинам использование внешних компонент на базе .NET невозможно, разберем более классический, «админский» подход. Этот метод заключается в создании виртуального PostScript-принтера, вывод которого перенаправляется в интерпретатор Ghostscript.

Выясним причину, почему обычные принтеры (вроде PDFCreator или Bullzip) часто «портят» прозрачность. Проблема кроется в настройках совместимости версий PDF. Прозрачность как штатный механизм появилась в стандарте PDF только с версии 1.4. Если принтер использует настройки по умолчанию (версия 1.3), он выполняет операцию «flattening» — «сплющивание» слоев, из-за чего вокруг печати появляется белый прямоугольник.

Для настройки «тихого» сохранения выполним следующие шаги:

  1. Установим Ghostscript.
  2. Установим монитор порта, например, mfilemon (Media File Monitor). Он позволяет перехватывать данные, идущие на печать, и передавать их в командную строку конвертера.
  3. Настроим виртуальный принтер с драйвером типа «Generic PostScript Printer».
  4. В настройках порта mfilemon укажем путь к gswin64c.exe и параметры командной строки.

Ключевым моментом здесь является параметр -dCompatibilityLevel=1.4. Пример строки параметров:


-sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -dCompatibilityLevel=1.4 -sOutputFile="C:\Temp\output.pdf" -f -

Благодаря такой настройке, 1С просто отправляет документ на печать Таб.Напечатать(0), принтер не задает вопросов, а Ghostscript мгновенно формирует качественный PDF с прозрачными слоями.

Решение 3: Конвертация через HTML и консоль браузеров (Chrome/Edge)

Рассмотрим нестандартный, но крайне эффективный метод, который использует мощь современных движков рендеринга. Любой современный браузер (Chrome, Edge) умеет сохранять страницы в PDF через режим Headless (без графического интерфейса).

Посмотрим на алгоритм реализации:

  1. Сохраняем печатную форму 1С в формат HTML. Для этого можно использовать штатный метод Таб.Записать(ПутьКФайлу, "HTML") или воспользоваться Йокселем для более точной передачи стилей.
  2. Запускаем исполняемый файл браузера с параметрами командной строки для печати в PDF.

Пример команды, которую можно вызвать из 1С через КомандаСистемы():


"C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --disable-gpu --print-to-pdf="C:\Out\Document.pdf" "C:\Temp\Source.html"

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

Решение 4: Экспорт через COM-объект Excel

Если на рабочих местах пользователей установлен пакет Microsoft Office (версии 2010 и выше), мы можем использовать его внутренние механизмы сохранения. Проанализируем эту ситуацию: Excel отлично справляется с импортом таблиц 1С и последующим экспортом в PDF.

Разберем последовательность действий:

  1. Сохраняем таблицу 1С во временный файл .xls.
  2. Открываем этот файл через COM-соединение Excel.Application.
  3. Вызываем метод ExportAsFixedFormat.

Пример кода:


// Сохраняем таблицу в промежуточный Excel файл
ИмяФайлаXLS = "C:\Temp\Report.xls";
Таб.Записать(ИмяФайлаXLS, "XLS");

// Работаем с Excel через COM
Excel = СоздатьОбъект("Excel.Application");
Excel.DisplayAlerts = 0; // Отключаем уведомления
Книга = Excel.Workbooks.Open(ИмяФайлаXLS);

// Параметр 0 соответствует формату PDF
Книга.ExportAsFixedFormat(0, "C:\Result\FinalReport.pdf");

Книга.Close(0);
Excel.Quit();

Этот метод гарантирует сохранение прозрачности объектов и создание «чистого» текстового PDF. Главное — убедиться, что при сохранении из 1С в XLS изображения не потеряли своих свойств, что иногда требует использования Йокселя вместо штатного сохранения.

Рекомендации по выбору метода

Подводя итоги, выберем оптимальный путь в зависимости от ваших условий:

Все перечисленные методы позволяют полностью исключить диалоговые окна и обеспечить высокое качество документа, что делает работу пользователя комфортной, а процесс формирования отчетности — автоматизированным.

← На главную