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文档下载下来了。