Java 如何为Jasper报告下载设置名称?
我在jasper-view.xml中声明了一个bean,如下所示Java 如何为Jasper报告下载设置名称?,java,spring-mvc,servlets,jasper-reports,Java,Spring Mvc,Servlets,Jasper Reports,我在jasper-view.xml中声明了一个bean,如下所示 <bean id="resultsPdf" class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView" p:url="classpath:reports/resultsPdfFormat.jrxml" p:reportDataKey="datasource"> <prop
<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);
}
附件filename=results.pdf
控制器中的方法如下所示
<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);
}
@RequestMapping(value=“/results pdf”,method=RequestMethod.GET)
@应答器
公共模型和视图生成器结果SPDF(@RequestParam(“年”)字符串年){
List studentList=studentService.getResultsByYear(年);
JRDasource JRDasource=新的JRBeanCollectionDataSource(学生列表);
Map参数Map=newhashmap();
parameterMap.put(“标题”、“结果表”);
parameterMap.put(“数据源”,jrDataSource);
返回新的ModelAndView(“resultsPdf”,parameterMap);
}
目前它运转良好。下载文件的名称为
results.pdf
现在,我想将year参数附加到文件名中,使其读作
结果(u 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);
}
}
@RequestMapping(value=“/results pdf”,method=RequestMethod.GET)
@应答器
public void generateResultsPdf(@RequestParam(“year”)字符串year,HttpServletResponse){
List studentList=studentService.getResultsByYear(年);
JRDasource JRDasource=新的JRBeanCollectionDataSource(学生列表);
Map参数Map=newhashmap();
parameterMap.put(“标题”、“结果表”);
parameterMap.put(“数据源”,jrDataSource);
试一试{
JasperReport JasperReport=JasperCompileManager.compileReport(结果\u PDF\u报告\u路径);
JasperPrint JasperPrint=JasperFillManager.fillReport(jasperReport,parameterMap,jrDataSource);
String filename=“new filename.pdf”;
response.setContentType(“application/pdf”);
response.addHeader(“内容处置”、“附件;文件名=“+filename”);
OutputStream OutputStream=response.getOutputStream();
jaspeexportmanager.exportReportToPdfStream(jasperPrint,outputStream);
}捕获(JR异常| IOE异常){
logger.error(“生成pdf时出错:{}”,e);
}
}