前言
上一篇博客我简单介绍了一下JasperReport的主要功能,今天我就来介绍一下如何通过代码使用JasperReport生成报表。
正题
今天主要是简单介绍如何通过JasperReport生成报表,所以我们只做一个静态文本的显示,对于读取数据库及多数据源的问题会在后面讲解。
1.引入jar包
新建一个web项目,然后将需要将jasperReport/lib包下及jasperReport/dist包下的jar复制到WEB-INF/lib下即可。
ps:我使用的是jasperReport5.0.0版本(下载后只需要解压即可):下载地址:jasperReport
2.新建报表模版
此实例只是通过写一个jrxml文件(即报表模版),然后JasperReport可以解析该jrxml文件之后生成报表。
所以下一个步骤就是写一个jrxml文件:
<?xmlversion="1.0" encoding="UTF-8"?>
<jasperReportxmlns="http://jasperreports.sourceforge.net/jasperreports"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"name="FirstReport">
<title>
<bandheight="100">
<staticText>
<reportElementx="0" y="50" width="150"height="40"/>
<textElement/>
<text><![CDATA[Thisis my first Report.]]></text>
</staticText>
</band>
</title>
</jasperReport>
这是一个最简单的报表,只是显示了一个静态的字符串“This is my first Report.”,对于在这个jrxml文件中jasperReport标签是报表的根标签,其中它的name属性是默认的编译后的文件的名称,其中里面具体的标签会在后面讲解。
3.编译报表模版
报表模版填写完成后即可开始对模版进行编译。jasperReport已经为我们提供了编译jrxml的方法,我们只需要调用即可,所以在这里我们写一个FirstReportCompile类来对jrxml进行编译。
packagecom.dan.jasper;
importnet.sf.jasperreports.engine.JRException;
importnet.sf.jasperreports.engine.JasperCompileManager;
/**
* 编译jrxml文件
* @author zdd
*
*/
publicclass FirstReportCompile {
publicstatic void main(String[] args){
try{
System.out.println("Compilingreport......");
//编译jrxml文件(文件路径),这里路径由于出问题,所以我写了一个绝对路径
JasperCompileManager.compileReportToFile("E:/Project/Work1/testReport/WebRoot/WEB-INF/classes/reports/FirstReport.jrxml");
System.out.println("Done!");
}catch(JRExceptione){
e.printStackTrace();
}
}
}
编译成功后,会在同目录(跟jrxml同一个包)下生成一个FirstReport.jasper文件(该jasper文件的名称取决于jrxml中name的值)
4.预览报表
记得上一篇博客中我提到了jasperReport提供了预览报表模版的功能,所以在这里我们可以对jrxml文件进行预览,我们新建一个FirstReportView类:
packagecom.dan.jasper;
importnet.sf.jasperreports.engine.JRException;
importnet.sf.jasperreports.engine.JasperCompileManager;
importnet.sf.jasperreports.view.JasperDesignViewer;
importnet.sf.jasperreports.view.JasperViewer;
/**
* 预览报表
* @author zdd
*
*/
publicclass FirstReportView {
publicstatic void main(String[] args){
try{
System.out.println("Compilingreport......");
//执行jrxml文件(文件路径,true:读取jrxml,false:读取jasper):预览报表
JasperDesignViewer.viewReportDesign("E:/Project/Work1/testReport/WebRoot/WEB-INF/classes/reports/FirstReport.jrxml",true);
System.out.println("Done!");
}catch(JRExceptione){
e.printStackTrace();
}
}
}
看下运行结果:
这里的viewReportDesign方法可以预览jrxml和jasper文件(报表模版),后面会有方法查看jrprint报表。
5.填充报表
由于我们这里只是简单的显示一个静态字符串,所以我们可以通过空数据源来填充jasper文件然后生成jrprint报表文件(因为该方法需要一个数据源)。
我们新建一个FirstReportFill类来对jasper文件进行填充:
packagecom.dan.jasper;
importjava.util.HashMap;
importnet.sf.jasperreports.engine.JREmptyDataSource;
importnet.sf.jasperreports.engine.JRException;
importnet.sf.jasperreports.engine.JasperFillManager;
/**
* 填充jasper文件(即填充报表)
* @author zdd
*
*/
publicclass FirstReportFill {
publicstatic void main(String[] args){
try{
System.out.println("Fillingreport......");
//通过空参数和空数据源进行填充
JasperFillManager.fillReportToFile("E:/Project/Work1/testReport/WebRoot/WEB-INF/classes/reports/FirstReport.jasper",newHashMap(),new JREmptyDataSource());
System.out.println("Done!");
}catch(JRExceptione){
e.printStackTrace();
}
}
}
其中fillReportToFile方法需要三个参数,第一个即需要被填充的jasper文件,第二个是需要传递给数据源的参数,是Map形式的,第三个参数是需要查询的数据源。
执行完该方法后会在同一目录下生成一个jrprint文件,即可以被查看的报表文件。
ps:在该实例中我们看不到jrxml,jasper,jrprint这三个文件的区别,因为在本例中他们三个是一样的,但是实际上jrxml是一个报表模版,jasper是一个编译后的报表模版,jrprint是一个填充数据后的报表。
6.查看报表
前面在第4步我们对报表模版进行了预览,那么这次是真正对报表进行查看,jasperReport同样给我们提供了对应的方法:
我们将FirstReportView类中的JasperDesignViewer.viewReportDesign方法进行一个更改,更改为下面的语句即可:
JasperViewer.viewReport("E:/Project/Work1/testReport/WebRoot/WEB-INF/classes/reports/FirstReport.jrprint",false);
执行该语句后会出现报表跟之前的那个报表模版预览是一样的(因为没有填充数据)。
小结:
该实例只是对于jasperReport的最简单的使用,之后会逐渐的深入讲解。