2011-11-21 171 views
3

我正在使用grails渲染插件生成pdf。 在開發過程中,我將使用src標記的圖像包含在服務器上的圖像上。它可以很好地工作,但在應用程序部署時不再適用。圖像就消失了。Grails渲染插件在部署時不渲染圖像

我通過模板重寫,所以當我在gsp中調用此模板時,它是可以的(即,我看到圖像的html版本的PDF),當在我的控制器中使用renderPdf調用時,無圖像。

再次只在部署的應用程序(戰爭),而不是在開發中。

任何提示?

編輯:在這裏流行的請求代碼:

的_pdf.gsp文件可以簡單到

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <head/> 
    <body> 
    <img src="path/to/image.jpg"/> 
    </body> 
</html> 

控制器的相關部分是

def pdf={ 
    renderPdf(template: "/file/pdf", filename: "myfile.pdf") 
} 
+0

你能展示你的代碼嗎? –

+0

還有日誌輸出,如果有什麼感興趣的話。 –

+0

我已更新我的代碼。請注意,內嵌圖像數據是一種解決方法,但對於大圖像太重了 – fixitagain

回答

7

我一直在尋找這兩個令人沮喪的日子,已經嘗試了許多東西。我的建議,這是他們給文檔中的建議是堅持內嵌圖像 。因此,我的意思是將圖像定義爲字節形式,您不會後悔,並且您可以確保渲染插件可以與其他插件(如UI性能和資源)配合使用。

首先創建像這樣

def paid = new File(ApplicationHolder.application.parentContext.servletContext.getRealPath("/images/paid.jpg")) 

文件對象,然後通過在文件的字節到模型現在

renderPdf(template:invoiceTemplate, model:[paidBytes:paid.bytes]) 

在PDF模板使用下列標籤:

<rendering:inlineJpeg bytes="${paidBytes}" /> 

如果你沒有依賴性問題,那麼你應該設置。 如果遇到相關性問題,像我一樣,並指出HERE,然後看的iText的版本的拉動。

+0

實際上,我也得出了使用內聯的結論,其中一個項目工作很好,但另一方面,我必須報告許多圖像在PDF中,和大小使用這種方法,pdf快速增長(對於3頁文檔,幾個10M),並且服務器有點超載... – fixitagain

+0

很高興聽到您得出同樣的結論:) – 34m0

+0

我發現指定絕對URL會得到圖像出現在PDF中,只要它們沒有被壓縮。所以這可能是您的備份計劃。我很想知道:如果您只是在gsp中將圖像指定爲urls,這是否實際上減小了PDF的大小?我傾向於認爲這對大小沒有影響。 – 34m0

3

它肯定與渲染插件文檔中陳述的內容有關:

「所有資源鏈接(例如圖像,CSS)必須可由應用程序訪問。這是由於應用程序訪問鏈接的資源而不是瀏覽器。 「

可能的提示:如果您在您的服務器上運行Linux,請將您的站點的域名添加到/ etc/hosts中,以使其解析爲127.0.0.1。如果其他操作系統做相應。

+0

好吧,我確信圖像存在,因爲正如我的消息所述,調用另一個gsp內的模板是好的(即圖像存在)在生產服務器 – fixitagain

+0

btw我使用碼頭作爲服務器 – fixitagain

+0

是的,該圖像存在,您的瀏覽器找到並顯示它。然而,渲染插件試圖直接從服務器而不是從瀏覽器中找到圖像。由於網絡的配置方式,它肯定無法找到它,這就是爲什麼你不能在pdf中看到它。試試我的小費! – wwwclaes

0

由於wwwclaes說,這是有關可用到應用資源。

但是,如果您正在使用資產管道,可以使它更簡單一些。

控制器:

def assetResourceLocator ... def myAction() { ... renderPdf(template:invoiceTemplate, model:[rl:assetResourceLocator]) } ...

然後在你的模板:

<rendering:inlineJpeg bytes="${rl?.findAssetForURI('paid.jpg').byteArray}" />

現在你可以使用RL爲任意數量的模板中的映像,而無需控制器打亂模型與演示文稿項目。