使用带有Spring 4.x的JasperReportsViewResolver将pdf保存在磁盘上

时间:2017-11-24 16:55:01

标签: java spring spring-mvc jasper-reports

我使用Spring Boot,Spring Data REST,Jasper Report(6.x)。 我创建了一个REST控制器,它应该在磁盘上导出PDF报告并返回一个" ok"字符串到客户端。因此,它与用户通常的用例有点不同,用户将PDF发送回客户端。

根据最佳做法,我使用了此回复的解决方案4:https://stackoverflow.com/a/27532493/2012635用于"正常"将PDF返回给客户的用例:

        @RequestMapping(value = "/refunds/{id}/export", method = RequestMethod.GET)
    public ModelAndView exportPdf(@PathVariable("id") Long id, HttpServletRequest request, Locale locale) throws Exception {
        Refund refund = refundRepository.findOne(id);
        if (refund != null) {
            ModelMap model = new ModelMap();
            model.addAttribute("datasource", new JREmptyDataSource(1));
            model.addAttribute("model", refund);        

            return new ModelAndView("RefundPdfView-IT", model);
        } else {
            throw new ResourceNotFoundException();
        }
    }

这种方法非常简洁,我在属性文件中的映射:

#REFUND
RefundPdfView-IT.(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView
RefundPdfView-IT.url=classpath:/reports/accounting/refunds/Refund-IT.jrxml

我想知道我是否可以重复使用这种方法将PDF保存在服务器的磁盘上,而不是将其发送回客户端。 我想重用已定义的映射而不对报告的位置和名称进行硬编码。

一些建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

我想指出的第一件事是您将需要JasperExportManager。 exportReportToPdfFile(JasperPrint,jasperPrint,java.lang.StringdestFileName) 将文件本地保存在服务器中。

从您的用例来看,尚不清楚为什么要将文件保存在服务器中,我觉得应该保存搜索参数,而不是保存文件。这样,当您单击参数时,您将再次获取/生成pdf文件。

或者您应该在服务器中使用curl并使用参数调用所需的网址