2017-06-19 77 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); 
     } 
}