2011-11-21 117 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为任意数量的模板中的映像,而无需控制器打乱模型与演示文稿项目。