Работа в устаревшей, но крайне надежной платформе 1С:Предприятие 7.7 часто ставит перед разработчиками сложные задачи по интеграции с современными форматами документов. Одной из таких задач является сохранение печатной формы в формат PDF. Казалось бы, существует множество виртуальных принтеров, однако стандартные решения часто не справляются с двумя критическими условиями: необходимостью сохранения прозрачности (когда печать или подпись накладываются поверх текста без белого фона) и полной автоматизацией процесса (сохранение в заданный файл без вывода окон настроек принтера).
В этой статье мы подробно разберем несколько проверенных методов, которые позволяют достичь профессионального результата, сохранив при этом текстовый слой PDF и корректное наложение графических элементов.
Проанализируем одно из самых современных и технологичных решений — использование специализированной внешней компоненты v7Moxel. Это решение базируется на технологии .NET и предоставляет функционал, который значительно превосходит возможности стандартного Йокселя в части работы с PDF.
Основное преимущество v7Moxel заключается в том, что она умеет напрямую преобразовывать объект таблицы 1С или файл .mxl в формат PDF, поддерживая при этом прозрачность графических объектов (PNG с альфа-каналом). Рассмотрим алгоритм работы с этой компонентой:
Пример программного кода для использования этого метода:
// Создание объекта компоненты
Попытка
Конвертер = СоздатьОбъект("AddIn.v7Moxel");
Исключение
Сообщить("Компонента v7Moxel не зарегистрирована!");
Возврат;
КонецПопытки;
// Сохранение текущей таблицы в PDF
// Таб - это сформированный объект типа "Таблица"
Конвертер.ExportPdf(Таб, "C:\Reports\Invoice_123.pdf");
Важно отметить, что данный метод требует наличия установленного .NET Framework v4, но взамен обеспечивает высокую скорость работы и безупречное качество выходного документа без участия промежуточных виртуальных принтеров.
Если по каким-то причинам использование внешних компонент на базе .NET невозможно, разберем более классический, «админский» подход. Этот метод заключается в создании виртуального PostScript-принтера, вывод которого перенаправляется в интерпретатор Ghostscript.
Выясним причину, почему обычные принтеры (вроде PDFCreator или Bullzip) часто «портят» прозрачность. Проблема кроется в настройках совместимости версий PDF. Прозрачность как штатный механизм появилась в стандарте PDF только с версии 1.4. Если принтер использует настройки по умолчанию (версия 1.3), он выполняет операцию «flattening» — «сплющивание» слоев, из-за чего вокруг печати появляется белый прямоугольник.
Для настройки «тихого» сохранения выполним следующие шаги:
mfilemon укажем путь к gswin64c.exe и параметры командной строки.Ключевым моментом здесь является параметр -dCompatibilityLevel=1.4. Пример строки параметров:
-sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -dCompatibilityLevel=1.4 -sOutputFile="C:\Temp\output.pdf" -f -
Благодаря такой настройке, 1С просто отправляет документ на печать Таб.Напечатать(0), принтер не задает вопросов, а Ghostscript мгновенно формирует качественный PDF с прозрачными слоями.
Рассмотрим нестандартный, но крайне эффективный метод, который использует мощь современных движков рендеринга. Любой современный браузер (Chrome, Edge) умеет сохранять страницы в PDF через режим Headless (без графического интерфейса).
Посмотрим на алгоритм реализации:
Таб.Записать(ПутьКФайлу, "HTML") или воспользоваться Йокселем для более точной передачи стилей.Пример команды, которую можно вызвать из 1С через КомандаСистемы():
"C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --disable-gpu --print-to-pdf="C:\Out\Document.pdf" "C:\Temp\Source.html"
Преимущество этого способа в том, что браузеры идеально обрабатывают прозрачность PNG-картинок и корректно формируют текстовый слой, сохраняя возможность поиска по документу. Это полностью решает проблему «вредных окон», так как процесс идет в фоновом режиме.
Если на рабочих местах пользователей установлен пакет Microsoft Office (версии 2010 и выше), мы можем использовать его внутренние механизмы сохранения. Проанализируем эту ситуацию: Excel отлично справляется с импортом таблиц 1С и последующим экспортом в PDF.
Разберем последовательность действий:
.xls.Excel.Application.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 изображения не потеряли своих свойств, что иногда требует использования Йокселя вместо штатного сохранения.
Подводя итоги, выберем оптимальный путь в зависимости от ваших условий:
Все перечисленные методы позволяют полностью исключить диалоговые окна и обеспечить высокое качество документа, что делает работу пользователя комфортной, а процесс формирования отчетности — автоматизированным.