2012-05-28 90 views
3

我刚刚安装了Grails渲染插件,并希望用它来生成PDF文件。我创建了简单的模板,但它没有任何CSS样式导出。如果我只是从grails呈现模板,那么页面会在我的Web浏览器中显示所有样式。Grails渲染插件的CSS问题

所以,我的问题是 - 如何在PDF生成过程中正确包含CSS文件?

我的模板:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
    <link rel="stylesheet" href="${resource(dir:'css',file:'main.css')}" /> 
    <link rel="stylesheet" href="${resource(dir:'css',file:'webui.css')}" /> 
    <r:layoutResources/> 
    <title>Report</title> 
</head> 
<body> 
    <div id="content"> 
     <div id="center-container"> 
     <h1><g:message code="default.list.label" args="[entityName]" /></h1> 
     <table> 
      <thead> 
       <tr> 
        <th class="trip">trip</th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr class="odd"> 
        <td> 
         ${tip} 
        </td> 
       </tr> 
      </tbody> 
     </table> 
</div> 
    </div> 
</body> 
</html> 

而且我有风格.odd在我webui.css,但它并不适用于该行。

任何帮助,将不胜感激。

EDIT1:我发现,款式都牵强,如果我这样做以下列方式:

<link rel="stylesheet" href="my_appname${resource(dir:'css',file:'main.css')}" /> 

但我不想硬编码的应用程序名称(这也是一个基本上下文路径)。有没有更好的方式来生成正确的链接到一个CSS文件?

回答

2

尝试将Config.groovy中的grails.serverURL设置为应用程序url(例如,grails.serverURL = http:// localhost:8080/appname)。该插件通过此设置解析所有相关链接

+0

谢谢你的回答。它实际上是这样设置的:开发grails.logging.jul.usebridge = true grails.serverURL =“http:// localhost:8080/$ {appName}” } –

+0

在'localhost'之前有'http' '?你也可以强制资源使用绝对路径资源(dir:'css',file:'main.css',absolute:true)来确保插件正确获取css文件。 – aldrin

+0

是的,在'localhost'之前有'http'。此外,我试图使用绝对路径,但在这种情况下,它生成像http:// localhost:8080/appname/css/main.css这是错误的,因为CSS位于appname /静态/ css/main.css –

3

我的回答可能迟了,但我想在此分享我在grails中呈现pdf的经验。我跟着下面的步骤和故障转移到下一个,直到我得到一个PDF:

  1. 使用的资源插件模板GSP抓住其中的CSS被捆绑的模块。

例如: Test.gsp

<html> 
<head> 
    <r:require modules="bootstapApp"/> 
    <r:layoutResources/> 
</head> 
<body> 
    .... 
    <r:layoutResources/> 
</body> 
</html> 

以上工作得很好,但在PDF渲染后的样式不采用。我不得不倒退到第2步。

2.使用上述问题陈述中提到的标签开始。 结果:没有变化。我无法获得pdf中的样式。 失败到第3步

3.在模板gsp中添加了内联样式。然后我可以将它们应用到pdf中。这里需要注意的是,如果你遵循第3步,并且你有类似bootstrap.css的css,那么在模板中内联它们将会很麻烦。即使我们添加它们,也不要忘记将它们放入媒体标签中。对我来说,下面的工作完美的罚款:

<style type="text/css"> 
@media all { 
    //CSS styles goes here 
} 
</style>