当前位置: 代码迷 >> ASP >> 开发者施用JasperReport――静态文本报表
  详细解决方案

开发者施用JasperReport――静态文本报表

热度:393   发布时间:2013-03-01 18:33:02.0
开发者使用JasperReport――静态文本报表

前言

   上一篇博客我简单介绍了一下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文件的名称取决于jrxmlname的值)

 

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方法可以预览jrxmljasper文件(报表模版),后面会有方法查看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:在该实例中我们看不到jrxmljasperjrprint这三个文件的区别,因为在本例中他们三个是一样的,但是实际上jrxml是一个报表模版,jasper是一个编译后的报表模版,jrprint是一个填充数据后的报表。

 

6.查看报表

   前面在第4步我们对报表模版进行了预览,那么这次是真正对报表进行查看,jasperReport同样给我们提供了对应的方法:


   我们将FirstReportView类中的JasperDesignViewer.viewReportDesign方法进行一个更改,更改为下面的语句即可:

JasperViewer.viewReport("E:/Project/Work1/testReport/WebRoot/WEB-INF/classes/reports/FirstReport.jrprint",false);

 

执行该语句后会出现报表跟之前的那个报表模版预览是一样的(因为没有填充数据)。

 

小结:

   该实例只是对于jasperReport的最简单的使用,之后会逐渐的深入讲解。

 

 

 

  相关解决方案