写于:2006年9月14日
注:可以任意转载,转载时请务必标明文章原始出处和作者信息及本声明。


iReport是报表编辑工具,编辑完成后输出jrxml文件(XML格式)。JasperReport是一个开源的工具包,将JasperReport包加入到classpath中即可开始使用JasperReport包了,从java程序中通过调用包中的类对jrxml文件进行操作,可以完成报表的编译、显示、输出等工作;

 

iReport官方网站:http://jasperforge.org/sf/projects/ireport

jasperreport官方网站: http://jasperforge.org/sf/projects/jasperreports

相关论坛:

Matrixhttp://www.matrix.org.cn/topic.shtml?forumId=48

iReport User Manual下载:http://www.matrix.org.cn/thread.shtml?topicId=38917&forumId=48 (作者的收费文档,英文版)

 

iReport官方提供了一些关于iReport视频:http://ireport.sourceforge.net/docs.html

 

JasperReport官方提供的使用指南:http://jasperreports.sourceforge.net/tutorial/index.html

 

JasperReport提供的一些例子:http://jasperreports.sourceforge.net/samples/index.html

 

 

关于中文显示应该注意的问题:

1、  做中文的pdf报表还需要把iTextAsian.jar拷到lib下。

下载地址:http://itext.sourceforge.net/downloads/iTextAsian.jar

2、  在需要显示中文的文本域上点鼠标右键-“Properties”-“Font”选项卡-Fone Name 选择“SansSerif”,PDF Font Name 选择“STSong -Light”,把“PDF Embedded”勾上,PDF Encoding 选择“UniGB-UCS2H (Chinese Simplified)”编译时就可以正确显示中文拉。

 

关于参数的传递:

       如果开发报表时用到的数据不能全部从一个sql语句中引入的话,可以使用参数来填充报表。参数通过Map对象来引入,首先生成一个map对象,然后将要使用的参数加入到map对象中,

HashMap reportMap = new HashMap()

reportMap中增加参数的格式如下:

reportMap.put("报表中定义的参数名",String或者其他类型的参数)

 

调用fillReportToFile或者fillReport格式如下(详见JasperReport API文档):JasperFillManager.fillReportToFile("report.jasper", reportMap, new JREmptyDataSource(50))

       iReport设计时的SQL语句中同样可以使用参数,比如查询结果要求显示x/y的值,而y的值不好直接从sql语句中得到,可以通过引入参数的方式,将y的值在java程序中计算得出,然后在sql语句中用“x/$P{y}”的方式使用;

注意:填写参数时注意要保持“View”-“Parameters”中的类型和使用参数的文本域中点右键-“Properties”中的类型必须保持一致。

 

iReport报表中计算“合计”的办法:

java程序中将需要计算合计的数据算得出来,通过参数的方式在“LastPage Footer中”显示,这个方法好像很笨,不过还算适用。

 

iReport报表中最后一页不能显示页码的问题:

LastPage Footer 加入new Date()"Page " + $V{PAGE_NUMBER} + " of " "" + $V{PAGE_NUMBER} 的文本域,这样最后一页中即可正常显示页码。注意,此时在报表中会看到两行包含页码的文本域,不过不要紧,就算显示结果只有一页时也不会出现同时显示两个页码行的问题。

 

JasperReportJavaBean的使用:

       一般情况下通过使用带参数的sql语句即可完成报表的制作,更复杂的报表可以使用JavaBean作为数据源的方式来制作。

1、  首先在“Data”-“Connection/Datasource”中设置好javaBean的路径等。

2、  在“Edit”-“Report Query”-“JavaBean DataSource”填入类名等。

最后调用时通过Collection对象将数据引入报表中,User Manual中提供的例子:

public class Person

{

private String name = "";

private int age = 0;

public Person(String name, int age)

{

this.name = name;

this.age = age;

}

public int getAge()

{

return age;

}

public String getName(){

return name;

}

}

 

public class TestFactory

{

public static java.util.Collection generateCollection()

{

java.util.Vector collection = new java.util.Vector();

collection.add(new Person("Ted", 20) );

collection.add(new Person("Jack", 34) );

collection.add(new Person("Bob", 56) );

collection.add(new Person("Alice",12) );

collection.add(new Person("Robin",22) );

collection.add(new Person("Peter",28) );

return collection;

}

}

 

JasperReports使用介绍:  

使用JasperReports生成报表是非常简单的,仅仅使用net.sf.jasperreports.engine包中的几个类即可完成报表的生成、预览、打印、导出等各个功能。

更详细的信息可以参考jasperreports工程包解压缩后docs目录下的API文档。

1.  net.sf.jasperreports.engine.JasperCompileManager类。

    使用这个类的几个静态方法即可完成对报表的编译工作(具体参见api文档)

    编译完成后可以JasperCompileManager有两种处理方式:

       1> 返回一个JasperReport对象

       2> .jrxml文件所在的目录生成一个.jasper文件

    这两种方式是由程序员自己选择的。不过我比较倾向使用.jasper文件,毕竟报表的结构不是每天都在改动,所以每次重新编译报表并不是很划算。

 

2.  net.sf.jasperreports.engine.JasperFillManager

    这个类的作用是用数据填充报表。它可以使用JasperReport对象也可以使用。jasper文件做为报表模板。

    它同样有2中处理方式:

          1> 返回一个JsaperPrint对象。

          2> .jasper文件所在目录生成一个.jrprint文件

    这个类使用net.sf.jasperreports.engine.JRDataSource接口的实现做为数据源。任何实现了JRDataSource的类均可做为数据源使用

    net.sf.jasperreports.engine.data包中定义了一些数据源,可根据自己的需要选择。这里我使用的是JRTableModelDataSource做为

    数据源(因为我的报表还要显示在Table中)。

 

3. net.sf.jasperreports.engine.JasperPrintManagernet.sf.jasperreports.engine.JasperExportManager

   者两个类的作用是打印、导出报表

   他们使用 JasperPrint .jrprint文件做为输入。

   可以根据自己的需要使用里面的方法。

 

例:

       import net.sf.jasperreports.engine.*;

       import net.sf.jasperreports.view.*;

       public class CompileReport {

          public static void main(String args[]) {

HashMap reportMap = new HashMap();

reportMap用于传递参数;

             try {

                //编译report.jrxml并在report.jrxml所在的目录中生成report.jasper文件

                JasperCompileManager.compileReportToFile("report.jrxml");

                //填充数据,这里使用的是JREmptyDataSource

                JasperFillManager.fillReportToFile("report.jasper", reportMap, new JREmptyDataSource(50));

                //预览报表,false代表不是使用xml文件。

                JasperViewer view = new JasperViewer("reports.jrprint", false);

                view.pack();

                view.setVisible(true);

             }

             catch (Exception e) {

                e.printStackTrace()

             }

          }

}

 

 

参考:

1、  iReport User Manual

2、  http://bluesemail.blogchina.com/index.html

 
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