2013-04-16 162 views
0

我是一個使用STS 3.2(grails版本2.2.0)的Grails中相當新的開發人員,我有一個應用程序,我想將數據從GSP導出爲PDF格式。我已經安裝了1.5導出插件,有以下內容的reportController:正確實現導出插件Grails將PDF導出爲PDF

def pdf = { results-> 
    def table = results['tables'][params.reportNum.toInteger()] 
    def headers = table?.getAt(0).collect{ it.key } 
    def rows = table*.collect{ cleanNull(it.value.toString()) } //data 
    exportService.export("$params.renderAs", response.outputStream, headers, rows, parameters) 
} 

有人可以幫助我得到這個接線正確嗎?我知道exportService期望這樣做,但不確定是否收集了我需要的所有信息,以使其正常工作:

export(String type,OutputStream outputStream,List objects,Map formatters,Map parameters)}

我希望我已經清楚了我的問題...提前致謝!

+0

是否已將'applicaion/pdf'添加爲插件文檔(http://grails.org/plugin/export)中提到的MIME類型?錯誤堆棧跟蹤將有助於查看您是否遇到任何問題。此外,作爲一種選擇,如果您需要將整個GSP轉換爲PDF並且不對其他任何MIME類型轉換感興趣,那麼我會建議使用非常簡單的Grails Rendering Plugin。 – dmahapatro

+0

好吧,我們也做了一些CSV導出,但是這個PDF導出是我真正想要儘快開始工作的。是的,app/pdf是註冊的MIME類型。我只是想更多地瞭解exportService對於List對象,Map格式器,Map參數的期望......我想我有我需要的地圖,只是不確定。感謝您的輸入! – DaveB

回答

0

該插件的示例具有params.format作爲導出類型。你的params.renderAs的內容是什麼?看來這個值必須是grails.mime.types的關鍵之一。

if(params?.format && params.format != "html"){ 
    response.contentType = grailsApplication.config.grails.mime.types[params.format] 
    response.setHeader("Content-disposition", "attachment; filename=books.${params.extension}") 

    exportService.export(params.format, response.outputStream,Book.list(params), [:], [:]) 

} 

所以你的情況renderAs應該有pdf


好了,看在ExportService,你的代碼示例中,我認爲,要使用方法的簽名是:

export(String type, OutputStream outputStream, List objects, List fields, Map labels, Map formatters, Map parameters) 
  • 對象:對象列表即會出口
  • 字段:字段名,存在於將要出口
  • 標籤對象:字段的地圖和他的標籤
  • 格式化:可以是一個空地圖
  • 參數:可以是一個空地圖

考慮了一本書域類:

class Book { 
    String title 
    String author 
} 

您可以創建這樣一個動作:

def pdf() { 
    List fields = ["author", "title"] 
    Map labels = [author: "Author", title: "Title"] 
    exportService.export(params.format, response.outputStream, Book.list(params), fields, labels, [:], [:]) 
} 
+0

是的,它是PDF。我不確定我需要傳遞的是「列表對象」,「地圖格式化程序」和「地圖參數」。我今天拉出頭髮 - 最後有文件保存對話框出現,我可以保存文檔,但似乎我缺少一些預期的參數(如上所述)。我當然讚賞答案。這個傳奇仍在繼續......在你真正瞭解它之前,你需要爲它付出一點汗水 - 至少這是我所聽到的......大聲笑 – DaveB

+0

看起來你可以將'map formatter'和'map parameters'作爲空映射,例子使用'[:]'。關於列表對象,是一些將在文件中的域類的列表。 –

+0

檢查我的編輯,可能會有所幫助:-) –