JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,XML,Excel(通过POI或JExcelAPI实现)和Rtf(通过POI实现)格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。它的主要目的是辅助生成面向页面的(page
oriented),准备付诸打印的文档。JasperReport借由定义于XML文档中的report design进行数据组织。这些数据可能来自不同的数据源,包括关系型数据库,collections,java对象数组。通过实现简单的接口,用户就可以将report library插入到订制好的数据源中。用JasperReport进行报表开发的过程如下所示(Version=1.0):
目前JasperReport最新的版本是1.2.7,可以到Sourceforg网站下载其整个工程及代码。其工程文件目录下的demo子目录中包含很多定义良好的例子,可以实现各种所需功能。鉴于它的文档收费,想学习使用JasperReport的话我们也只能以这些demo作为学习资料了。
但是繁琐的XML标记和功能API在提供强大的动态及可扩展开发的同时也带来了超高的复杂性,在没有免费文档的情况下,手工编写报表设计所需的XML文件是极其不明智的。不过正如我们用JBuilder(或其他可视化开发工具)编写SwingGUI时一样,我们可以采用iReport进行可视化的报表设计来避免和可怕的XML文件及实现细节打交道。虽然可能会损失一些动态生成报表的灵活性,但是大多数情况下,我们只需要静态的设计框架和动态的装填数据而很少需要动态的报表框架,所以和我们所获得的方便相比,这些小小的损失简直可以忽略不计了。当然如果确实需要,且看到下面的东西你不晕的话,自己动手确实可以获得所需的灵活性。
注明:上述所述纯属转载。
报表文件的生成是需要经历一个过程:自己编写(或使用ireport生成)的jrxml文件,jrxml文件实质上就是一个没有填充数据的源报表模板,需要将该文件编译生成(可执行、可填充数据的)报表文件(*.jasper),然后填充数据(成为一个实例),最后打印或显示出来。
报表文件的生成主要可分为两种路线:一、对象路线 二、文件路线(自己命名)
一、对象路线
1.jrxml文件经过JasperCompileManager编译生成JasperReport对象
2. 使用JasperFillManager对JasperReport对象填充数据生成JasperPrint对象
3. JasperExportManager将JasperPrint对象输出到指定的文件,即生成需要的的目标报表。
例:
JasperReport jp=JasperCompileManager.compileReport("jrxml/my.jrxml"); //编译生成JasperReport对象
Map<String, Object> map=new HashMap<String,Object>();//给报表进行参数传递
JasperPrint jasperPrint=JasperFillManager.fillReport(jp, map,new JREmptyDataSource());//填充数据
JasperExportManager.exportReportToPdfFile(jasperPrint, "jrxml/1.pdf"); //输出目标报表
二、文件路线
1. 使用JasperCompileManager将jrxml文件编译成为Jasper文件(编译)
2. 使用JasperFillManager将Jasper文件生成Jrprint文件(填充数据)
3. 使用JasperExport将jrprint文件到处为目标文件(HTML、PDF等)(输出)
例:
//使用jrxml文件生成jasper文件
JasperCompileManager.compileReportToFile("jrxml/report1.jrxml", "jrxml/test.jasper");
//使用Jasper文件生成jrprint文件,返回jrprint 文件的位置
String str=JasperFillManager.fillReportToFile("jrxml/test.jasper", new HashMap());
System.out.println(str);
//使用jrprint生成xml、HTML、PDF文件,返回生成文件的路径
String s=JasperExportManager.exportReportToHtmlFile(str);
System.out.println(s);
我们在实际的开发中并不直接使用jrxml文件,而是使用ireport生成的好的jasper文件。