2013-04-16 157 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

检查我的编辑,可能会有所帮助:-) –