2016-12-05 17 views
0

私はpdfの動的イメージを表示する必要があります。私はPDF生成のFApacheFOP 2.1を使用しています。 API呼び出しからイメージ行を取得していますが、イメージを64形式に変換しています。xslfoとFOPを使ってPDFでbase64イメージを見ることができません2.1

画像を変換するために、JavaのCOEを見つけてください!

String jpgFileName = ConfigManager.getImageFilePath() + "/jpgImage-"+System.currentTimeMillis()+".jpg"; 
Blob imageDataBlob = (Blob) faesRow.get("imageData"); 

     FileUtil.writeToFile(imageDataBlob, jpgFileName); 

     String base64Result = Base64.getEncoder().encodeToString(FileUtil.readFromFile(jpgFileName).getBytes("utf-8")); 

     result = base64Result; 

私はPDFに画像を印刷するためにXSLFOにBASE64型のデータを使用しています、以下のXSLFOを見つけてください、ここで$ signatureImageはによって送信されたデータであります上記のJavaコード:

<xsl:param name="Name">data:image/jpg;base64,{$!signatureImage}</xsl:param> 

    <fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in"> 
     <fo:block text-align="left"> 
     <fo:external-graphic content-width="scale-to-fit" 
      content-height="100%" 
      width="100%" 
      scaling="uniform" 
      src="url({$Name})"/> 
     </fo:block> 
    </fo:block-container> 

テンプレートレンダリングの出力では、xslfoファイルにbase64ストリームがあります。以下の出力を見つけてください:

<xsl:param name="Name">data:image/jpg;base64,{77+977+977+977+9ABBK... }</xsl:param> 

<fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in"> 
    <fo:block text-align="left"> 
    <fo:external-graphic content-width="scale-to-fit" 
     content-height="100%" 
     width="100%" 
     scaling="uniform" 
     src="url({$Name})"/> 
    </fo:block> 
</fo:block-container> 

今の問題は、その画像が生成されるPDF出力時の価格はなっていないです。 イメージをここに印刷する方法を見つけるのを助けてください。

追加情報: 1.私はPDFを生成するためのエラーは発生していません。 2. PDFは静止画像とバーコードを印刷できます。

+0

image/jpgではなくcontent typeが 'image/jpeg'であるべきですか?また、b64文字列のまわりの{}は私には疑わしいと思われます。 –

+0

私はjpegで試してみましたが、{}も取り除いています。運がないと画像が表示されません。それは問題がbase64変換であるように見えますが、何が問題であるかは不明です。 –

+0

"base64"データのbase64デコードを行うと、77 + 977 + 977 + 977 + 9ABB ... 0xef 0xbf 0xbd 0xefで始まります。これは0xff 0xd8で始まるjpegファイルではないようですおそらく0xff 0xe0です。私に間違って見える... –

答えて

2

この場合、問題が判明しました。

最初の問題は、base64で変換していました、私たちは以下のように変換を使用する必要があります。

<fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in"> 
    <fo:block text-align="left"> 
    <fo:external-graphic content-width="scale-to-fit" 
     content-height="100%" 
     width="100%" 
     scaling="uniform" 
     src="url('data:image/jpeg;base64,$!signatureImage')"/> 
    </fo:block> 
</fo:block-container> 
:これ以外

File file= new File(jpgFileName); 
FileInputStream fileInputStream= new FileInputStream(file); 
byte[] b= new byte[(int) file.length()]; 

fileInputStream.read(b); 

String base64Result = new String(Base64.getEncoder().encode(b),"UTF-8"); 

何らかの変化があまりにもXSLFOテンプレートで必要とされ、以下の変更を見つけてください。

+0

これは、OPが自分自身で答えを見つけるところです。 –

関連する問題