2013-08-05 26 views
1

我使用標籤庫<g:mediaitem bean="${item}" />呈現媒體標籤accordiong到項目類型如何使用pngRenderingService.render在標籤庫來獲得圖像標記,而不是<img>

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

,當我使用這個標籤來顯示PDF格式,我得到的結束標記的錯誤,我上的搜索解決方案,我發現renderPngrendering:inLinePng。我不能在TagLib中使用它。

我的問題是:我如何使用標籤庫渲染PNG插件沒有錯誤,將被渲染爲PDF渲染GSP圖像時。 如果我可以使用pngRenderingService.render,什麼是應該傳遞的參數?所有的

回答

1

首先,你必須將圖像轉換以字節爲單位,然後使用渲染插件標記庫也呈現圖像例如,

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

編輯............. .................................................. .....

我正在使用渲染插件下載PDF格式的內容的項目,我發佈的上面的代碼工作正常。

貝婁是我的完整標籤來顯示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 << '" />' 
+0

您的意思是:renderingService.inlinePng代替rendering.inlinePng,因爲我嘗試:渲染。 inlinePng,renderingService.inlinePng和pngRenderingService.inlinePng。它是徒勞 –

+1

請嘗試以上的taglib我張貼,並測試它的樣本圖像上。 – user1690588

+0

我測試了它,並且我得到了下面的錯誤:getWriter()已經被調用了這個響應...在grails.plugin.rendering.RenderingService.writeToResponse(RenderingService.groovy:82) –

相關問題