代码之家  ›  专栏  ›  技术社区  ›  Martijn

如何使用Delphi将部分透明的图像打印到PDF画布?

  •  3
  • Martijn  · 技术社区  · 16 年前

    我的程序需要将一个(相当复杂的)表单输出到打印机,包括几个图像。我现在用Delphi(2006)做这个。 Printer.Canvas ,然后选择PDF打印机(PDF995)。这是一种享受。

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

    在常规屏幕上执行此操作 Canvas 工作正常 TBitmap s,通过使用 TransparentColor 财产。但是,当我尝试在打印机上执行此操作时,它并不总是工作;当我在PDF打印机上执行此操作时,它永远不会工作:背景变黑,或者(迄今为止最好的结果)变白,但仍然覆盖其下的任何内容。

    我尝试通过在Word文档中插入具有alpha透明度(即半透明性)的PNG图像,然后将其发送到所述PDF打印机,从而获得相同的结果。半透明消失,但保持像素透明度。所以,至少在某种程度上,这是可能的。

    有人知道怎么做吗?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Kevin Newman    16 年前

    您提到您使用的是transparentcolor属性,所以说您不需要alpha透明度,可以不使用二进制透明度(每个像素的透明度是关闭还是打开)是正确的吗?

    如果是这样,可能可以从位图生成一个区域。

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

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

    下面是一个从位图生成区域的示例,它用于生成非矩形表单,但其思想是相同的: http://www.delphi-central.com/BitmapShapedForm.aspx

    下面是为TCavas设置剪切区域的另一个示例: http://www.efg2.com/Lab/OtherProjects/PrinterDemo2.htm

        2
  •  0
  •   Tom    16 年前

    我认为你不能用PDF打印机实现部分透明。你能做的就是 VisPDF 包裹。有了它,你就可以在你的应用程序中添加一个蒙版到包含在PDF中的图片中。如果这不是一个选项,您可以将所有背景内容合并到一个图像中。在这张图片上画阿尔法通道的东西。

        3
  •  0
  •   skamradt    16 年前

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

        4
  •  0
  •   David Taylor    16 年前

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

    祝你好运。在我的经验中,用alpha通道打印图像有时是很有挑战性的。