HelloWorld 之JasperReports初步

在企业应用系统中,经常要输出各种格式的数据报表。著名的开源项目JasperReports可以很好的解决这个问题。使用JasperReports可以在预先设定好格式的报表基础上进行数据的填充并可导出各种格式的报表。下图说明了JasperReports报表生成的基本步骤:

 

  1. 扩展名为.jrxml的文件为标准的xml文件,该文件定义了报表的格式和数据构成。可以通过jasperReports的“黄金搭档”iReport以可视化的方式生成并编辑这个文件。
  2. jrxml文件经过JasperReports API 编译后将生成扩展名为.jasper的二进制文件。
  3. 可以调用JasperReports API针对jasper文件进行数据和参数的填充,生成扩展名为.jrprint的文件。
  4. 调用JasperReports API可以将jrprint文件最终导出成PDF、Excel、Html等各种格式的文件。

    下面将采用iReport + JasperReports 生成如下图的PDF格式报表,表格中的数据来源于数据库,是在固定格式报表基础上,由JasperReport填充得到的。整个报表的生成过程需要两个步骤:

  1. 使用iReport生成规定报表格式和数据构成的jrxml文件。
  2. 调用JasperReports API 编译、填充并导出固定格式的报表。

   

 

一、用iReport生成报表文件(.jrxml)

   开源工具iReport用于定义报表的格式,可以从其官方网站下载 http://ireport.sourceforge.net/cap3.html

    本应用所使用的是iReport-1.2.2-windows-installer.exe 安装程序,启动后,按照向导即可安装(要确认系统中装有1.4版本以上JDK)。下面的操作大致分为12个步骤:

 

步骤1:安装成功后启动该程序,将显示如下画面,选择菜单“File->New Document”新建报表文档,可在弹出的对话框选择报表的大小、版式等。

 

步骤2:按照默认版式创建报表,选择菜单“Data->Connections/Datasources”指定数据库连接或数据源,在弹出的对话框中单击“New”,并在弹出的对话框中指定数据库的连接参数(驱动类、URL、用户名和密码等)iReport通过JDBC连接数据库,要确认相应数据库的驱动类置于iReport安装路径的lib文件夹下。

 

步骤3:选择菜单“Data->Report Query”在弹出的对话框中输入SQL语句:

select id, name, salary from emp,选中所有查询的字段后,单击“OK”。

该SQL语句查询的数据为将来报表中要显示的数据,除了用SQL语句,这里还支持HQL(Hibernate Query Language)等其他多种查询方式。这样的操作将在报表的xml文件中生成如下定义:

 <queryString><![CDATA[select id, name, salary from emp]]></queryString>

 <field name="id" class="java.lang.Integer"/>
 <field name="name" class="java.lang.String"/>
 <field name="salary" class="java.lang.Double"/>

其中元素定义了用于获取数据的查询语句,将来JasperReports将通过这样的方式查询数据。元素定义了对应于查询结果的字段名称和类型,将来报表中可以使用$F{字段名称}获取并显示查询得到的数据。

 

步骤4:选择菜单“Format->Styles”用于指定报表元素将使用的样式,这里的Style类似于HTML中CSS样式,一个样式规定了字体、前景色、背景色等显示特征,样式创建后,可以将其施加于特定的报表元素。为了便于维护,样式之间可以实现继承关系,子样式将拥有父样式的一切特征。在弹出的对话框中单击“New”指定一个名为default的样式(通过Style name指定样式名称),指定其字体、颜色等特征。

 

步骤5:继续指定一些其他的样式,如用于表头字体的“灰底白字”的样式header,将这些样式的Parent style值指定为刚刚创建的default样式,即指定default是所有样式的父样式,这样可以通过编辑default样式指定一些所有样式共同的特征。

 

步骤6:单击“Edit->Insert element...->Static Text”或使用工具栏的按钮,在报表页面中添加静态文本框,将这些文本框置于合适的位置并填入文字,作为表头,通过右边的Element properties 视图将这些文本框的Style(样式)置为方才创建的header。

 

步骤7:打开右边Library视图的Fields图标,可以看到id,name,salary三个标识,这三个标识对应在“步骤3”中创建的“查询字段”,用鼠标直接拖动这些字段到报表页面的适当位置,这样的操作将在报表xml文本中产生形如:

<textFieldExpression class="java.lang.Integer"><![CDATA[$F{字段名称}]]></textFieldExpression>的文本。其中$F{字段名称}表示该字段的查询值。

 

