2017-12-12 75 views
1

PNG画像を既存のpdfに追加しようとしていますが、透明度が黒色に変換されています。iText画像と透明度

 PdfReader reader = new PdfReader(pdfPath); 
     File f = new File(pdfPath); 
     String result = f.getParent() + File.separator + UUID.randomUUID().toString() + ".pdf"; 
     PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(result)); 
     Image image = Image.getInstance(ImageIO.read(new File(imagePath)), null); 
     PdfImage stream = new PdfImage(image, null, null); 
     PdfIndirectObject ref = stamper.getWriter().addToBody(stream);  
     image.setDirectReference(ref.getIndirectReference()); 
     image.setAbsolutePosition(30, 300); 
     PdfContentByte canvas = stamper.getOverContent(1); 
     canvas.addImage(image); 
     stamper.close(); 
     reader.close(); 

透明性を維持するにはどうすればよいですか?

+0

@Bruno厳密に言えば、これは重複していません。この質問は、透明性を持つ画像をPDFに追加することについてのものであり、参照される重複した質問はそれらを抽出することです。確かに、基本的な誤解は両方で同じです... – mkl

+0

@ブリュノーロワギー、教えてください、私はどのようなマスクを使用する必要がありますか?この質問を申し訳ありません。 PDFにPNG画像を追加するというタスクが1つあります。私はPDFの教祖ではありませんが、多くの文書を勉強する時間がありません。 – Roman

+0

OK、@mkl、私はあまりにも早く質問を閉じました。私は見た:黒の背景、と私は思った:画像マスクがありません。今私はコードを見ていて、私は見ている:*男の子! OPはどこでこのclunkyコードを見つけたのですか?* –

答えて

0

最初に:私はiText Softwareのポリシーに違反しています。古いバージョンのiTextを使用していて、iText 5以前の自発的サポートが停止されていることがポリシーで規定されています。 iText 7を使用するか、以前のiTextバージョンのサポートが必要な場合は、サポート契約を結ぶ必要があります。

しかし、私は好奇心が強いです。

Image image = Image.getInstance(ImageIO.read(new File(imagePath)), null); 
PdfImage stream = new PdfImage(image, null, null); 
PdfIndirectObject ref = stamper.getWriter().addToBody(stream);  
image.setDirectReference(ref.getIndirectReference()); 
image.setAbsolutePosition(30, 300); 
PdfContentByte canvas = stamper.getOverContent(1); 
canvas.addImage(image); 

あなたはImageIOを必要としない、あなたはPdfImageを作成する必要はありません、またあなたがする必要があります:あなたはこの不格好なコードを発見した(またはあなたがこのコードを書くことにした理由は)どこで知りたいですその画像をPDFファイルの本文に追加します。あなたが使用しているコードはコード専門家が非常に特定の目的のためにを使用するでしょう。その特定の目的が分かっている場合は、説明してください。

絶対位置に画像を追加する(つまり、一般的な目的ではなく、特定の目的だ)あなたがしたいすべてのであれば、あなたのコードは、このような単純な次のようになります。この場合

Image image = Image.getInstance(imagePath); 
image.setAbsolutePosition(30, 300); 
PdfContentByte canvas = stamper.getOverContent(1); 
canvas.addImage(image); 

、イメージマスクについて心配する必要はありません。 iTextはあなたのためにそれを世話します。

iText 7ではなく古いバージョンのiTextを使用している理由についても説明してください。アプリケーションの将来性を保証するには、iText 7にアップグレードする必要があります。