我的程序需要输出一个(相当复杂的)表单给打印机,包括几个图像。在选择PDF打印机(PDF995)之后,我目前正在使用Delphi(2006)的Printer.Canvas
这样做。这就像一种享受。
但是,我现在遇到了一个问题:有一个部分透明的图像需要放在其他元素(边框,背景等)之上,部分文本仍然可以通过图像的某些部分看到。
使用Canvas
属性,在常规屏幕TBitmap
上执行此操作可以正常使用TransparentColor
。但是,当我尝试在打印机上执行此操作时,它并不总是有效;当我在PDF打印机上试用它时,它永远不会起作用:背景变黑,或者(到目前为止最好的结果)变成白色,但仍会覆盖它下面的任何东西。
我尝试通过在Word文档中插入具有Alpha透明度(a.k.a.半透明度)的PNG图像,然后将其发送到所述PDF打印机来实现相同的结果。半透明度消失,但保持像素透明度。至少,这应该是可能的。
有人知道吗?
答案 0 :(得分:2)
你提到你正在使用TransparentColor属性,所以说你真的不需要alpha透明度并且可以使用二进制透明度(每个像素的透明度是关闭还是开启)是正确的吗?
如果是这样,可以从位图生成一个Region。
然后将此区域用作剪裁区域并绘制位图。
PDF打印机可能能够正确处理裁剪区域。
这是一个从位图生成区域的示例,它用于制作非矩形形式,但想法是一样的: http://www.delphi-central.com/BitmapShapedForm.aspx
以下是为TCanvas设置剪辑区域的另一个示例: http://www.efg2.com/Lab/OtherProjects/PrinterDemo2.htm
答案 1 :(得分:0)
我认为你不能使用pdf打印机实现部分透明。您可以做的是获取VisPDF包。有了它,您可以为您在应用程序中实际生成的pdf中包含的图像添加掩码。如果这不是一个选项,您可以将所有背景内容合并到一个图像中。在此图像上绘制alphachanneled事物。
答案 2 :(得分:0)
之前我也遇到过这个问题,如果我没记错的话,我最终做的是创建一个我操作的屏幕外位图,然后在我再次复制之后再使用我发送的画布上的新位图副本到打印机。
答案 3 :(得分:0)
您可能需要考虑在应用程序中使用第三方PDF组件将画布直接渲染为PDF。我使用这种技术在我为Infrared Thermography开发的商业产品中进行专业报告(RTF,Radioemtric JPEG,Tables,Text等)。我对性能和质量非常满意。我正在使用的组件llPDFLib刚刚更新,我相信现在支持完整的图像透明度。
祝你好运。根据我的经验,使用Alpha通道打印图像有时会很有挑战性。