2009-05-29 6 views
3

私のプログラムは、いくつかの画像を含む(かなり複雑な)フォームをプリンタに出力する必要があります。私は現在、PDFプリンタ(PDF995)を選択した後、Delphi(2006)のPrinter.Canvasを使ってこれを行っています。これは治療のように機能します。Delphiを使用して、部分的に透明なイメージをPDFキャンバスに印刷するにはどうすればよいですか?

しかし、私は今問題に遭遇しています:他の要素(罫線、背景など)の上に配置する必要がある部分的に透明な画像があり、そのテキストの部分が画像の部分。

Canvasを通常のTBitmapで正常に動作させるには、TransparentColorプロパティを使用します。しかし、プリンタでこれを実行しようとすると、必ずしも正常に動作するとは限りません。これをPDFプリンタで試してみると、それはうまくいかない:背景が黒くなったり、(今のところ最良の結果が)白くなったり、その下のものが上書きされたりする。

I Word文書にアルファ透明度(別名半透明)でPNG画像を挿入し、その後、PDFプリンタ前記にそれを送信することによって、同じ結果を達成する試みました。半透明性は消えますが、ピクセル透過性は維持されます。少なくとも、どういうわけかは可能なはずです。

誰でも知っていますか?

答えて

2

は、あなたはそれはあなたが本当にアルファ透明度を必要としないと(オンまたはオフのどちらかである画素ごとに透明度)バイナリ透明度を使用して逃げることができると言うために正しいことを、あなたはTransparentColorプロパティを使用している言及しますか?

もしそうなら、あなたのビットマップからリージョンを生成することが可能かもしれません。

その後、クリッピング領域として、この地域を使用し、ビットマップを描画します。

PDFプリンタが正しくクリッピング領域を扱うことができるかもしれません。ここで

は、ビットマップの領域を生成する例ですが、非矩形の形を作るために使用されるが、考え方は同じですだ:ここでは http://www.delphi-central.com/BitmapShapedForm.aspx

は、あなたのTCanvasのためのクリッピング領域を設定する別の例である: http://www.efg2.com/Lab/OtherProjects/PrinterDemo2.htm

+0

面白いアイデアは、これがうまくいくかどうか聞いてみるといいですね。多くの "PDFプリンタ"の "スタック"は、App - > GDI - >プリントスプーラ - > PSドライバ - >リダイレクタ(例えばRedmon) - > PSからPDFコンバータ(通常はGhostscript)です。重要な部分は、PostScriptへのGDI呼び出しの適切な翻訳であるようです。この点であなたの提案は確かに結果を変えるかもしれません。 –

+0

チップをありがとう、私はこれを動作させるようにしようとします。 – Martijn

+0

それは動作します!最終結果は、画面、紙プリンタ、PDFプリンタ、およびPDF生成コンポーネントで動作するように見える 'StretchDrawClipTransparency(Destination:TCanvas; DestRect:TRect; Bitmap:TBitmap; TransparencyColor:TColor = clNone);' です。 、キャンバスのもの。 透明度(別名アルファ透明度)はありませんが、これで十分です。 – Martijn

0

私はあなたがpdfプリンタを使用して部分的な透明性を達成できるとは思いません。あなたができることは、VisPDFパッケージを入手することです。これで、実際にあなたが作成したpdfに含まれている画像にマスクを追加することができます。これがオプションでない場合は、すべての背景を1つの画像に結合することができます。この画像にアルファチャンネルのものを描く。

+0

元の質問を引用する:「私は、アルファ透明度(別名半透明)のPNG画像をWord文書に挿入してから、PDFプリンタに送信することで同じ結果を達成しようとしました。透明性は維持されているので、少なくとも何らかの形で可能であるべきだ」と述べた。 しかし私はVisPDFパッケージを見ていきます。 – Martijn

0

これまでもこの問題がありましたが、私が正しく思い出したのは、私が操作したオフスクリーンビットマップを作成した後、再度コピーしてキャンバスに新しいビットマップコピーを使用した後でした。プリンタに送信する。

+0

はい、私もそれについて考えてきました。欠点は、それが*巨大な* PDFを生成することです... – Martijn

0

あなたはPDFに直接キャンバスをレンダリングするために、アプリケーション内でサードパーティのPDFコンポーネントを使用して検討する必要があります。赤外線サーモグラフィー用に開発した市販の製品で、このテクニックをRTF、Radioemtric JPEGs、Tables、Textなどの特殊なレポートに使用します。私はパフォーマンスと品質に非常に満足しています。私がllPDFLibを使用しているコンポーネントはちょうど更新されました、そして、今私は完全なイメージの透明性をサポートすると信じています。

幸運のベスト。私の経験では、アルファチャンネルで画像を印刷することは時々困難になることがあります。

+0

コンポーネントへのリンクありがとうございます、私はそれをチェックアウトします。 – Martijn