如何为 Jasper 报告下载设置名称?
How to set a name for the Jasper report download?
我在jasper中声明了一个bean-view.xml如下
<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
有什么想法吗?提前致谢。
我想出了解决这个问题的方法。我们可以通过更改 generateResultsPdf 方法
来完成任务,而不是声明一个 bean
@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);
}
}
我在jasper中声明了一个bean-view.xml如下
<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
有什么想法吗?提前致谢。
我想出了解决这个问题的方法。我们可以通过更改 generateResultsPdf 方法
来完成任务,而不是声明一个 bean@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);
}
}