2009-05-29 40 views
3

我的程序需要輸出一個(相當複雜的)表單到打印機,包括幾個圖像。在選擇PDF打印機(PDF995)後,我正在使用Delphi(2006)的Printer.Canvas。這工作就像一種享受。如何使用Delphi將部分透明的圖像打印到PDF Canvas?

但是,我現在遇到了一個問題:有一個部分透明的圖像需要放置在其他元素(邊框,背景等)的頂部,部分圖像仍然可以通過圖像的某些部分。

在常規屏幕上執行此操作Canvas可以正常工作,使用TransparentColor屬性的常規TBitmap s。但是,當我嘗試在打印機上執行此操作時,它並不總是有效;當我在PDF打印機上試用時,它永遠不會工作:背景變黑或(到目前爲止最好的結果)變成白色,但仍然覆蓋下面的任何東西。

我已經嘗試通過在Word文檔中插入帶有alpha透明度(a.k.a.半透明度)的PNG圖像來實現相同的結果,然後將其發送到所述PDF打印機。半透明消失,但像素透明度保持不變。所以至少應該有可能。

任何人都知道如何?

回答

2

你提到你正在使用TransparentColor屬性,所以說你不是真的需要alpha透明度並且可以避免使用二進制透明度(每個像素的透明度是關閉還是開啓)?

如果是這樣,可能可以從您的位圖生成一個區域。

然後,您將此區域用作裁剪區域並繪製位圖。

PDF打印機可能能夠正確處理裁剪區域。

下面是從位圖生成區域的一個例子,它是用來做非矩形形式,但這個想法是一樣的: http://www.delphi-central.com/BitmapShapedForm.aspx

這裏是設置一個剪輯區域爲您的TCanvas的另一個例子: http://www.efg2.com/Lab/OtherProjects/PrinterDemo2.htm

+0

有趣的想法,它會很高興聽到如果這工作。許多「PDF打印機」的「堆棧」就像這樣:應用程序 - > GDI - >打印後臺處理程序 - > PS驅動程序 - >重定向器(例如Redmon) - > PS到PDF轉換器(通常爲Ghostscript)。對於批判性的作品似乎是將GDI調用轉換爲PostScript的正確方式。你的建議肯定會改變這方面的結果。 – 2009-05-31 03:49:53

0

我不認爲你可以使用PDF打印機實現部分透明度。你可以做的是得到VisPDF包。有了它,您可以爲PDF中包含的圖像添加一個遮罩,以便在應用程序中實際生成。如果這不是一個選項,您可以將所有背景材料合併到一個圖像中。在這個圖像上繪製這個alphachanneled的東西。

+0

引用原來的問題:「我嘗試通過在Word文檔中插入帶有Alpha透明度(又稱半透明度)的PNG圖像,然後將其發送到所述PDF打印機來達到相同的結果。半透明性消失,但像素透明度保持不變,至少應該以某種方式成爲可能。「 雖然我會看看VisPDF包。 – Martijn 2009-05-30 20:52:34

0

我之前也有過這個問題,如果我沒有記錯,我最終做的是創建一個我操作的離屏位圖,然後在完成複製並在畫布上使用新的位圖副本後,我發送到打印機。

+0

是的,我也一直在想。缺點是它會生成*巨大的* PDF ... – Martijn 2009-05-30 20:49:58

0

您可能需要考慮在您的應用程序中使用第三方PDF組件直接將畫布呈現爲PDF。我將這種技術用於我爲紅外熱成像開發的商業產品中的專業報告(RTF,Radioemtric JPEG,表格,文本等)。我對性能和質量感到非常滿意。我使用的組件llPDFLib剛剛更新,我相信現在支持全圖像透明度。

祝你好運。根據我的經驗,使用Alpha通道打印圖像可能會遇到挑戰。

+0

感謝您鏈接到組件,我會檢查出來。 – Martijn 2009-05-30 20:51:27