Grails render-plugin不呈现图像

时间:2017-04-20 11:39:38

标签: image pdf grails render

我现在已经设置了render-plugin并获得了很好的PDF文件,但我还需要将图像放入表格的几列中。这些图像由实例的数据字段有条件地选择。

我认为资产/图像文件夹中的图像是正确的位置。

我在模板中使用以下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" />

我不关心这里的情况我只是想看看它是否会被打印,但这不是因为视图已被摧毁:

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 =“$ {imageBytes}”。 希望有人能给我一些帮助或解释。

2 个答案:

答案 0 :(得分: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")
}

视图应该没问题。

答案 1 :(得分:0)

犯了一个大错误&gt; _&lt ;,用于创建PDF的模板也被用于订购PDF的视图使用,此时控制器尚未创建图像。 因此,我必须在渲染之前检查图像的值。

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

需要什么。