I want to be able to send report generated with JasperReports as attachment. Currently in my application I am able to view the report using JasperReportsViewResolver below is my configuration
@Bean
public JasperReportsViewResolver getJasperReportsViewResolver() {
JasperReportsViewResolver resolver = new JasperReportsViewResolver();
resolver.setPrefix("classpath:/static/jasper/");
resolver.setSuffix(".jrxml");
resolver.setReportDataKey("datasource");
resolver.setViewNames("rpt_*");
resolver.setViewClass(JasperReportsMultiFormatView.class);
resolver.setOrder(0);
return resolver;
}
I was not able to get the input resource from this viewresolver so below is the idea I'm thinking of but I'm not sure it is the best way
JasperDesign jasperDesign = JRXmlLoader.load(getClass().getResourceAsStream("/jasper/rpt_media.jrxml"));
JasperReport report = JasperCompileManager.compileReport(jasperDesign);
JRDataSource reportData = new JREmptyDataSource();
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("reportTitle", "dfa dafdf d dfd");
OutputStream stream = new FileOutputStream(tempfile);
JasperReportsUtils.renderAsPdf(report, parameters, reportData, stream);
after saving the report to random file I do read it and send as attachment.
Any other suggestion?
I found the below to be the best way
JRDataSource ds = new JRBeanCollectionDataSource(reportList);
Resource report = new ClassPathResource("static/jasper/rpt_report.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(report.getInputStream(), Collections.EMPTY_MAP,ds);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, baos);
DataSource aAttachment = new ByteArrayDataSource(baos.toByteArray(), "application/pdf");
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setTo("xxxxxx");
helper.setFrom("xxxxx");
helper.setSubject("Testing Email");
String text = "Testing Email";
helper.setText(text, false);
helper.addAttachment("report.pdf",aAttachment);
mailSender.send(message);