如何在TagLib中使用pngRenderingService.render来获取图像标记,而不是<img/>

时间:2013-08-05 14:04:52

标签: grails png rendering

我使用Taglib <g:mediaitem bean="${item}" />来根据项目类型

呈现媒体标记
def item=attrs['bean']    
if(item?.type=='img')
    {
      out << '<img src="'+item?.src+'" />'
    }else if(item?.type=='audio') {
       out<< '<audio src="'+item?.src+'" />'
    }
      //..........

当我使用此标记呈现pdf时,我收到end-tag的错误,我搜索解决方案,我找到了renderPngrendering:inLinePng ,.我无法在TagLib中使用它。

我的问题是:我如何在taglib中使用渲染png插件,以便在gsp中呈现将呈现为pdf的图像时没有错误。 如果我可以使用pngRenderingService.render,那么应该传递的参数是什么?

1 个答案:

答案 0 :(得分:1)

首先,您必须以字节为单位转换图像,然后使用渲染插件标记lib来渲染图像,例如,

 File imageFile = new File(servletContext.getRealPath("images/imageName.png"))
 out << rendering.inlinePng(bytes: imageFile.bytes)

修改........................................... .........................

我正在开发一个项目,我也在使用渲染插件下载PDF格式的内容,上面发布的代码工作正常。

Bellow是我用PDF格式渲染图像的完整标记。

class ComJftTagLib {
    static final namespace = 'jft'

    def image = { attrs ->
        String dir = attrs.remove('dir')
        String file = attrs.remove('file')
        File imageFile = new File(servletContext.getRealPath("/${dir}/${file}"))
        out << rendering.inlineGif(bytes: imageFile.bytes)
    }
}

我的图片放在图片/文件夹中。

修改........................................... .........................

out << '<img src="data:'
out << 'image/png'
out << ';base64,'
out << new String(new Base64().encode(imageFile.bytes), "UTF-8")
out << '" />'