Моя программа должна выводить (довольно сложную) форму на принтер, включая несколько изображений. В настоящее время я делаю это, используя Delphi (2006) Printer.Canvas
, после выбора PDF-принтера (PDF995). Это работает как удовольствие.Как распечатать частично прозрачное изображение в PDF-холсте с помощью Delphi?
Однако у меня теперь возникает проблема: есть одно частично прозрачное изображение, которое должно быть помещено поверх других элементов (границы, фон и т. Д.), Причем части этого текста все еще видны через части изображения ,
Выполнение этого на обычном экране Canvas
работает нормально с обычным TBitmap
s, используя TransparentColor
. Однако, когда я пытаюсь сделать это на принтере, это не всегда работает; и когда я пытаюсь это сделать на принтере PDF, он никогда не работает: фон становится черным или (лучший результат до сих пор), становится белым, но все же перезаписывает что-нибудь под ним.
Я попытался достичь такого же результата, вставив PNG-изображение с альфа-прозрачностью (прозрачность a.k.a.) в документе Word, а затем отправив его в указанный принтер PDF. Полупрозрачность исчезает, но прозрачность пикселей сохраняется. Так что, по крайней мере, должно быть как-то возможно.
Кто-нибудь знает как?
Интересная идея, будет приятно услышать, если это сработает. «Стек» для многих «PDF-принтеров» выглядит примерно так: App -> GDI -> Диспетчер очереди печати -> Драйвер PS -> Redirector (например, Redmon) -> Конвертер PS в PDF (обычно Ghostscript). К критическому фрагменту, по-видимому, относится правильный перевод вызовов GDI в PostScript. Ваше предложение, безусловно, может изменить результат в этом отношении. –
Спасибо за подсказку, я постараюсь заставить это работать. – Martijn
Он работает! Конечный результат - это процедура 'StretchDrawClipTransparency (Destination: TCanvas; DestRect: TRect; Bitmap: TBitmap; TransparencyColor: TColor = clNone);' , который, похоже, работает на экране, бумажном принтере, PDF-принтере и компоненте PDF-генератора - короче , все с холстом. Отсутствие полупрозрачности (иначе альфа-прозрачность), но для меня это достаточно хорошо. – Martijn