2012-05-28 140 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>