Jasperreport 与SpringMVC整合(使用CSVDataSource的应用)

来源:互联网 发布:恒生软件待遇 编辑:程序博客网 时间:2024/06/05 15:17


近期项目需要在Server端生成pdf格式的Report, 于是选用了Jasperreport, 使用Jaspersoft Studio工具生成jrxml和jasper文件。


1. 在pom.xml中定义好Maven Dependency:


      net.sf.jasperreports    jasperreports    6.3.1                                         org.apache.lucene                    lucene-core                                                    org.apache.lucene                    lucene-queryparser                                org.olap4j    olap4j    1.2.0                      com.lowagie            itext            2.1.7                xml-apis    xml-apis    1.4.01


这里用的是Jasperreport 6.3.1 版本,也可以用6.4.0版本,因为Jasperreport 会自动下载lucene的4.5.1 的版本,与项目中已引用的lucene版本有冲突,所以这里排除了lucene-core和lucene-queryparser, 暂时没发现有什麽问题,Jasperreport可以正常使用。


在Eclipse中选中项目,右键选Maven->Update Project..., 可以将jasperrepot lib Download到项目中。


2. 在SpringMVC Controller中定义一个Get 请求:

    @RequestMapping(value = "/helloReport1", method = RequestMethod.GET)    @ResponseBody    public void getRpt1(HttpServletResponse response) throws JRException, IOException {//      InputStream jasperStream = this.getClass().getResourceAsStream("/jasperreports/HelloWorld1.jasper");      InputStream jrxmlStream = this.getClass().getResourceAsStream("/jasperreports/HelloWorld1.jrxml");            Map params = new HashMap<>();//      JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperStream);      JasperReport jasperReport= JasperCompileManager.compileReport(jrxmlStream);            InputStream csvStream = this.getClass().getResourceAsStream("/jasperreports/result.csv");      String[] columnNames = new String[]{"startTime", "trafficUlData", "trafficDlData"};            JRCsvDataSource csvDS = new JRCsvDataSource(csvStream);      csvDS.setRecordDelimiter("\r\n");      csvDS.setFieldDelimiter(',');      csvDS.setUseFirstRowAsHeader(true);      csvDS.setColumnNames(columnNames);      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, csvDS);      response.setContentType("application/x-pdf");      response.setHeader("Content-disposition", "inline; filename=helloWorldReport.pdf");      final OutputStream outStream = response.getOutputStream();      JasperExportManager.exportReportToPdfStream(jasperPrint, outStream);    }    


其中使用了HelloWorld1.jrxml, 可以直接使用编译后的HelloWorld1.jasper,但为了项目调试方便,这里先使用jrxml文件。
<band height="79" splitType="Stretch"/>

使用的数据源是csv文件,result.csv
startTime,trafficUlData,trafficDlData14967298095,30.3333,014968162095,40.3333,114969026095,50.3333,3


这样就将Jasperreport 与SpringMVC整合起来了,发送一个http://<hostname:port>/helloReport1 的请求,就可以通过Jasper生成一份pdf文档下载下来了。