2017-06-19 78 views
0

我宣布在碧玉view.xml用一个bean作为控制器如下如何为Jasper报告下载设置名称?

<bean id="resultsPdf" 
     class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView" 
     p:url="classpath:reports/resultsPdfFormat.jrxml" 
     p:reportDataKey="datasource"> 
    <property name="headers"> 
     <props> 
      <prop key="Content-Disposition"> 
       attachment; filename=results.pdf 
      </prop> 
     </props> 
    </property> 
</bean> 

的方法如下

@RequestMapping(value = "/results-pdf", method = RequestMethod.GET) 
@ResponseBody 
public ModelAndView generateResultsPdf(@RequestParam("year") String year) { 

    List<Student> studentList = studentService.getResultsByYear(year); 
    JRDataSource jrDataSource = new JRBeanCollectionDataSource(studentList); 
    Map<String, Object> parameterMap = new HashMap<>(); 
    parameterMap.put("title", "Results table")); 
    parameterMap.put("datasource", jrDataSource); 

    return new ModelAndView("resultsPdf", parameterMap); 
} 

在它工作正常的时刻。下载的文件的名称是

results.pdf

现在我想今年参数附加到文件名,这样它会读取为

results_YEAR.pdf

任何想法?提前致谢。

回答

0

我想出了解决这个问题的方法。而不是声明一个bean,我们可以通过改变任务的实现generateResultsPdf方法

@RequestMapping(value = "/results-pdf", method = RequestMethod.GET) 
@ResponseBody 
public void generateResultsPdf(@RequestParam("year") String year, HttpServletResponse response) { 

    List<Student> studentList = studentService.getResultsByYear(year); 
    JRDataSource jrDataSource = new JRBeanCollectionDataSource(studentList); 
    Map<String, Object> parameterMap = new HashMap<>(); 
    parameterMap.put("title", "Results table")); 
    parameterMap.put("datasource", jrDataSource); 

    try { 
      JasperReport jasperReport = JasperCompileManager.compileReport(RESULTS_PDF_REPORT_PATH); 
      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap, jrDataSource); 

      String filename = "new-filename.pdf"; 

      response.setContentType("application/pdf"); 
      response.addHeader("Content-disposition", "attachment; filename=" +filename); 
      OutputStream outputStream = response.getOutputStream(); 

      JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream); 
     } catch (JRException | IOException e) { 
      logger.error("Error in generating pdf : {}", e); 
     } 
}