Как экспортировать отчет в формате PDF в отчетах Jasper - PullRequest
0 голосов
/ 20 июля 2011

Я хочу экспортировать отчет в формате PDF, и он должен запросить у пользователя местоположение для загрузки. Как мне сделать это в Grails?

Это мой код:

def exportToPdf(JasperPrint jasperPrint,String path,request){

    String cur_time =System.currentTimeMillis();
    JRExporter pdfExporter = null;

    pdfExporter = new JRPdfExporter();

    log.debug("exporting to file..."+JasperExportManager.exportReportToPdfFile(jasperPrint, "C:\\pdfReport"+cur_time+".pdf"));

    return ;
}

В контроллере яшмы:

/**
   * Generate a html response.
   */
  def generateResponse = {reportDef ->
    if (!reportDef.fileFormat.inline && !reportDef.parameters._inline) {
      response.setHeader("Content-disposition", "attachment; filename=\"" + reportDef.name + "." + reportDef.fileFormat.extension + "\"");
      response.contentType = reportDef.fileFormat.mimeTyp
      response.characterEncoding = "UTF-8"
      response.outputStream << reportDef.contentStream.toByteArray()
    } else {
      render(text: reportDef.contentStream, contentType: reportDef.fileFormat.mimeTyp, encoding: reportDef.parameters.encoding ? reportDef.parameters.encoding : 'UTF-8');
    }
  }

1 Ответ

4 голосов
/ 20 июля 2011

Вы смотрели на Jasper Plugin? Похоже, инструменты уже созданы для вас.Что касается запроса у пользователя местоположения загрузки, браузер имеет некоторый контроллер для получения файлов с веб-страницы.Является ли вашей реальной проблемой то, что вы хотите контролировать местоположение загрузки?

[ОБНОВЛЕНИЕ]

Использование местоположения 'c: \' на вашем сервере не клиента ивот почему он не загружается.

попробуйте что-то вроде этого ...

def controllerMethod = {
    def temp_file = File.createTempFile("jasperReport",".pdf") //<-- you don't have to use a temp file but don't forget to delete them off the server at some point.

    JasperExportManager.exportReportToPdfFile(jasperPrint, temp_file.absolutePath));

    response.setContentType("application/pdf")  //<-- you'll have to handle this dynamically at some point
    response.setHeader("Content-disposition", "attachment;filename=${temp_file.getName()}")
    response.outputStream << temp_file.newInputStream() //<-- binary stream copy to client



}

Я не проверял это, и есть более эффективные способы обработки файлов и потоков, ноЯ думаю, вы получите общее представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...