我刚刚安装了grails渲染插件,并希望用它来生成PDF文件。我创建了简单的模板,但它没有任何CSS样式导出。如果我只是从grails渲染模板,那么页面会在我的Web浏览器中显示所有样式。
所以,我的问题是 - 如何在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>
我的webui.css中有样式.odd,但它不适用于该行。
任何帮助都将不胜感激。
Edit1:我发现如果按以下方式执行,则会获取样式:
<link rel="stylesheet" href="my_appname${resource(dir:'css',file:'main.css')}" />
但我不想硬编码应用程序名称(这也是一个基本上下文路径)。有没有更好的方法来生成到css文件的正确链接?
答案 0 :(得分:3)
我的答案可能会迟到但我想在这里分享我在grails中渲染pdf的经验。我按照以下步骤进行操作,然后失败到下一步,直到我得到一个pdf:
例如: 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>
答案 1 :(得分:2)
尝试将Config.groovy中的grails.serverURL
设置为app url(例如grails.serverURL = http:// localhost:8080 / appname)。该插件通过此设置解析所有相对链接
答案 2 :(得分:0)
我在其他地方分享了我的答案,但我最终只是将外部文件内容嵌入到gsp for pdf渲染中: