【问题标题】:Correct Implementation of Export Plugin for Grails to export a GSP as PDF正确实现 Grails 的导出插件以将 GSP 导出为 PDF
【发布时间】:2013-04-16 16:38:23
【问题描述】:

我是一名使用 STS 3.2(grails 版本 2.2.0)的 Grails 开发人员,我有一个应用程序,我想将数据从 GSP 导出为 PDF 格式。我已经安装了 Export 1.5 插件,并且有一个带有以下内容的 reportController:

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) }

我希望我的问题已经很清楚了...提前致谢!

【问题讨论】:

  • 是否已将 applicaion/pdf 添加为插件文档 (grails.org/plugin/export) 中提到的 MIME 类型?错误堆栈跟踪将有助于查看您是否遇到过任何问题。此外,作为一种选择,如果您需要将整个 GSP 转换为 PDF 并且对任何其他 MIME 类型转换不感兴趣,我建议使用更简单的 Grails Rendering Plugin。
  • 好吧,我们也做了一些 CSV 导出,但是这个 PDF 导出是我真正想要尽快开始工作的。是的,app/pdf 是注册的 MIME 类型。我只是想更多地了解 exportService 对 List 对象、地图格式化程序、地图参数的期望……我想我有我需要的地图,只是不确定。感谢您的意见!

标签: pdf grails export grails-plugin


【解决方案1】:

插件示例将params.format 作为导出类型。你params.renderAs的内容是什么?看来value一定是grails.mime.types的key之一。

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)
  • objects:将被导出的对象列表
  • fields:字段的名称,存在于将要导出的对象中
  • 标签:字段及其标签的地图
  • 格式化程序:可以是空地图
  • 参数:可以是空地图

考虑书籍领域类:

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, [:], [:])
}

【讨论】:

  • 是的,它是 PDF。我不确定我需要作为“列表对象”、“地图格式化程序”和“地图参数”传递的确切内容。我今天拔掉了头发 - 终于出现了文件保存对话框,我可以保存文档,但似乎我缺少一些预期的参数(如前所述)。我当然很感激答案。传奇还在继续……在你真正了解它之前,你需要花点时间去了解它——至少我听到的是这样……哈哈
  • 好像可以将map formattermap parameters作为空映射传递,示例使用[:]。关于列表对象,是将在文件中的一些域类的列表。
  • 另外,我可以根据我的字段列表动态创建“标签”地图吗?我想我知道,但不确定。
  • 是的,您将不得不使用一些反射来检查您的域类的属性,但这是可能的。检查this example
  • 伙计,我遇到了一些问题。这是我所拥有的: 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("pdf", response.outputStream, rows, headers, [:],[:]) -----我尝试构建这个GORM持久化的map道具,但没有骰子。还有其他方法可以做动态标签道具吗?
猜你喜欢
  • 2015-06-18
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多