2017-04-20 284 views
1

我現在已經設置了渲染插件,我得到很好的PDF格式的文件,但我也需要把圖像分成幾列在我的表。這些圖像是由實例的數據字段有條件地選擇的。Grails的渲染插件不渲染圖像

我有資產/圖像文件夾中的形象,我認爲這是正確的位置。

我在模板中使用以下GSP行,渲染器將使用它來創建PDF。

<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" /> 

我也沒在意病情這裏我只是想看看它是否會進行打印,但它不是,因爲視圖crasched:

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 

我不知道我做了什麼錯誤,但錯誤消息似乎令人困惑,「字節是必需的」,但我有字節=「$ {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> 

那需要什麼。