2017-04-20 10 views
1

レンダープラグインをセットアップして、素敵なPDFファイルを取得しましたが、画像をテーブルのいくつかのカラムに入れる必要があります。これらのイメージは、インスタンスのデータフィールドによって条件付きで選択されます。Grailsのレンダリングプラグインは画像をレンダリングしません

私は正しい場所だと思うので、assets/imagesフォルダに画像があります。

レンダラーがPDFを作成するために使用するテンプレートで、次のGSPラインを使用します。

<td><g:if test="${od?.priceFSC > 0.1}"><asset:image src="checkOut16x16.png" width="16" height="16"/></g:if></td> 

HTMLビューとして、画像は完全に印刷されますが、PDFをレンダリングすると欠落します。

私はドキュメントをチェックし、例のコードを試してみました:

コントローラを:

def createPDF() { 
    def file = new File("asets/CheckOut16x16.png") 
    def OfferHeader offerHeader = OfferHeader.get(params.id) 
[offerHeader: offerHeader]) 
    renderPdf(template: "/stocknote/Stocknote", model: [offerHeader: offerHeader,imageBytes: file.bytes], filename: "Stocknote-"+params.id+".pdf") 
} 

ビュー:

<rendering:inlinePng bytes="${imageBytes}" class="some-class" /> 

私はここに条件を気にしなかった私はそれが印刷されるかどうかを見たいだけでしたが、ビューがクラッシュしたためではありません。

URI 
    /stocknote/editStocknote/32 
Class 
    org.grails.taglib.GrailsTagException 
Message 
    Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error processing GroovyPageView: [views/stocknote/editStocknote.gsp:32] [views/stocknote/_StocknoteDetail.gsp:3] 'bytes' is required 
Caused by 
    [views/stocknote/editStocknote.gsp:32] [views/stocknote/_StocknoteDetail.gsp:3] 'bytes' is required 

私は間違っていますが、 "Bytes is required"というエラーメッセージが混乱しているように見えますが、バイト= "$ {imageBytes}"です。 誰かが私に何か助けや説明を与えることを願っています。

答えて

1

は、ファイルへのパスが間違っているように、してみてくださいね:

コントローラー:

def assetResourceLocator 

def createPDF() { 
    def file = assetResourceLocator.findAssetForURI('CheckOut16x16.png') 
    def OfferHeader offerHeader = OfferHeader.get(params.id) 
    [offerHeader: offerHeader]) 
    renderPdf(template: "/stocknote/Stocknote", model: [offerHeader: offerHeader,imageBytes: file.getByteArray()], filename: "Stocknote-"+params.id+".pdf") 
} 

あるとしてビューは問題ないはずです。

+0

それはうまくいったのですが、私は間違いを犯しました> _ <。 PDFを作成するために使用されるテンプレートは、レポートを実行するビューでも使用されます。したがって、ビューがレンダリングされたときにエラーが発生しました。私はレンダリングの前にイメージがテンプレートに存在するかどうかをチェックしなければならなかった – larand

0

大きな間違いをした> _ <、PDFを作成するために使用されたテンプレートは、PDFを注文したときのビューでも使用され、その時点でコントローラによって画像が作成されていません。 このようにするには、レンダリングする前にイメージの値を確認する必要がありました。

<g:if test="${imageBytes!= null}"> <rendering:inlinePng bytes="${imageBytes}" /></g:if> 

何が必要なのですか。

関連する問題