iReport&JasperRepor使用总结
写于: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
相关论坛:
Matrix:http://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-UCS2-H (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} 的文本域,这样最后一页中即可正常显示页码。注意,此时在报表中会看到两行包含页码的文本域,不过不要紧,就算显示结果只有一页时也不会出现同时显示两个页码行的问题。
JasperReport中JavaBean的使用:
一般情况下通过使用带参数的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.JasperPrintManager和net.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;
更多推荐
所有评论(0)