步骤8:在Library视图中单击右键,在弹出的快捷菜单中选择“Add...->Parameter”,用于创建参数,在弹出的对话框中指定参数的名称和数据类型。

 

步骤9:在Library视图的Parameter下可以看到刚刚建立的名为“Title”的参数,用鼠标拖到其到指定位置,并适用在步骤5中创建的title样式,此处为报表的标题。这样的操作将在xml文件中产生如下内容:

<textFieldExpression class="java.lang.String"><![CDATA[$P{Title}]]></textFieldExpression>

其中的$P{Title}对应Title参数的值,将来将通过JasperReports API 对“Title”参数赋值。

 

步骤10:选择菜单“File->Save”或单击工具栏按钮 保存生成的xml文件,注意,文件的扩展名一般为jrxml,该文件定义的报表的格式及其数据构成。

 

步骤11:可以通过iReport的编译工具对生成的报表文件进行测试,单击工具栏的按钮编译报表文件,如果无误可单击工具栏的按钮将显示报表生成的样式,如果单击工具栏的按钮,iReport将会查询数据显示填充数据后的报表,注意:这里的报表的标题显示null是因为没有对报表的“Title”赋值,这里仅仅是通过iReport工具对生成的报表进行测试,下面将通过JasperReports API以编程的方式编译、填充并导出报表。

 

 

步骤12:为了是将来导出的PDF格式报表支持中文显示,可以手工的编辑iReport生成的xml文件,在定义default样式的位置加入支持中文的PDF字体和编码设置:

<style
 
 name="default"
  isDefault="true"
  mode="Opaque"
  pdfFontName="STSong-Light"
  pdfEncoding="UniGB-UCS2-H"
 />

由于其他样式继承了该样式,从而自动拥有的支持中文的设置。

 

 

 二、用JasperReports编译、填充,并导出报表

可以从JasperReports的官方网站下 http://www.jasperforge.org/jaspersoft/opensource/business_intelligence/jasperreports/ 

载JasperReports的发行包,本应用使用的版本是jasperreports-1.2.3,将其发行包中dist目录下的:jasperreports-1.2.3.jar以及lib目录下的如下jar文件:

poi-2.0-final-20040126.jar

jdt-compiler-3.1.1.jar

itext-1.3.1.jar

commons-beanutils-1.5.jar

commons-collections-2.1.jar

commons-digester-1.7.jar

commons-javaflow-20060411.jar

commons-loggin-1.0.2.jar

复制到应用的类路径(CLASSPATH)下。

为了支持中文的PDF报表导出,还需要有iTextAsian.jar文件,该文件可以从http://prdownloads.sourceforge.net/itext/iTextAsian.jar?download 处下载。

注意,由于要连接数据库,还需要将数据库的JDBC驱动类包复制到类路径下。

 

编译报表(.jrxml -> .jasper),JasperCompileManager类的静态方法compileReportToFile用于编译报表文件第一个String参数为待编译的报表xml文件,第二个String参数为编译后的文件名。代码如下所示:

public void testCompile() throws Exception {
  JasperCompileManager.compileReportToFile("test.jrxml", "test.jasper");
}

 

填充报表(.jasper -> .jrprint),JasperFillMangager类的静态方法fillReportToFile用于实现对二进制报表文件的填充,该方法有三个参数:

  1. 一个参数为String类型,表示待填充的文件名。
  2. 第二个参数为Map对象,存放用于填充报表参数(对应与报表中的$P{参数名称})的键值对,下面代码中map对象中存有键值对{Title=员工列表},则对应报表中的$P{Title}位置将被填充为“员工列表”。
  3. 第三个参数为数据库的连接(java.sql.Connection)对象,方法进行数据填充时需要用到该连接实现查询。

代码如下所示:

 public void testFill() throws Exception {
  Map map = new HashMap();
  map.put("Title", "员工列表");
  JasperFillManager.fillReportToFile("test.jasper", map, getConnection());
 }

 

 private Connection getConnection() throws Exception {
   Class.forName("com.mysql.jdbc.Driver");
   Connection con = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/test", "root",
    "root");
   return con;
 }

 

导出报表,JRPdfExporter类用于将.jrprint格式的报表导出Pdf格式,类似的类还有:

  • JRXlsExporter 导出成Excel文件格式
  • JRHtmlExporter 导出成HTML文件格式
  • JRCsvExporter 导出成Csv文件格式
  • JRRtfExporter 导出成RTF文件格式
  • JRTextExporter 导出成纯文本文件格式
  • JRXmlExporter 导出成Xml文件格式

