3

我的程序需要向打印机输出一个(相当复杂的)表格,包括几个图像。Printer.Canvas在选择 PDF 打印机 (PDF995) 后,我目前正在使用 Delphi (2006) 执行此操作。这就像一种享受。

但是,我现在遇到了一个问题:需要将一个部分透明的图像放置在其他元素(边框、背景等)之上,而该文本的某些部分仍然可以通过图像的某些部分看到。

通过使用该属性,在常规屏幕上执行此操作对Canvas常规 s 效果很好。但是,当我尝试在打印机上执行此操作时,它并不总是有效。当我在 PDF 打印机上尝试此操作时,它永远不会起作用:背景变黑,或者(迄今为止最好的结果)变白,但仍会覆盖其下方的任何内容。TBitmapTransparentColor

我尝试通过在 Word 文档中插入具有 alpha 透明度(又名半透明)的 PNG 图像,然后将其发送到所述 PDF 打印机来实现相同的结果。半透明度消失,但像素透明度保持不变。因此,至少应该以某种方式成为可能。

有人知道怎么做吗?

4

4 回答 4

2

您提到您正在使用 TransparentColor 属性,所以说您真的不需要 alpha 透明度并且可以使用二进制透明度(每个像素的透明度关闭或打开)是否正确?

如果是这样,则可以从您的位图中生成一个区域。

然后将此区域用作剪切区域并绘制位图。

PDF 打印机可能能够正确处理剪切区域。

这是从位图生成区域的示例,它用于制作非矩形形式,但想法相同: http: //www.delphi-central.com/BitmapShapedForm.aspx

这是为您的 TCanvas 设置剪辑区域的另一个示例: http ://www.efg2.com/Lab/OtherProjects/PrinterDemo2.htm

于 2009-05-30T07:39:48.607 回答
0

我认为您无法使用 pdf 打印机实现部分透明度。您可以做的是获取VisPDF包。有了它,您可以为您在应用程序中实际生成的 pdf 中包含的图像添加蒙版。如果这不是一个选项,您可以将所有背景内容合并到一个图像中。在这张图片上绘制 alphachanneled 的东西。

于 2009-05-29T13:08:55.703 回答
0

我之前也遇到过这个问题,如果我没记错的话,我最终做的是创建一个我操作的屏幕外位图,然后在我再次复制完成并在我发送到打印机的画布​​上使用新的位图副本.

于 2009-05-29T17:55:07.917 回答
0

您可能需要考虑在应用程序中使用第三方 PDF 组件将画布直接呈现为 PDF。我在为红外热像仪开发的商业产品中使用这种技术进行专业报告(RTF、Radioemtric JPEG、表格、文本等)。我对性能和质量非常满意。我正在使用llPDFLib的组件刚刚更新,我相信现在支持全图像透明度。

祝你好运。根据我的经验,使用 Alpha 通道打印图像有时会很有挑战性。

于 2009-05-30T02:35:38.163 回答