7

私はflyingsaucerを使用してPDFに変換しているxhtmlドキュメントを持っています。 xhtmlにはbase64でエンコードされたイメージをインラインに持ついくつかのタグがあります。 xhtmlのソースは動的なので、イメージタグの構造は変わる可能性があります。これは、タグがどのように見えるかのサンプルです:私は、ブラウザでHTMLを見てみるとレンダリング埋め込みイメージをHTMLでフライングソーサーを使用して

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAagAAAEuCAYAAADbW4YFAAAgAElEQVR4Aex9CYBdRZ ... 

、画像が正しく表示されます、しかし、img要素は、最終的なPDFにレンダリングされません。ここでは、PDFを作成する方法を示します。

ITextRenderer renderer = new ITextRenderer(); 
renderer.setDocument(builder.parse(source), ""); 
renderer.layout(); 
renderer.createPDF(response.getOutputStream(),true); 

誰でも私がこれを達成するために取るべきアプローチを教えてもらえますか?私はthis postingを見ましたが、私はインラインイメージを使用していますので、Eddのソリューションを使ってこれをどのように達成できるかわかりません。事前に

おかげ

+0

機能要件画像のデータURLをFlying Saucerで直接作れるようにするには:https://code.google.com/p/flying-saucer/issues/detail?id=202 – Thilo

答えて

7

はい、あなたはここで与えられたアプローチを使用することができます:エドが持っているRender image from servlet in flyingsaucer generated pdf

を:

 InputStream input = null; 
     try { 
      input = ...; 
      byte[] bytes = IOUtils.toByteArray(input); 
      Image image = Image.getInstance(bytes); 
画像は、リモートソースから来ているエドの場合

(彼そのビットをinput = ...;でスキップしてください)。あなたの場合は、Base64でエンコードされたデータ(base64,の後ろにあるテキスト)から読み込みます。まず、Base64 decoderを使用してバイナリデータを取得し、byte[]またはStreamに変換してから、Java ImageIOを使用して、 PDFに画像を取得するために、エドのアプローチに従う、ここでエドに拍手を送りたい(確かにupvote!)

+2

私はこのアプローチを使用して動作させることができました。ありがとう! –

4

フライング・ソーサーは、データをサポートしています。。。プロトコルは、ネイティブにあなたがしなければならないのは、プロトコルハンドラを登録している:

-Djava.protocol.handler.pkgs=org.xhtmlrenderer.protocols 

サーブレットの必要はありません。

+2

プロトコルハンドラの登録方法に関するリンクがありますか? –

+0

伝説 - ありがとう! – rodnaph

関連する問題