JasperPrint类用于封装.jrprint文件数据。JRPdfExporter的setParameter用于指定导出属性,如:需要到处的JasperPrint对象、导出文件的文件名等。JRPdfExporter的exprotReport方法将实现报表的导出产生相应的PDF报表文档。

 

 public void testExportToPdf() throws Exception {
    JasperPrint jp = (JasperPrint) JRLoader.loadObject("test.jrprint");
    JRPdfExporter exporter = new JRPdfExporter();

    //指定要导出的jrprit数据
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);

    //指定导出文件的文件名
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "test.xls");

    //实现报表的导出 

    exporter.exportReport();
  }

 

下面两个方法用于演示Excel格式和HTML格式报表的导出。

 public void testExportToExcel() throws Exception {
    JasperPrint jp = (JasperPrint) JRLoader.loadObject("test.jrprint");

    JRXlsExporter exporter = new JRXlsExporter();
   
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "test.pdf");
    exporter.exportReport();
 }

 

 public void testExportToHtml() throws Exception {
    JasperPrint jp = (JasperPrint) JRLoader.loadObject("test.jrprint");
    JRHtmlExporter exporter = new JRHtmlExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "test.html");
    exporter.exportReport();
 }

声明:此文章版权归Tarena李翊老师所有(http://blog.sina.com.cn/avaj)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
commons-beanutils.jar Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。 commons-collections.jar Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大 commons-lang.jar Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。 commons-logging.jar: Apache Commons包中的一个,包含日志功能 commons-io.jar Apache Commons包中的一个,java.io.*的扩展,输入输出,支持文件上传 commons-fileupload.jar Apache Commons包中的一个,是一个通过Http接收上传的文件并处理结果文件的库 dom4j-1.4.jar 和 jaxen-1.1.1.jar 是一个JavaXML API,类似于jdom,用来读写XML文件的。Hibernate使用dom4j解析XML配置文件和XML映射元文件。必需的。 ehcache-1.2.jar Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是缺省的cache缓存工具。如果没有其它的可选缓存工具,则为必需的。 hibernate3.jar hibernate3的核心类库。 itext.jar 是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iTextAsian.jar itext中关于亚洲编码的类库,在这里用于中文字体的输入。 junit.jar Junit包,当你运行Hibernate自带的测试代码的时候需要,否则就不用。 commons-digester.jar Apache Commons包中的一个,通过它可以很方便的解析xml文件生成java对象 aspectjrt.jar 和aspectjweaver.jar Annotation 方式实现 AOP commons-dbcp.jar commons-pool-1.2.jar DBCP数据库连接池 cglib-nodep-2.1_3.jar CGLIB是一个强大的高质量高性能的代码生成库,在运行时可以用它来扩展Java类 jfreechart-1.0.12.jar 使用java生成图表的工具 log4j-1.2.15.jar 通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器 jxl-2.6.jar 通过java操作excel表格的工具类库 jta-1.1.jar Java事务API,为J2EE平台提供了分布式事务服务 lucene-core.jar 、lucene-highlighter.jar 、compass-index-patch.jar、 compass-2.1.0.jar 是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 json-lib-2.2.3-jdk15.jar json和java转化的辅助工具 flexjson.jar java到json串的转换 gson-1.3.jar java到json串的转换 ognl-2.6.11.jar OGNL表达式所需要的包,支持EL htmlparser.jar 强大的html解析器 jcommon-1.0.15.jar 使用java生成图表的工具 freemarker-2.3.8.jar 模板相关操作需要包 struts2-core-2.0.14.jar struts2核心包 struts2-spring-plugin-2.0.14.jar struts2整合spring所需要的包 xwork-2.0.7.jar xwork核心包 antlr-2.7.6.jar 一个语言转换工具, Hibernate利用它实现 HQL 到 SQL 的转换模板相关操作需要包 javassist-3.9.0.GA.jar 代码生成工具 Hibernate用它在运行时扩展 Java类和实现,同cglib包 slf4j-api-1.5.8.jar和slf4j-log4j12-1.5.0.jar hibernate使用的一个日志系统 spring.jar spring核心包 spring-security-core-2.0.4.jar 和 spring-security-taglibs-2.0.4.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值