【问题标题】:Grails rendering plugin css issueGrails渲染插件css问题
【发布时间】:2012-05-28 15:43:28
【问题描述】:

我刚刚安装了 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 文件的正确链接?

【问题讨论】:

    标签: java grails pdf-generation rendering


    【解决方案1】:

    我的回答可能已经晚了,但我想在这里分享我在 grails 中渲染 pdf 的经验。我按照以下步骤进行操作,然后故障转移到下一个,直到获得 pdf:

    1. 使用模板 gsp 中的资源插件来抓取捆绑了 css 的模块。

    例如: 测试.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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的回答。它实际上是这样设置的: development { grails.logging.jul.usebridge = true grails.serverURL = "localhost:8080/${appName}" }
      • 在 'localhost' 之前是否有 'http' ?您也可以强制资源使用绝对路径资源(dir:'css',file:'main.css', absolute:true) 以确保插件正确获取 css 文件。
      • 是的,'localhost' 之前有一个 'http'。我也尝试使用绝对路径,但在这种情况下,它是像 http://localhost:8080/appname/css/main.css 这样生成的,这是错误的,因为 css 位于 appname/static/css/main.css
      • 我观察到localhost:8080/appname/css/main.css 重定向无论如何都会重定向到 ../static/.. 所以这应该不是问题。
      • 我看不出可能是什么问题。我刚刚尝试了一个带有插件的测试应用程序,它运行良好(使用 renderPdf(template: "/report", filename: 'test.pdf'))
      【解决方案3】:

      我在其他地方分享了我的答案,但我最终只是将外部文件内容嵌入到 gsp 中以进行 pdf 渲染:

      https://stackoverflow.com/a/32767378/1599616

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-15
        • 1970-01-01
        • 2017-09-17
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        • 2017-10-29
        相关资源
        最近更新 更多