2016-11-08 21 views
0

PDFBOXを使用してPDFを作成しました。全体のPDFが完全に生成して、私はリソースストリームを使用したPDF生成で画像が表示されない(読み込み中)

PDImageXObject ptabelle = PDImageXObject.createFromFile("src/main/resources/pdf/ptabelle.png", pdDocument); 

を使用していた。しかし、プロジェクトが、私はクラスローダと静的パスを交換する必要がありますので、いつかライブ行く必要がありますしながらも、画像が読み込ま。 PDFが生成するすべての処理を行った後、テキストは表示されますが、画像は表示されません。

興味深いのは、PDF内に画像があるはずの「ボックス」がありますが、画像はありません。ここ

Box where image should be

ストリーム生成するためのコードです。

ClassLoader classLoader = getClass().getClassLoader(); 
PDStream pdStream = new PDStream(pdDocument, classLoader.getResourceAsStream("pdf/ptabelle.png")); 
PDResources pdResources = new PDResources(); 
PDImageXObject ptabelle = new PDImageXObject(pdStream, pdResources); 

PDPageContentStream pdPageContentStream = new PDPageContentStream(pdDocument, page4); 

コード内では、length + width変数がコード内で定義されています。 PDFBox内部で使用するためである

pdPageContentStream.drawImage(ptabelle, TEXT_BEGIN, currentYCoord, 172, 107); 
+2

コードを変更して、工場クラスを使用するようにしてください。pngの場合、これは 'LosslessFactory'になります。私。最初に 'ImageIO.read()'でBufferedImageにイメージをロードし、 'LosslessFactory.createFromImage(doc、bufferedImage)'を呼び出します。これは機能しますか? –

+0

@TilmanHausherr - 本当にありがとう、トリックを完全にしました:) –

答えて

0

代わりのnew PDImageXObject(pdStream, pdResources)、適切なLosslessFactoryメソッドを使用してください。だからあなたのコードは次のようになります。

BufferedImage bim = ImageIO.read(classLoader.getResourceAsStream("pdf/ptabelle.png")); 
PDImageXObject img = LosslessFactory.createFromImage(pdDocument, bim); 

もファクトリメソッドを代わりに呼び出すことができるかを説明 PDImageXObject.createFromFileByExtensionのJavadocを参照してください。

関連する問題