2017-04-20 110 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> 

那需要什么。