Проблема потери прозрачности изображений при печати из 1С:Предприятие 7.7 является классической для системных администраторов и программистов, работающих с устаревшим стеком технологий в современных серверных операционных системах. Типичная ситуация: на локальной машине бухгалтера печать и подпись на печатной форме выглядят идеально, но при переносе базы на Windows Server 2012 и использовании виртуальных принтеров (Foxit, Adobe, PDF24) прозрачный фон внезапно превращается в белый или черный прямоугольник. Особенно остро это проявляется, когда изображения внедряются в табличный документ как OLE объект через Microsoft Word.
В этой статье мы подробно разберем причины такого поведения системы и рассмотрим несколько эффективных способов решения задачи — от тонкой настройки принтеров до использования мощных внешних компонент.
Для начала проанализируем ситуацию с технической точки зрения. Основная причина кроется в особенностях обработки графического интерфейса GDI/GDI+ в сессиях удаленного рабочего стола (RDP) на Windows Server 2012. Когда мы печатаем документ через перенаправленный (redirected) принтер, часть процесса рендеринга происходит на стороне клиента, где локальные графические библиотеки успешно справляются с прозрачностью метафайлов (WMF/EMF), которые Word использует для контейнеризации картинок. Однако, когда печать инициируется непосредственно на сервере через локально установленный виртуальный принтер, система рендеринга в изолированной сессии может игнорировать альфа-канал, «схлопывая» слои графики в один непрозрачный слой.
Ситуация осложняется использованием OLE. Объект Word внутри 1С — это «черный ящик», передача данных из которого в поток печати сильно зависит от версии Office и настроек аппаратного ускорения графики. Разберем пошагово, как это исправить.
Одним из самых надежных способов решения проблемы является отказ от тяжеловесных объектов OLE в пользу специализированных библиотек. Рассмотрим использование OCX от разработчика Z1. Этот метод позволяет внедрять изображения напрямую в табличный документ, обеспечивая корректную обработку прозрачности без привлечения ресурсов Microsoft Word.
Преимущества этого подхода:
BMP и PNG.При использовании внешних компонент работа с объектом на печатной форме выглядит примерно так:
// Пример инициализации объекта для печати
Попытка
КартинкаПечати = СоздатьОбъект("Z1.PictureOCX");
КартинкаПечати.Загрузить(ПутьКФайлу);
КартинкаПечати.Прозрачность = 1;
Исключение
Сообщить("Компонента Z1 не зарегистрирована");
КонецПопытки;
Проанализируем возможности компоненты Yoksel. Для опытных разработчиков 1С 7.7 это стандарт де-факто при работе с печатными формами. Yoksel заменяет стандартный движок табличных документов 1С на более современный, который умеет экспортировать данные в PDF напрямую, минуя драйвер принтера.
Алгоритм действий при внедрении Yoksel:
yoksel.dll.Таб.Напечатать() используем методы объекта Конвертер.Если формат вывода строго ограничен PDF, стоит рассмотреть современные наработки, такие как v7Moxel. Это расширение позволяет сохранять табличный документ в PDF без использования виртуальных принтеров вообще. Особенность метода в том, что он автоматически делает белый фон прозрачным при обработке изображений, что идеально подходит для печатей и подписей.
Рассмотрим пример логики сохранения:
// Использование v7Moxel для прямого вывода
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ПечатнаяФорма");
// ... заполнение таблицы ...
Мексель = СоздатьОбъект("v7Moxel.ТабличныйДокумент");
Мексель.ЗагрузитьИзТаблицы(Таб);
Мексель.ЭкспортВPDF(ИмяФайлаРезультата);
Этот метод исключает промежуточное звено в виде драйвера принтера, что полностью снимает проблему настройки серверов печати.
Если переделывать множество печатных форм слишком трудозатратно, попробуем изменить поведение самого OLE-контейнера. В Microsoft Office 2016 по умолчанию включено аппаратное ускорение графики, которое в серверных ОС часто работает некорректно.
Выполним следующие шаги:
Выясним причину, почему штатный объект 1С Картинка не всегда справляется с прозрачностью. 1С 7.7 лучше всего работает с векторным форматом WMF (Windows Metafile). Если вы сконвертируете скан печати из PNG в WMF с прозрачным фоном, вы сможете вставить его в печатную форму как обычную картинку, а не через OLE.
Важный момент: При печати векторного WMF прозрачность сохраняется гораздо чаще, так как принтер получает инструкции по отрисовке линий и заливок, а не массив пикселей.
Если doPDF и Foxit не помогают, попробуйте классический PDFCreator (желательно версий 1.7.x) или Bullzip PDF Printer. В настройках Bullzip есть возможность форсировать использование Ghostscript для рендеринга. Ghostscript является гораздо более мощным интерпретатором PostScript, чем стандартные средства Windows, и позволяет корректно обрабатывать сложные слои прозрачности.
В файле настроек принтера (обычно settings.ini) можно попробовать изменить параметр обработки изображений:
ImageCompression=no.PDF/A-1b или наоборот, отключите стандарты архивирования для использования полной модели прозрачности Adobe PDF.Для решения проблемы на Windows Server 2012 мы рекомендуем следующий порядок действий: сначала попробуйте отключить аппаратное ускорение в Word. Если это не поможет, наиболее надежным и «профессиональным» путем будет внедрение компоненты Yoksel или v7Moxel. Это не только решит проблему с прозрачностью, но и ускорит формирование отчетов, а также избавит вас от проблем с «подвисшими» процессами Word в памяти сервера.