Grails渲染插件在部署时不会渲染图像

时间:2011-11-21 09:30:55

标签: pdf grails war grails-plugin

我正在使用grails渲染插件生成pdf。 在开发中,我使用带有src的标记将图像包含在服务器上的图像中。它工作正常,但在部署应用程序时不再适用。图像消失了。

我正在通过一个模板进行渲染,所以当我将这个模板调用到gsp中时,它是可以的(即我看到带有图像的pdf的html版本),在使用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")
}

3 个答案:

答案 0 :(得分:7)

我一直在看这个令人沮丧的日子,并尝试了很多东西。我的建议是,他们在文档中给出的建议是坚持内嵌图像。我的意思是以字节形式定义图像。你不会后悔,你将确保渲染插件能够与其他插件如ui-performance和资源一起使用。

首先像这样创建文件对象

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版本。

答案 1 :(得分:3)

它肯定与渲染插件的文档中所述的内容有关:

“应用程序必须可以访问所有资源链接(例如图像,css)。这是由于应用程序而不是浏览器访问链接的资源。根据您在生产中的网络配置,这可能需要一些特殊的考虑“

可能提示:如果您在服务器上运行Linux,请将您站点的域名添加到/ etc / hosts,以便解析为127.0.0.1。如果其他操作系统做了相应的操作。

答案 2 :(得分:0)

正如wwwclaes所说,这是关于应用程序的可用资源

但是,如果你正在使用资产管道,你可以使它更简单。

控制器:

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

然后在你的模板中:

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

现在,您可以将rl用于模板中的任意数量的图像,而不会使用演示项目来破坏控制器中的模型。