java - 在 Spring Boot 中将生成的报告作为电子邮件附件发送

标签 java spring-mvc spring-boot jasper-reports

我希望能够将使用 JasperReports 生成的报告作为附件发送。目前在我的应用程序中,我可以使用 JasperReportsViewResolver 查看报告,下面是我的配置

@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;
}  

我无法从这个 viewresolver 获取输入资源,所以下面是我正在考虑的想法,但我不确定这是最好的方法

 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);

将报告保存到随机文件后,我会阅读它并作为附件发送。

还有什么建议吗?

最佳答案

我发现下面是最好的方法

    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);

关于java - 在 Spring Boot 中将生成的报告作为电子邮件附件发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40022536/

相关文章:

java - SpringBoot 响应字符集错误

java - 以编程方式增加spring boot中的线程数

java - BlackBerry JDE 支持的设备吗?

java - Java 中的赌徒破产 ASCII 图

java - 如何在java servlet中限制上传速度?

java - Android Parcelable 对象传递给 Activity 但不传递给服务

hibernate - JPA (Hibernate) 西里尔字母

java - 如何从 Controller 发送多个数组列表到ajax成功函数

java - 使用 Spring MVC 和 Hibernate 进行 Ajax 调用

java - Spring Boot @MockBeans - 如何在多个测试类中使用相同的 beans