Как напечатать частично прозрачное изображение в PDF Canvas с помощью Delphi? - PullRequest
3 голосов
/ 29 мая 2009

Моя программа должна вывести (довольно сложную) форму на принтер, включая несколько изображений. В настоящее время я делаю это, используя Delphi (2006) Printer.Canvas, после выбора принтера PDF (PDF995). Это работает как удовольствие.

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

Делая это на обычном экране Canvas работает нормально с обычными TBitmap s, используя свойство TransparentColor. Однако, когда я пытаюсь сделать это на принтере, это не всегда работает; и когда я пытаюсь это сделать на принтере PDF, он никогда не работает: фон становится черным или (лучший результат пока), становится белым, но все равно перезаписывает все, что под ним.

Я пытался добиться того же результата, вставив изображение PNG с альфа-прозрачностью (например, прозрачность) в документ Word, а затем отправив его на указанный принтер PDF. Полупрозрачность исчезает, но прозрачность пикселей сохраняется. Так что, по крайней мере, это должно быть как-то возможно.

Кто-нибудь знает как?

Ответы [ 4 ]

2 голосов
/ 30 мая 2009

Вы упомянули, что используете свойство TransparentColor, поэтому правильно ли сказать, что вам действительно не нужна альфа-прозрачность и вы можете обойтись без использования бинарной прозрачности (прозрачность для каждого пикселя либо выключена, либо включена)?

Если это так, возможно, можно создать регион из вашего растрового изображения.

Затем вы используете эту область как область отсечения и рисуете растровое изображение.

PDF-принтер может правильно обрабатывать область обрезки.

Вот пример генерации области из растрового изображения, он используется для создания непрямоугольных форм, но идея та же: http://www.delphi -central.com / BitmapShapedForm.aspx

Вот еще один пример установки области отсечения для вашего TCanvas: http://www.efg2.com/Lab/OtherProjects/PrinterDemo2.htm

0 голосов
/ 29 мая 2009

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

0 голосов
/ 30 мая 2009

Возможно, вы захотите использовать сторонний PDF-компонент в вашем приложении для визуализации холста непосредственно в PDF. Я использую эту технику для специализированных отчетов (RTF, Radioemtric JPEG, Tables, Text и т. Д.) В коммерческом продукте, который я разработал для инфракрасной термографии. Я очень доволен производительностью и качеством. Компонент, который я использую llPDFLib , был только что обновлен, и теперь я считаю, что он поддерживает полную прозрачность изображения.

Удачи. По моим наблюдениям, печать изображений с альфа-каналом может быть сложной задачей.

0 голосов
/ 29 мая 2009

Я не думаю, что вы можете добиться частичной прозрачности, используя PDF-принтер. Что вы можете сделать, так это получить пакет VisPDF . С его помощью вы можете добавить маску к изображениям, содержащимся в PDF, который вы фактически создаете прямо в приложении. Если это не вариант, вы можете объединить все фоновые изображения в одно изображение. Рисование альфа-канала на этом изображении.

...