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


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


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


  net.sf.jasperreportsjasperreports6.3.1org.apache.lucenelucene-coreorg.apache.lucenelucene-queryparser
    
    org.olap4jolap4j1.2.0
    
    com.lowagieitext2.1.7xml-apisxml-apis1.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文件。
<?xml version="1.0" encoding="UTF-8"?>

     
     

     
     

		]]>
	</queryString>
	<field name="startTime" class="java.lang.String"/>
	<field name="trafficUlData" class="java.lang.String"/>
	<field name="trafficDlData" class="java.lang.String"/>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="79" splitType="Stretch"/>
	</title>
	<pageHeader>
		<band height="35" splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band height="61" splitType="Stretch"/>
	</columnHeader>
	<detail>
		<band height="230" splitType="Stretch">
			<stackedAreaChart>
				<chart evaluationTime="Report">
					<reportElement x="20" y="15" width="524" height="200" uuid="a175a510-72e2-4196-8088-b539bba9d8ce" isRemoveLineWhenBlank="true" isPrintRepeatedValues="false">
						<printWhenExpression><![CDATA[$V{PAGE_COUNT}==Integer.valueOf("1")
					
					"SERIES 1"$F{startTime}Double.valueOf($F{trafficUlData})"SERIES 2"$F{startTime}Double.valueOf($F{trafficDlData})

使用的数据源是csv文件,result.csv
startTime,trafficUlData,trafficDlData
14967298095,30.3333,0
14968162095,40.3333,1
14969026095,50.3333,3


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








猜你喜欢

转载自blog.csdn.net/chunzhiyan/article/details/73331084