- 浏览: 1173962 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (411)
- ASP (6)
- ASP.NET (2)
- CSS (4)
- HTML (11)
- Javascript (34)
- Java (100)
- PHP (1)
- XML (2)
- Flash/Flex/AS (1)
- 编程理论 (6)
- 操作系统 (23)
- 架构与搭建 (13)
- 软件应用 (39)
- 移动开发及应用 (4)
- UI设计 (2)
- 数据库 (23)
- 围棋 (1)
- 闲语茶楼 (6)
- 金融 (1)
- 其他 (3)
- Linux/Unix (38)
- 项目管理 (3)
- cmd (2)
- ssh (3)
- SVN (1)
- 移动开发 (1)
- HTML5 (1)
- jquery (1)
- redis (1)
- nginx (2)
- webservice (1)
- vmware (1)
- ssl (1)
- eclipse (1)
- sqlite (1)
- spring (2)
最新评论
-
cnhome:
Java 8 下:// 编码String asB64 = Ba ...
不要使用sun.misc.BASE64Encoder -
请叫我翠西狗:
那如果我要用this.getServletContext() ...
JSP/Servlet使用代理或路由器映射时获取服务器地址为内网地址 -
nomblouder:
按照别的博客,别名一直是p4merge,导致一直报错comma ...
win与linux下git配置p4merge为合并比较工具的方法 -
linuxzhang:
请问我按你的方法修改了sts-3.7.3.RELEASE中的o ...
Eclipse中setter/getter方法自动添加属性注释 -
yzh__:
求解答。。。
Struts2定义默认拦截器时需要注意
一、介绍
1)它可以PDF,HTML,XML等多种形式产生报表或动态报表,在新版本还支持CSV,XLS,RTF等格式的报表;
2)它按预定义的XML文档来组织数据,来源多(如:关系数据库,Java容器对象(collection,arrays)等);
报表的填充过程:
先产生报表设计对象->序列化该对象->存储在磁盘或网络->产生XML文件(表格数据)。
表单的设计过程就是用定义于XML文件中的Java表达式来实现报表的设计。
3)它带数据一致性验证;
4)报表引擎必须先接受数据(通过参数等多种形式)来产生报表,更多的是来自数据源,引擎直接接收用于填充表格的数据源对象,或者通过自身提供的JDBC连接对象来处理数据库的数据;
5)报表最终要产生一个新的对象来进行填充操作,从而产生打印文档对象,这也是存储在磁盘或网络传输介质的序列化对象;
6)内置浏览器能直接查看结果,以PDF,HTML,XML导出;
7)重要的类:
net.sf.jasperreports.engine.design.JasperDesign
其实例是用于报表产生的原始类;
net.sf.jasperreports.engine.design.JasperReport
表现了报表设计对象,是作为报表的编译过程的结果而被实例化,是向报表中填充数据的准备。
二、结构
JasperReports用XML文件来定义,约定用jrxml作为文件的后缀名。
1)主要元素:
<jasperReport> 根元素
<title> 报表的标题
<pageHeader> 页眉
<detail> 正文
<pageFooter> 页脚
<band> 定义报表部件,以上所有元素都包含一个band元素作为其唯一子元素。
除了根元素,其余元素是可选的。
2)其编辑工具iReport在Eclipse3.2下的安装过程
菜单“帮助”->“软件更新”->“查找并安装”->“搜索要安装的新功能部件”--(下一步)-->“新建远程站点”,输入以下内容:
名称:JasperForge
URL:http://www.jasperforge.org/update
--(确定)-->“下一步”-->直至完成。
3)以JasperReports1.3.0版本为例,一个JasperReports项目需要如下jar包:
包名 说明
jasperreports-1.3.0.jar JasperReports API
commons-beanutils-1.7.jar JavaBeans Utility classes
commons-collections-2.1.jar Collections framework extension classes
commons-digester-1.7.jar classes for processing XML documents
commons-logging-1.0.2.jar Logging classes
poi-2.0-final-20040126.jar Jarkarta POI API to generate an Excel Document
itext-1.3.1.jar PDF library
xml-apis.jar XML parser API
三、iReport介绍
1)iReport是为JasperReports设计的强大的,直观的,易于使用的可视化报表设计器,为win32平台编写。允许用户可视化地编辑XML JasperDesign文件,可以和其它数据库进行JDBC通信。
再设计模板时可以以HTML,PDF,XML方式预览,用它生成的文件有.jrxml和.jasper两种文件。
.jrxml:是可视化编辑的xml文件;
.jasper:经编译后生成的类文件,即报表模板文件。
2)iReport的输出格式
其预览输出格式有:PDF,HTML,CSV。JAVA2D,EXCEL,纯文本,JRView。
注意:JRViewer是直接以C/S方式作为报表的输出格式,在JFrame框架下输出。
3)报表的动态对象变量、参数、字段
字段Fields:是从数据库抽取出来的,在报表中出现的数据库内容。$F
参数Parameters:你写的应用需要提供给报表的入口。 $P
变量Variables:报表中一些逻辑运算的表现。 $V
每个对象的定义格式如下: $V{variablesName}
4)运行时需要.jasper文件;编译:把.jrxml->.jasper文件。
静态运行:静态文本来运行,和数据源无关;
动态运行:带数据源运行。
5)报表的结构
title、pageHeader、columnHeader、detail、columnFooter、pageFooter、summary、groupHeader、groupfooter。
6)在iReport中创建数据库连接
(1)菜单DourceSource -> Connections/DataSources -> ...new ->
(2)菜单Build -> Set active connection -> 选择 -> ... -> OK
7)在iReport中创建文件
iReport工具是一个可视编辑器帮助创建JasperReports文件。JasperReports是一个基于Java报表的引擎。
当你在iReport中创建一个报表,你实际上是对配置文件进行操作,告诉JasperReports应该怎样建立Report。
三种文件:
.jasper文件:编译的二进制文件;
.jrxml文件:报表的配置文件;
.pdf文件:生成的pdf文件。
8)报表格式化
在iReport上选择报表的一个区域,将呈现蓝色高亮显示;
可用鼠标拖曳来改变区域的尺寸,当误操作时,用undo来恢复;
如选择框变红,则有错误,report将不能编译;
改变字体或调整尺寸,菜单“View”->“Element properties”->分三个选择:
(1)Common选择:尺寸,前景色/背景色,透明度,打印条件,位置属性等;
(2)Font选择:字体、大小、类型,PDF字体,加粗,斜体,下划线,水平位置,垂直位置,PDF编码。
注意:两种字体:
Font Name:将显示在iReport设计器和JasperReports运行中;
PDF font Name:将显示在编译后的PDF文件中。
(3)Static Text:静态文本。
想浏览元素时,看“View”->“Elements browser”;
一次选择多个域,按“shift”键再用鼠标点击;
菜单“View”->“Report Properties”报表属性:
报表尺寸,单位,页边距,报表名,纵向Portrait/横向Landscape,列宽,Spacing,标题作为新页,Summary作为新页,XML编码(UTF-8)。
9)使用Groups
菜单“View”->“Report query” 可以查询和修改SQL语句。
10)为report增加参数
(1)菜单“View”->“Report Query”,修改SQL语句,如:加上 WHERE LAST_NAME=$P{LAST_NAME}
注意:参数用$P{}来封装。
(2)定义参数
菜单“View”->“Reports Parameters”
新建参数,如参数名为“LAST_NAME”,再指定参数的类型(如:String)
还可设定“缺省值”和参数的“描述”
运行报表(缺省),还可以传递参数方式:http://server/showReport?LAST_NAME=smith
菜单“Build”->“Execute report(using active conn.)”
11)创建子报表
例子:一个报表包含另一个报表
(1)建立两个报表;
(2)扩展master报表,增加一个subreport元素;
(3)双击subreport元素,设置其属性。在Subreport(other)栏中,
Subreport Expression填入“c:\test2.jasper”(第二个表即子表的文件名),点击“Add”,增加/修改:“Subreport parameter name”和Default value expression值;(COUNTRY $F{COUNTRY})
(4)对子表“Report query”->添加'where COUNTRY=${COUNTRY}'
(5)增加“Report parameters”,(COUNTRY,java.lang.String)
(6)编译detail report;
(7)运行master report。
iReport支持Groovy脚本语言,可无需懂Java。
1、配置XML文件
jasperreports的XML配置文件局域jasperreport.dtd文件而来。
1)根元素jasperReport
其子元素有:报告的字体reportFont,参数parameter,查询字符串queryString,字段field,变量variable,组group,标题title,页眉pageHeader,列眉columnHeader,表明细detail,列脚columnFooter,页脚pageFooter。
属性有:列宽columnWidth,列间距columnSpacing,左边距leftMargin,顶边距topMargin,底边距bottomMargin。
2)报表层字体含义reportFonts
无子元素;
属性有:名字name,是否缺省isFault,字体名fontName,字体大小size,是否粗体isBold,是否斜体isItalic,是否带下划线isUnderline,isStrikeThrough,PDF字体名pdfFontName,PDF编码pdfEncoding,是否嵌入PDF(isPdfEmbedded)。
3)用于产生报表的对象参数parameter。引用P${name}
其子元素有:ParameterDescription,defaultValueExpression
属性有:name,class
4)从数据库检索数据的查询SQL语句 queryString
5)包含于report中的数据库表列字段 field。 引用F${name}
其子元素有:variableExpression,initialValueExpression
属性有:name,class
6)用在XML文件中的变量 Variable 引用V${name}
其子元素有:variableExpression,initialValueExpression
属性有:name,class
7)报表标题 title
其子元素有:band
无属性
8)页眉 pageHeader
其子元素有:band
无属性
9)报表的列名 columnHeader
其子元素有:band
无属性
10)指定的列值detail
其子元素有:band
无属性
11)列尾columnFooter
其子元素有:band
无属性
12)页脚pageFooter
其子元素有:band
无属性
注:在report中,一个band表示一个report节点。一个band元素包括:staticText(静态文本)和textElement(文本元素)两个元素。
常见报表模型:列表、分组、主从、嵌套、交叉、图形、套打、分栏、填报。
2、创建报表
1)建立输入源
InputStream input = new FileInputStream(new File("c:\\JasperReports\\catalog.xml"));
JasperDesign design=JRXmlLoader.load(Input);
2)创建对象
JasperReport report = JasperCompileManager.compileReport(design);
3)获得JDBC连接从数据库检索数据
InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/OracleDBConnectionDS");
Connection conn = ds.getConnection();
4)产生可预览、打印、输出为其它格式的JasperPrint文件
JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);
5)参数处理
Map parameters = new HashMap();
parameters.put("ReportTitle", "PDF JasperReport");
6)输出成XML,PDF,HTML,CSV,XLS(Excel)的任一种文件。
OutputStream output = new FileOutputStream(new File("c:/JasperReports/catalog.pdf"))
JasperExportManager.exportReportToPdfStream(print,output);
3、JasperReports的安装配置
1)JDK的安装,注意JAVA_HOME环境变量;
2)要支持中文,需itext-1.3.1.jar和iTextAsian.jar包,加入CLASSPATH环境变量中;
3)安装iReport,用iReport-1.3.0-windows-installer.exe安装;
4)JasperReport不需任何配置,将其jar包(jasperreports-1.3.0.jar)放入CLASSPATH;
5)数据库的JDBC驱动包,例如Sybase的驱动包为jconn6.jar,加入到CLASSPATH。
4、iReport的安装配置
iReport如果不用其安装文件iReport-1.3.0-windows-installer.exe安装,则需要配置。
iReport需Sun公司的JDK下的tools.jar,需拷贝到iReport的lib目录下。
iReport初始化配置的组成:
(1)建立报表;
(2)选择语言;
(3)加入到CLASSPATH。
四、Report Structure 报告的结构
本章描述报告的结构,可用的report对象和它们的属性。这基本上是JasperReports的快速参考。
1、Expressions 表达式
表达式是JasperReports的核心特征。它是一个重要的机制,允许操纵和显示报告数据,执行各种计算,自定义报告的外观和报告对象的可视性。
1)一个典型的表达式
$F{LastName} + " " + $F{LastName}
一个JasperReports的表达式是以Java表达式为基础的,再加上一些附加的语法,它允许引用参数、变量和字段等。
比如说要引用一个名叫DATA的参数时,语法应为$P{PARAM_NAME}。
对变量和字段来说,其引用语法分别为$V{VAR_NAME}和$F{FIELD_NAME}。
注意:在JasperReports的groovy脚本语言中,也同样可以用$F,$P,$V引用参数、变量和字段。
2)表达式的语法
(1)$F{FIELD} 引用名为FIELD的字段;
(2)$V{VAR} 引用名为VAR的变量;
(3)$P{PARAM} 引用名为PARAM的参数;
(4)$P!{PARAM} 引用名为PARAM的参数;这个特殊的语法仅能用于report的查询中。它允许插入参数的内容到查询字符串中。例如,它能被用于创建一个带通过参数来指定WHERE条件的动态查询。
$R{keyName} 在resource bundle中检索带keyName关键字的字符串。
注意:表达式是用Java或Groovy写成的,这意外着可以用Java强大的功能,如调用方法,允许构建无限复杂的表达式。还要注意,表达式的结果总是一个对象。
3)更多的表达式
(1)new Integer(Math.max($V{Price1},$V{Price2}))
(2)(new SimpleDateFormat("dd/MM/yyyy")).format($F{OrderDate})
(3)$F{SpecialOffer}.booleanValue()? $F{SpecialPrice} : $F{Price}
2、内建的函数
JasperReports提供了一套内建的函数用于report表达式中。这些函数尽管是内建的工具,还是可以在普通操作中执行它。
注意:目前这套函数很有限,在未来会得到扩展。
1)例:使用内建函数
msg("Total cost is {0}", $F{TOTAL})
msg("Matched {0} products out of {1}", $F{MATCHED}, $P{TOTAL})
2)内建的函数
(1)String str(String key);
从和report相联系的resource bundle中得到给出的key的一个字符串。这个函数的功能和使用$R{key}语法等价。
(2)String msg(String pattern, Object arg0);
建立一个带给定的pattern和给定参数来指定其格式的java.util.MessageFormat对象。
(3)String msg(String pattern, Object arg0, Object arg1);
同上;
(4)String msg(String pattern, Object arg0, Object arg1, Object arg2);
同上。
3、Report 报告
Report是表现为报告模板的根对象。在报告执行期间,report模板和数据组合成最终的文档。
报告的属性有:
(1)Report Name 报告名;
(2)Units 报告的单位;有:像素Pixels,毫米Millimeters,厘米Centimeters和英寸Inches。
(3)Language 报告表达式使用的语言;目前有Java和Groovy两种。
(4)Orientation 页的方向;其可能值为水平Protrait和纵向Landscape。
(5)Page Width 以报告单位指定的页宽;
(6)Page Height 以报告单位指定的页高;
(7)Page Size 报告的尺寸,即为page width和page height。
(8)Left Margin 以报告单位指定的左边页边距;
(9)Right Margin 以报告单位指定的右边页边距;
(10)Top Margin 以报告单位指定的顶部页边距;
(11)Bottom Margin 以报告单位指定的底部页边距;
(12)Column Count 报告中的列数;
(13)Column Spacing 以报告单位指定的列边距;
(14)Column Width 以报告单位指定的列宽;
(15)Print Order 填充列的顺序;有垂直Vertical和水平Horizontal两种。
(16)Float Column Footer 浮动列脚,指出是否在列底部或明细表最后或组脚进行打印;
(17)Default Font 缺省字体;
(18)Default Style 缺省风格;
(19)Scriptlet Class 脚本类,它必须是JRAbstractScriptlet类的子类。如果省略,将创建一个JRDefaultScriptlet的实例。
(20)Summary New Page 新页的概要;
(21)Title New Page 新页的标题;
(22)When No Data Print 无数据时的打印,有三个选择:No Pages 表示0页;Blank Page 空白页;All Sections No Detail 除了detail section,其它的都打印。
(23)Query 查询,用来检索数据到报告中。
(24)Query Language 查询语言,有五个值:SQL 用于JDBC数据源的查询语言;HBM Hibernate用于Hibernate数据源的查询语言;XPath 用于XML数据源的查询语言;EJBQL用于支持Java持久层(Persistence)API的数据源的查询语言;MDX 用于Mondrian数据源的查询语言。
(25)Imports java输入的列表,例如:java.util.*和java.text.SimpleDateFormat格式。用于简化report的表达式。
(26)Resource Bundle 为report提供了本地的系列字符串。在报告中,本地字符串能用$R{key}引用。
(27)When Resource Missing Print 允许自定义引擎在resource bundle中处理丢失的resource。有4种选择:Null 丢失的resource不打印;Empty 丢失的resource为空;Key 用$R{key}指定的key来打印; Error 用错误来中断报告的执行。
4、Styles 风格
一个report可以定义大量的风格。一旦定义了,它们能和report对象联系起来,为了给各种可视视图提供基本的配置。report允许用模块化的方式来定义模块的风格。
风格有相关联的条件风格。条件风格允许当其表达式为真时改变风格。
1)风格的属性有:
(1)Name 风格名;
(2)Parent Style 父风格;
(3)Foreground 前景色;
(4)Background 背景色;
(5)Mode 方式,决定是否带透明度;
(6)Pen 画笔 有6种选择:None 无线;1 Point 正常宽度的线;2 Point 中等宽度的线;4 Point 粗线;Dotted 虚线;Thin 细线。
(7)Fill 填充;决定对对象进行填充的模式;
(8)Box 指定盒子的属性,如边框类型,边框颜色,是否填充。
(9)Horizontal Alignment 水平排列;有3种选择:Left 左;Center 中;Right 右。
(10)Vertical Alignment 垂直排列;有3种选择:Top 顶;Middle 中;Bottom 底。
(11)Scale 比例;指定图像的比例,有3种选择:Clip 尺寸不适合时,多余部分省略;Fill Frame 图像按比例填充进Image对象中;Retain Shape 保留原形状进行填充。
(12)Radius 指定矩形边框倒角的弧度;
(13)Pattern 用Text Field表达式的值来指定样式;其日期类型的值用java.text.SimpleDataFormat类来定义;其数值型的值用java.text.DecimalFormat来定义。
(14)Blank When Null 当Text Field表达式的值为null时显示空白;
(15)Line Spacing 线距;有3种选择:Single:单倍线距;1 and 1/2:1.5倍线距;Double:双倍线距。
(16)Rotation 旋转;有3种选择:None 不旋转;Left 左旋180度;Right 右旋180度。
(17)Styled Text 是一个标志位,用来指定是否text对象包含了已定义风格或规则的text。
(18)Font Name 字体名;
(19)Font Size 字体的尺寸;
(20)Bold 粗体;
(21)Italic 斜体;
(22)Underline 下划线;
(23)Strike Through 通过标准位来取消;
(24)PDF Font Name:PDF字体名;
(25)PDF Encoding:PDF编码;
(26)PDF Embedded是一个标志位,指定是否PDF字体应该嵌入到文档中。
2)条件风格的属性:
和上面仅有一点点的不同。其不同的属性为:
Condition Expression 条件表达式;是一个布尔型的表达式,用于判断是否应用条件表达式。
5、Section Properties 节属性
Section的种类前面已经讲了,这里只是补充讲述它的属性:
(1)Height 以报告的单位指定的section的高度;
(2)Print When Expression 是一个布尔表达式,决定是否打印本Section;
(3)Split Allowed 一个标志位,指示当Section超过当前页面的尺寸时,是否允许分割它。如果为真,当前Section将迁移到下一页。注意:如果Section在下一页也不适合时,则不管标志位值如何,都会分割它。
6、Groups 组
一个report可以定义大量的组。组表示决定带相关数据的可视组的表达式名。一旦声明后,组能在报告任意地方使用。
一个数据组用一个表达式组来识别。
注意:组机制不能完成来自于数据源数据的任何排序。如果想要有序的数据,必须把数据源的数据进行先排序处理。
组属性:
(1)Name 组名;用于引用组。
(2)Expression 表达式;决定report数据的组;
(3)Min Height To Start New Page 开始新页的最小高度;
(4)Reprint Header On Each Page 一个标志位,指示在每一页的开始处是否重新打印组头;
(5)Reset Page Number 重设页数,一个标志位;在组头在新页开始处打印时,是否重新设置页数;
(6)Start New Column 一个标志位,是否在新列中总是打印组头;
(7)Start New Page 一个标志位,是否在新页中总是打印组头;
报表工具之JasperReports+iReport(5)
五、JasperReports作为一种开源的报表库为应用提供了强大的支持。其易用性和灵活性为系统的开发提供了极大的便利。
在报表生成过程中,使用JDBC等传统数据源操作方法获取数据的过程会消耗大量的系统时间,这样就需要利用其它手段来简化数据源操作。
在这种情况下,适当的使用ORM(Object/Relational Mapping)技术,能够很好的解决这个问题,对于系统性能的提升有很大的帮助。
1、JasperReports填充报表
要完成报表的填充,必须先完成用于报表的xml模板,其过程是先产生报表布局对象,再序列号该对象,存储在磁盘或者网络,用于产生特定应用的表格数据。
实际上,表单的设计过程就是用定义于xml文件中的java表达式来表现报表的布局。
编辑过程中会有各种保证数据一致性的验证,最终会产生相关数据的文档。
报表引擎必须先接受数据来产生报表,这些数据一般来源于各种数据源,报表引擎能直接接收用于填充表格的数据源对象,或者通过自身提供的JDBC连接对象来处理数据库的数据。
报表最终要产生一个新的对象来进行填充操作从而产生用于输出的文档对象,这也是一个存储在磁盘或者网络传输介质的序列化对象。
JasperReports的内置浏览器能直接查看结果或者以PDF,HTML,XML形式将其导出。
2、持久化技术和ORM
持久化(Persistence),即把数据保存到可永久保存的存储设备中(如磁盘)。
持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等。
ORM即“对象-关系型数据映射组件。对于O/R,即Object(对象)和Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。
MVC(Model View Control)中的Model包含了复杂的业务逻辑和数据逻辑,以及数据存取机制(如JDBC的连接、SQL生成和Statement创建、还要ResultSet结果集的读取等)。将这些复杂的业务逻辑和数据逻辑分离,以将系统的紧耦合关系转化为松耦合关系(即解耦合),是降低系统耦合度迫切要做的,也是持久化要做的工作。
MVC模式实现了架构上将表现层和数据处理层分离的解耦合,而持久化设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。
关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序运行却是一个个对象进行处理,而目前大部分数据库驱动技术(如ADO.NET、JDBC、ODBC等)均是以行集的结果集一条条进行处理的。所以为解决这一困难,就出现ORM这一个对象和数据之间映射技术。
3、在JasperReports中使用Hibernate
Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
package src;
import java.util.HashMap;
import java.util.List;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperExportManager;
import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Simple1 {
public static void main(String args[]){
String sampleReportFile=new String("reports/sampleReport.jrxml");
//Hibernate Result Set Holder.
List bowlerInfo=null;
try{
//Configure the Hibernate session
Configuration cfg=new Configuration();
cfg.addResource("hibernate-mapping.xml");
SessionFactory sessions=cfg.buildSessionFactory();
//Open the Hibernate Session
Session session=sessions.openSession();
//Returns all SampleData records.
//Simple POJO object.
bowlerInfo=session.createQuery("from SampleData").list();
//Fill the parameters
HashMap parameters=new HashMap();
parameters.put("ReportTitle","Bowling Scores");
parameters.put("NoOfGames", new Integer(3));
//Load the sample report file from the XML file
//into the JasperDesign object.
JasperDesign design=JRXmlLoader.load(sampleReportFile);
//Compile the Report in Memory storing it in a JasperReport object
//no .jasper report file is created.
JasperReport report=new JasperCompileManager().compileReport(design);
//Fill the report using the JRBeanCollectionDataSource passed
//a Hibernate query result set.
JasperPrint print=JasperFillManager.fillReport(report,parameters,new JRBeanCollectionDataSource(bowlerInfo));
//Export to PDF file.
JasperExportManager.exportReportToPdfFile(print,"simpleHibernatExample.pdf");
//Close the Hibernate Session.
session.close();
}catch(JRException jre){
jre.printStackTrace();
}catch(MappingException me){
me.printStackTrace();
}catch(HibernateException he){
he.printStackTrace();
}
}
}
当Hibernate检索返回集合类型的对象时,使用JRBeanCollection接口可将数据通过Hibernate的POJO(Plain Old Java Object)实例映射到报表域中,使用JRXmlLoader.load(templateName)方法加载报表模板,最后通过JasperFillManager方法将数据填入模板中。
本例使用JasperExportManager.exportReportToPdfFile()方法将报表输出为PDF格式。JasperReports提供的net.sf.jasperreports.engine.JRExporter接口可以方便的将报表输出为PDF、XLS、CSV、RTF、HTML或者XML格式,目前以PDF和EXCEL格式较为通用。
4、总结
在JasperReports中使用了Hibernate以后,如果随业务更换数据源的话,只需要更好Hibernate的映射文件,极大提高了代码的可重用性,同时由于Hibernate本身对于查询的优化,也能很好的提高整个应用的效率,尽可能的节省开发时间。
1)它可以PDF,HTML,XML等多种形式产生报表或动态报表,在新版本还支持CSV,XLS,RTF等格式的报表;
2)它按预定义的XML文档来组织数据,来源多(如:关系数据库,Java容器对象(collection,arrays)等);
报表的填充过程:
先产生报表设计对象->序列化该对象->存储在磁盘或网络->产生XML文件(表格数据)。
表单的设计过程就是用定义于XML文件中的Java表达式来实现报表的设计。
3)它带数据一致性验证;
4)报表引擎必须先接受数据(通过参数等多种形式)来产生报表,更多的是来自数据源,引擎直接接收用于填充表格的数据源对象,或者通过自身提供的JDBC连接对象来处理数据库的数据;
5)报表最终要产生一个新的对象来进行填充操作,从而产生打印文档对象,这也是存储在磁盘或网络传输介质的序列化对象;
6)内置浏览器能直接查看结果,以PDF,HTML,XML导出;
7)重要的类:
net.sf.jasperreports.engine.design.JasperDesign
其实例是用于报表产生的原始类;
net.sf.jasperreports.engine.design.JasperReport
表现了报表设计对象,是作为报表的编译过程的结果而被实例化,是向报表中填充数据的准备。
二、结构
JasperReports用XML文件来定义,约定用jrxml作为文件的后缀名。
1)主要元素:
<jasperReport> 根元素
<title> 报表的标题
<pageHeader> 页眉
<detail> 正文
<pageFooter> 页脚
<band> 定义报表部件,以上所有元素都包含一个band元素作为其唯一子元素。
除了根元素,其余元素是可选的。
2)其编辑工具iReport在Eclipse3.2下的安装过程
菜单“帮助”->“软件更新”->“查找并安装”->“搜索要安装的新功能部件”--(下一步)-->“新建远程站点”,输入以下内容:
名称:JasperForge
URL:http://www.jasperforge.org/update
--(确定)-->“下一步”-->直至完成。
3)以JasperReports1.3.0版本为例,一个JasperReports项目需要如下jar包:
包名 说明
jasperreports-1.3.0.jar JasperReports API
commons-beanutils-1.7.jar JavaBeans Utility classes
commons-collections-2.1.jar Collections framework extension classes
commons-digester-1.7.jar classes for processing XML documents
commons-logging-1.0.2.jar Logging classes
poi-2.0-final-20040126.jar Jarkarta POI API to generate an Excel Document
itext-1.3.1.jar PDF library
xml-apis.jar XML parser API
三、iReport介绍
1)iReport是为JasperReports设计的强大的,直观的,易于使用的可视化报表设计器,为win32平台编写。允许用户可视化地编辑XML JasperDesign文件,可以和其它数据库进行JDBC通信。
再设计模板时可以以HTML,PDF,XML方式预览,用它生成的文件有.jrxml和.jasper两种文件。
.jrxml:是可视化编辑的xml文件;
.jasper:经编译后生成的类文件,即报表模板文件。
2)iReport的输出格式
其预览输出格式有:PDF,HTML,CSV。JAVA2D,EXCEL,纯文本,JRView。
注意:JRViewer是直接以C/S方式作为报表的输出格式,在JFrame框架下输出。
3)报表的动态对象变量、参数、字段
字段Fields:是从数据库抽取出来的,在报表中出现的数据库内容。$F
参数Parameters:你写的应用需要提供给报表的入口。 $P
变量Variables:报表中一些逻辑运算的表现。 $V
每个对象的定义格式如下: $V{variablesName}
4)运行时需要.jasper文件;编译:把.jrxml->.jasper文件。
静态运行:静态文本来运行,和数据源无关;
动态运行:带数据源运行。
5)报表的结构
title、pageHeader、columnHeader、detail、columnFooter、pageFooter、summary、groupHeader、groupfooter。
6)在iReport中创建数据库连接
(1)菜单DourceSource -> Connections/DataSources -> ...new ->
(2)菜单Build -> Set active connection -> 选择 -> ... -> OK
7)在iReport中创建文件
iReport工具是一个可视编辑器帮助创建JasperReports文件。JasperReports是一个基于Java报表的引擎。
当你在iReport中创建一个报表,你实际上是对配置文件进行操作,告诉JasperReports应该怎样建立Report。
三种文件:
.jasper文件:编译的二进制文件;
.jrxml文件:报表的配置文件;
.pdf文件:生成的pdf文件。
8)报表格式化
在iReport上选择报表的一个区域,将呈现蓝色高亮显示;
可用鼠标拖曳来改变区域的尺寸,当误操作时,用undo来恢复;
如选择框变红,则有错误,report将不能编译;
改变字体或调整尺寸,菜单“View”->“Element properties”->分三个选择:
(1)Common选择:尺寸,前景色/背景色,透明度,打印条件,位置属性等;
(2)Font选择:字体、大小、类型,PDF字体,加粗,斜体,下划线,水平位置,垂直位置,PDF编码。
注意:两种字体:
Font Name:将显示在iReport设计器和JasperReports运行中;
PDF font Name:将显示在编译后的PDF文件中。
(3)Static Text:静态文本。
想浏览元素时,看“View”->“Elements browser”;
一次选择多个域,按“shift”键再用鼠标点击;
菜单“View”->“Report Properties”报表属性:
报表尺寸,单位,页边距,报表名,纵向Portrait/横向Landscape,列宽,Spacing,标题作为新页,Summary作为新页,XML编码(UTF-8)。
9)使用Groups
菜单“View”->“Report query” 可以查询和修改SQL语句。
10)为report增加参数
(1)菜单“View”->“Report Query”,修改SQL语句,如:加上 WHERE LAST_NAME=$P{LAST_NAME}
注意:参数用$P{}来封装。
(2)定义参数
菜单“View”->“Reports Parameters”
新建参数,如参数名为“LAST_NAME”,再指定参数的类型(如:String)
还可设定“缺省值”和参数的“描述”
运行报表(缺省),还可以传递参数方式:http://server/showReport?LAST_NAME=smith
菜单“Build”->“Execute report(using active conn.)”
11)创建子报表
例子:一个报表包含另一个报表
(1)建立两个报表;
(2)扩展master报表,增加一个subreport元素;
(3)双击subreport元素,设置其属性。在Subreport(other)栏中,
Subreport Expression填入“c:\test2.jasper”(第二个表即子表的文件名),点击“Add”,增加/修改:“Subreport parameter name”和Default value expression值;(COUNTRY $F{COUNTRY})
(4)对子表“Report query”->添加'where COUNTRY=${COUNTRY}'
(5)增加“Report parameters”,(COUNTRY,java.lang.String)
(6)编译detail report;
(7)运行master report。
iReport支持Groovy脚本语言,可无需懂Java。
1、配置XML文件
jasperreports的XML配置文件局域jasperreport.dtd文件而来。
1)根元素jasperReport
其子元素有:报告的字体reportFont,参数parameter,查询字符串queryString,字段field,变量variable,组group,标题title,页眉pageHeader,列眉columnHeader,表明细detail,列脚columnFooter,页脚pageFooter。
属性有:列宽columnWidth,列间距columnSpacing,左边距leftMargin,顶边距topMargin,底边距bottomMargin。
2)报表层字体含义reportFonts
无子元素;
属性有:名字name,是否缺省isFault,字体名fontName,字体大小size,是否粗体isBold,是否斜体isItalic,是否带下划线isUnderline,isStrikeThrough,PDF字体名pdfFontName,PDF编码pdfEncoding,是否嵌入PDF(isPdfEmbedded)。
3)用于产生报表的对象参数parameter。引用P${name}
其子元素有:ParameterDescription,defaultValueExpression
属性有:name,class
4)从数据库检索数据的查询SQL语句 queryString
5)包含于report中的数据库表列字段 field。 引用F${name}
其子元素有:variableExpression,initialValueExpression
属性有:name,class
6)用在XML文件中的变量 Variable 引用V${name}
其子元素有:variableExpression,initialValueExpression
属性有:name,class
7)报表标题 title
其子元素有:band
无属性
8)页眉 pageHeader
其子元素有:band
无属性
9)报表的列名 columnHeader
其子元素有:band
无属性
10)指定的列值detail
其子元素有:band
无属性
11)列尾columnFooter
其子元素有:band
无属性
12)页脚pageFooter
其子元素有:band
无属性
注:在report中,一个band表示一个report节点。一个band元素包括:staticText(静态文本)和textElement(文本元素)两个元素。
常见报表模型:列表、分组、主从、嵌套、交叉、图形、套打、分栏、填报。
2、创建报表
1)建立输入源
InputStream input = new FileInputStream(new File("c:\\JasperReports\\catalog.xml"));
JasperDesign design=JRXmlLoader.load(Input);
2)创建对象
JasperReport report = JasperCompileManager.compileReport(design);
3)获得JDBC连接从数据库检索数据
InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/OracleDBConnectionDS");
Connection conn = ds.getConnection();
4)产生可预览、打印、输出为其它格式的JasperPrint文件
JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);
5)参数处理
Map parameters = new HashMap();
parameters.put("ReportTitle", "PDF JasperReport");
6)输出成XML,PDF,HTML,CSV,XLS(Excel)的任一种文件。
OutputStream output = new FileOutputStream(new File("c:/JasperReports/catalog.pdf"))
JasperExportManager.exportReportToPdfStream(print,output);
3、JasperReports的安装配置
1)JDK的安装,注意JAVA_HOME环境变量;
2)要支持中文,需itext-1.3.1.jar和iTextAsian.jar包,加入CLASSPATH环境变量中;
3)安装iReport,用iReport-1.3.0-windows-installer.exe安装;
4)JasperReport不需任何配置,将其jar包(jasperreports-1.3.0.jar)放入CLASSPATH;
5)数据库的JDBC驱动包,例如Sybase的驱动包为jconn6.jar,加入到CLASSPATH。
4、iReport的安装配置
iReport如果不用其安装文件iReport-1.3.0-windows-installer.exe安装,则需要配置。
iReport需Sun公司的JDK下的tools.jar,需拷贝到iReport的lib目录下。
iReport初始化配置的组成:
(1)建立报表;
(2)选择语言;
(3)加入到CLASSPATH。
四、Report Structure 报告的结构
本章描述报告的结构,可用的report对象和它们的属性。这基本上是JasperReports的快速参考。
1、Expressions 表达式
表达式是JasperReports的核心特征。它是一个重要的机制,允许操纵和显示报告数据,执行各种计算,自定义报告的外观和报告对象的可视性。
1)一个典型的表达式
$F{LastName} + " " + $F{LastName}
一个JasperReports的表达式是以Java表达式为基础的,再加上一些附加的语法,它允许引用参数、变量和字段等。
比如说要引用一个名叫DATA的参数时,语法应为$P{PARAM_NAME}。
对变量和字段来说,其引用语法分别为$V{VAR_NAME}和$F{FIELD_NAME}。
注意:在JasperReports的groovy脚本语言中,也同样可以用$F,$P,$V引用参数、变量和字段。
2)表达式的语法
(1)$F{FIELD} 引用名为FIELD的字段;
(2)$V{VAR} 引用名为VAR的变量;
(3)$P{PARAM} 引用名为PARAM的参数;
(4)$P!{PARAM} 引用名为PARAM的参数;这个特殊的语法仅能用于report的查询中。它允许插入参数的内容到查询字符串中。例如,它能被用于创建一个带通过参数来指定WHERE条件的动态查询。
$R{keyName} 在resource bundle中检索带keyName关键字的字符串。
注意:表达式是用Java或Groovy写成的,这意外着可以用Java强大的功能,如调用方法,允许构建无限复杂的表达式。还要注意,表达式的结果总是一个对象。
3)更多的表达式
(1)new Integer(Math.max($V{Price1},$V{Price2}))
(2)(new SimpleDateFormat("dd/MM/yyyy")).format($F{OrderDate})
(3)$F{SpecialOffer}.booleanValue()? $F{SpecialPrice} : $F{Price}
2、内建的函数
JasperReports提供了一套内建的函数用于report表达式中。这些函数尽管是内建的工具,还是可以在普通操作中执行它。
注意:目前这套函数很有限,在未来会得到扩展。
1)例:使用内建函数
msg("Total cost is {0}", $F{TOTAL})
msg("Matched {0} products out of {1}", $F{MATCHED}, $P{TOTAL})
2)内建的函数
(1)String str(String key);
从和report相联系的resource bundle中得到给出的key的一个字符串。这个函数的功能和使用$R{key}语法等价。
(2)String msg(String pattern, Object arg0);
建立一个带给定的pattern和给定参数来指定其格式的java.util.MessageFormat对象。
(3)String msg(String pattern, Object arg0, Object arg1);
同上;
(4)String msg(String pattern, Object arg0, Object arg1, Object arg2);
同上。
3、Report 报告
Report是表现为报告模板的根对象。在报告执行期间,report模板和数据组合成最终的文档。
报告的属性有:
(1)Report Name 报告名;
(2)Units 报告的单位;有:像素Pixels,毫米Millimeters,厘米Centimeters和英寸Inches。
(3)Language 报告表达式使用的语言;目前有Java和Groovy两种。
(4)Orientation 页的方向;其可能值为水平Protrait和纵向Landscape。
(5)Page Width 以报告单位指定的页宽;
(6)Page Height 以报告单位指定的页高;
(7)Page Size 报告的尺寸,即为page width和page height。
(8)Left Margin 以报告单位指定的左边页边距;
(9)Right Margin 以报告单位指定的右边页边距;
(10)Top Margin 以报告单位指定的顶部页边距;
(11)Bottom Margin 以报告单位指定的底部页边距;
(12)Column Count 报告中的列数;
(13)Column Spacing 以报告单位指定的列边距;
(14)Column Width 以报告单位指定的列宽;
(15)Print Order 填充列的顺序;有垂直Vertical和水平Horizontal两种。
(16)Float Column Footer 浮动列脚,指出是否在列底部或明细表最后或组脚进行打印;
(17)Default Font 缺省字体;
(18)Default Style 缺省风格;
(19)Scriptlet Class 脚本类,它必须是JRAbstractScriptlet类的子类。如果省略,将创建一个JRDefaultScriptlet的实例。
(20)Summary New Page 新页的概要;
(21)Title New Page 新页的标题;
(22)When No Data Print 无数据时的打印,有三个选择:No Pages 表示0页;Blank Page 空白页;All Sections No Detail 除了detail section,其它的都打印。
(23)Query 查询,用来检索数据到报告中。
(24)Query Language 查询语言,有五个值:SQL 用于JDBC数据源的查询语言;HBM Hibernate用于Hibernate数据源的查询语言;XPath 用于XML数据源的查询语言;EJBQL用于支持Java持久层(Persistence)API的数据源的查询语言;MDX 用于Mondrian数据源的查询语言。
(25)Imports java输入的列表,例如:java.util.*和java.text.SimpleDateFormat格式。用于简化report的表达式。
(26)Resource Bundle 为report提供了本地的系列字符串。在报告中,本地字符串能用$R{key}引用。
(27)When Resource Missing Print 允许自定义引擎在resource bundle中处理丢失的resource。有4种选择:Null 丢失的resource不打印;Empty 丢失的resource为空;Key 用$R{key}指定的key来打印; Error 用错误来中断报告的执行。
4、Styles 风格
一个report可以定义大量的风格。一旦定义了,它们能和report对象联系起来,为了给各种可视视图提供基本的配置。report允许用模块化的方式来定义模块的风格。
风格有相关联的条件风格。条件风格允许当其表达式为真时改变风格。
1)风格的属性有:
(1)Name 风格名;
(2)Parent Style 父风格;
(3)Foreground 前景色;
(4)Background 背景色;
(5)Mode 方式,决定是否带透明度;
(6)Pen 画笔 有6种选择:None 无线;1 Point 正常宽度的线;2 Point 中等宽度的线;4 Point 粗线;Dotted 虚线;Thin 细线。
(7)Fill 填充;决定对对象进行填充的模式;
(8)Box 指定盒子的属性,如边框类型,边框颜色,是否填充。
(9)Horizontal Alignment 水平排列;有3种选择:Left 左;Center 中;Right 右。
(10)Vertical Alignment 垂直排列;有3种选择:Top 顶;Middle 中;Bottom 底。
(11)Scale 比例;指定图像的比例,有3种选择:Clip 尺寸不适合时,多余部分省略;Fill Frame 图像按比例填充进Image对象中;Retain Shape 保留原形状进行填充。
(12)Radius 指定矩形边框倒角的弧度;
(13)Pattern 用Text Field表达式的值来指定样式;其日期类型的值用java.text.SimpleDataFormat类来定义;其数值型的值用java.text.DecimalFormat来定义。
(14)Blank When Null 当Text Field表达式的值为null时显示空白;
(15)Line Spacing 线距;有3种选择:Single:单倍线距;1 and 1/2:1.5倍线距;Double:双倍线距。
(16)Rotation 旋转;有3种选择:None 不旋转;Left 左旋180度;Right 右旋180度。
(17)Styled Text 是一个标志位,用来指定是否text对象包含了已定义风格或规则的text。
(18)Font Name 字体名;
(19)Font Size 字体的尺寸;
(20)Bold 粗体;
(21)Italic 斜体;
(22)Underline 下划线;
(23)Strike Through 通过标准位来取消;
(24)PDF Font Name:PDF字体名;
(25)PDF Encoding:PDF编码;
(26)PDF Embedded是一个标志位,指定是否PDF字体应该嵌入到文档中。
2)条件风格的属性:
和上面仅有一点点的不同。其不同的属性为:
Condition Expression 条件表达式;是一个布尔型的表达式,用于判断是否应用条件表达式。
5、Section Properties 节属性
Section的种类前面已经讲了,这里只是补充讲述它的属性:
(1)Height 以报告的单位指定的section的高度;
(2)Print When Expression 是一个布尔表达式,决定是否打印本Section;
(3)Split Allowed 一个标志位,指示当Section超过当前页面的尺寸时,是否允许分割它。如果为真,当前Section将迁移到下一页。注意:如果Section在下一页也不适合时,则不管标志位值如何,都会分割它。
6、Groups 组
一个report可以定义大量的组。组表示决定带相关数据的可视组的表达式名。一旦声明后,组能在报告任意地方使用。
一个数据组用一个表达式组来识别。
注意:组机制不能完成来自于数据源数据的任何排序。如果想要有序的数据,必须把数据源的数据进行先排序处理。
组属性:
(1)Name 组名;用于引用组。
(2)Expression 表达式;决定report数据的组;
(3)Min Height To Start New Page 开始新页的最小高度;
(4)Reprint Header On Each Page 一个标志位,指示在每一页的开始处是否重新打印组头;
(5)Reset Page Number 重设页数,一个标志位;在组头在新页开始处打印时,是否重新设置页数;
(6)Start New Column 一个标志位,是否在新列中总是打印组头;
(7)Start New Page 一个标志位,是否在新页中总是打印组头;
报表工具之JasperReports+iReport(5)
五、JasperReports作为一种开源的报表库为应用提供了强大的支持。其易用性和灵活性为系统的开发提供了极大的便利。
在报表生成过程中,使用JDBC等传统数据源操作方法获取数据的过程会消耗大量的系统时间,这样就需要利用其它手段来简化数据源操作。
在这种情况下,适当的使用ORM(Object/Relational Mapping)技术,能够很好的解决这个问题,对于系统性能的提升有很大的帮助。
1、JasperReports填充报表
要完成报表的填充,必须先完成用于报表的xml模板,其过程是先产生报表布局对象,再序列号该对象,存储在磁盘或者网络,用于产生特定应用的表格数据。
实际上,表单的设计过程就是用定义于xml文件中的java表达式来表现报表的布局。
编辑过程中会有各种保证数据一致性的验证,最终会产生相关数据的文档。
报表引擎必须先接受数据来产生报表,这些数据一般来源于各种数据源,报表引擎能直接接收用于填充表格的数据源对象,或者通过自身提供的JDBC连接对象来处理数据库的数据。
报表最终要产生一个新的对象来进行填充操作从而产生用于输出的文档对象,这也是一个存储在磁盘或者网络传输介质的序列化对象。
JasperReports的内置浏览器能直接查看结果或者以PDF,HTML,XML形式将其导出。
2、持久化技术和ORM
持久化(Persistence),即把数据保存到可永久保存的存储设备中(如磁盘)。
持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等。
ORM即“对象-关系型数据映射组件。对于O/R,即Object(对象)和Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。
MVC(Model View Control)中的Model包含了复杂的业务逻辑和数据逻辑,以及数据存取机制(如JDBC的连接、SQL生成和Statement创建、还要ResultSet结果集的读取等)。将这些复杂的业务逻辑和数据逻辑分离,以将系统的紧耦合关系转化为松耦合关系(即解耦合),是降低系统耦合度迫切要做的,也是持久化要做的工作。
MVC模式实现了架构上将表现层和数据处理层分离的解耦合,而持久化设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。
关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序运行却是一个个对象进行处理,而目前大部分数据库驱动技术(如ADO.NET、JDBC、ODBC等)均是以行集的结果集一条条进行处理的。所以为解决这一困难,就出现ORM这一个对象和数据之间映射技术。
3、在JasperReports中使用Hibernate
Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
package src;
import java.util.HashMap;
import java.util.List;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperExportManager;
import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Simple1 {
public static void main(String args[]){
String sampleReportFile=new String("reports/sampleReport.jrxml");
//Hibernate Result Set Holder.
List bowlerInfo=null;
try{
//Configure the Hibernate session
Configuration cfg=new Configuration();
cfg.addResource("hibernate-mapping.xml");
SessionFactory sessions=cfg.buildSessionFactory();
//Open the Hibernate Session
Session session=sessions.openSession();
//Returns all SampleData records.
//Simple POJO object.
bowlerInfo=session.createQuery("from SampleData").list();
//Fill the parameters
HashMap parameters=new HashMap();
parameters.put("ReportTitle","Bowling Scores");
parameters.put("NoOfGames", new Integer(3));
//Load the sample report file from the XML file
//into the JasperDesign object.
JasperDesign design=JRXmlLoader.load(sampleReportFile);
//Compile the Report in Memory storing it in a JasperReport object
//no .jasper report file is created.
JasperReport report=new JasperCompileManager().compileReport(design);
//Fill the report using the JRBeanCollectionDataSource passed
//a Hibernate query result set.
JasperPrint print=JasperFillManager.fillReport(report,parameters,new JRBeanCollectionDataSource(bowlerInfo));
//Export to PDF file.
JasperExportManager.exportReportToPdfFile(print,"simpleHibernatExample.pdf");
//Close the Hibernate Session.
session.close();
}catch(JRException jre){
jre.printStackTrace();
}catch(MappingException me){
me.printStackTrace();
}catch(HibernateException he){
he.printStackTrace();
}
}
}
当Hibernate检索返回集合类型的对象时,使用JRBeanCollection接口可将数据通过Hibernate的POJO(Plain Old Java Object)实例映射到报表域中,使用JRXmlLoader.load(templateName)方法加载报表模板,最后通过JasperFillManager方法将数据填入模板中。
本例使用JasperExportManager.exportReportToPdfFile()方法将报表输出为PDF格式。JasperReports提供的net.sf.jasperreports.engine.JRExporter接口可以方便的将报表输出为PDF、XLS、CSV、RTF、HTML或者XML格式,目前以PDF和EXCEL格式较为通用。
4、总结
在JasperReports中使用了Hibernate以后,如果随业务更换数据源的话,只需要更好Hibernate的映射文件,极大提高了代码的可重用性,同时由于Hibernate本身对于查询的优化,也能很好的提高整个应用的效率,尽可能的节省开发时间。
发表评论
-
Maven使用mvn命令时跳过test的参数
2015-05-28 11:24 1753方法有两种: 方法1: mvn install -Dsk ... -
Spring中Propagation类的事务属性区别
2014-12-08 14:50 1944PROPAGATION_REQUIRED:支持当前事务,如果 ... -
Spring AOP中pointcut expression表达式解析
2014-08-27 15:39 3427Pointcut 是指那些方法需要被执行"AOP& ... -
用正则表达式替换手机号为星号*的写法
2014-08-11 15:43 10055现在网络越来越关注一些隐私,比如手机号隐藏当中的若干位数字 ... -
java使用相对路径连接sqlite
2014-08-01 15:48 6922在sqlite的连接源码中,可以看到 :resource: ... -
Eclipse中setter/getter方法自动添加属性注释
2014-08-01 12:11 16601这篇文章以前在公司内网发的,到现在也一直有用,发上来分享给有 ... -
memcached-session-manager配置
2014-07-09 18:01 963声明:本篇文章是根据memcach ... -
使用java原生url连接传输protobuf
2014-06-26 18:16 1465protobuf已经出来好多年了,原谅我最近才了解到goo ... -
Tomcat内存、连接数等性能参数设置
2014-02-20 14:37 17141、修改启动时内存参数、并指定JVM时区 (在windows ... -
使用JSP列出所有运行中的线程
2013-07-29 10:06 1050<html> <head> &l ... -
JVM系列五:JVM监测&工具[整理中]
2013-05-10 10:34 1132前几篇篇文章介绍了介绍了JVM的参数设置并给 ... -
JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
2013-05-10 10:32 1261java application项目(非web项目) 改进 ... -
JVM系列三:JVM参数设置、分析
2013-05-10 10:30 1026不管是YGC还是Full GC,GC过程中都 ... -
JVM系列二:GC策略&内存申请、对象衰老
2013-05-10 10:19 1037JVM里的GC(Garbage Collec ... -
JVM系列一:JVM内存组成及分配
2013-05-10 10:14 1096java内存组成介绍:堆(Heap)和非堆(Non-h ... -
jenkins配置权限不对导致无法登陆的重置方法
2013-04-20 20:43 25405找到.jenkins/config.xml文件: 替换为: ... -
Spring3中替换默认拦截器的方法BeanFactoryPostProcessor
2012-08-14 16:51 4059由于Spring默认的静态资源处理器不能满足需求,需要做一些自 ... -
Hessian 权限认证
2012-08-07 11:23 1530Hessian 权限认证 Hessian的一些基本简介已经在上 ... -
利用java 6.0的脚本引擎执行字符串表达式运算
2012-08-06 23:09 1459例子都在这里了:http://www.java2s.com/C ... -
在spring、tomcat中使用多数据源并支持分布式事务管理
2012-08-06 22:10 2631原文:http://zxlaiye.iteye.c ...
相关推荐
### jasperreports与ireport在eclipse中的使用详解 #### 一、简介 JasperReports是一款开源的报表生成工具,可以生成多种格式的报表,包括但不限于PDF、HTML、XML、CSV、XLS以及RTF等。它能够根据预定义的XML文档...
iReport是一款强大的报表设计工具,尤其在Java应用中广泛使用,它可以与JasperReports库结合,帮助开发者创建、编辑和管理复杂的报表。本教程将详细讲解如何在本地环境中安装iReport for Eclipse插件,以便在Eclipse...
在开始使用JasperReports和IReport之前,需要先完成相应的环境搭建。 - **安装JasperReports Server**:根据官方文档完成服务器端的安装配置。 - **安装IReport**:下载IReport工具并安装到本地计算机上。 - **集成...
而在众多报表工具中,JasperReports凭借其强大的功能与灵活性脱颖而出,成为许多开发者的首选。本教程将详细介绍如何利用JasperReports和iReport工具进行报表设计与开发。 #### 二、JasperReports简介 ...
开发者首先通过iReport或Jaspersoft Studio设计好PDF模板,然后在Java代码中调用JasperReports API,结合业务数据填充这些模板,最终生成所需的PDF文件。这个过程通常涉及到以下几个步骤:定义数据源、编写SQL查询、...
1. **语言选择**: 在iReport中通过【Tools】->【Options】选择界面使用的语言。 2. **输出路径**: 设置报表输出路径,可以选择将编译后的文件保存在同一文件夹中。 **注意**: 部分配置项的更改可能不会立即生效,...
"JasperReports+iReport在eclipse中的使用.txt"可能是一个教程,教你如何在Eclipse这样的Java集成开发环境中配置和使用这两个工具。它可能涵盖了导入JasperReport库,设置运行时环境,以及如何调试报表等步骤。 ...
web+strutrs2+jasperreports项目源码(含相关jar包),包含数据库建表文件,采用最新版的jasperreports5.6.0开发,并且解决了中文不显示的问题,注释详细,包含三种方法创建报表。
在使用iReport和JasperReports进行报表开发时,通常遵循以下步骤: 1. **设计报表模板**:在iReport中,你可以使用拖放功能布局报表元素,如表格、文本框、图表等。定义字段、参数和查询,以从数据源提取信息。报表...
在Eclipse集成开发环境中,iReport作为一个插件,可以方便地与Java项目协同工作,尤其适用于那些需要自定义PDF报表的应用场景。由于某些原因,可能无法直接通过Eclipse的内置更新机制安装此插件,因此提供了一个zip...
4. **编译报表模板**:在Java代码中使用JasperCompileManager将.jrxml编译为.jasper文件。 5. **填充数据**:使用JasperFillManager和SQL查询结果填充报表,生成临时文件或内存对象。 6. **输出报表**:根据需求选择...
Struts2 + JasperReports4 + DB2 Demo是一个典型的Java企业级应用示例,结合了流行的MVC框架Struts2、报表工具JasperReports4以及关系型数据库DB2,用于展示如何在实际项目中进行数据展示和处理。在这个项目中,...
iReport可以作为Eclipse或NetBeans的插件使用,方便在IDE中直接进行报表设计,提高开发效率。 九、学习资源 "iReport用户手册+教程.pdf"提供了详尽的指南,包括基础操作、进阶技巧和常见问题解答,是初学者的宝贵...
【标题】:“ireport + jasper的使用” 【描述】:在Java开发中,报表的生成和展示是一项重要任务,ireport和jasper是两个强大的报表工具,它们可以帮助开发者高效地设计、创建和管理复杂的报表。ireport是用于设计...
其中,“MyEclipseEclipse_iReport_JasperReport_Struts2.doc”文档可能包含如何在MyEclipse或Eclipse集成开发环境中配置和使用ireport的步骤,同时可能还涉及到JasperReport与Struts2框架的集成,帮助开发者了解...
为了在 Eclipse 中使用 iReport,你需要添加以下 Jar 包到项目中: - `jasperreports-1.3.0.jar`:JasperReports API。 - `commons-beanutils-1.7.jar`:Java Beans 实用类库。 - `commons-collections-2.1.jar`:...
设计完成后,iReport支持将报表导出为PDF、HTML、Excel、CSV等多种格式,方便用户在不同环境中使用。同时,也可以直接打印报表,无需额外设置。 9. **集成开发环境** iReport可以与Eclipse、NetBeans等IDE集成,...
在Java开发中,有时我们需要利用报表工具来生成复杂的业务报告,IReport是Jaspersoft公司推出的一款开源报表设计工具,它允许用户通过图形界面设计报表并导出为多种格式,如PDF、HTML、Excel等。IReport 5.6是一个较...
使用这些JAR文件,开发者可以在Java应用程序中嵌入JasperReports的功能,或者在iReport中设计报表模板,然后在程序中加载和执行这些模板,生成最终的报表。这些工具和库的结合使得企业能够快速高效地生成符合需求的...