jasperReport学习

系统 1153 0


mysql> CREATE TABLE `mysqlcode` (
-> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-> `content` VARCHAR( 255 ) NOT NULL
-> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;




CREATE TABLE admin (
admin_name char(20) NOT NULL,
admin_password char(20) NOT NULL
) TYPE=MyISAM,
default character set gbk;










类net.sf.jasperreports.engine.design.JasperDesign

之所以从这个类开始,是因为它的实例是jasperreport用于报表产生的原始类,比如,该类实例在用于产生报表的xml文件被解析后获得,或者不产生xml文档而是由调用jasperreport的应用程序产生。在所给的例子中有一个(noxmldesign)就是在不产生xml文件的情况下动态生成该实例的一个例子。所有该类的实例都属于报表的填充和产生以前产生的,所以我们称之为原始类。



类net.sf.jasperreports.engine.design.jasperreport

该类实例表现了报表设计对象,是作为报表的编译过程的结果而被实例化,是向报表中填充数据的准备。在报表的编译过程中协同验证报表元素的合法性,一致性;同时创建了临时文件存储报表中所有的变量,表达式。编译过程中会先查找classpath中tools.jar或者Ant进行编译,编译结果以字节码的形式存储,并且在填充数据时用于判断多种产生报表的形式

类net.sf.jasperreports.engine.design.JasperCompileManager

该类允许用户从文件,流等多种形式编译xml,允许直接传递JasperDesign对象并接收相应的JasperReport对象,它是将报表设计xml文件编译为等待填充的报表文件的入口类。其他方法:验证报表合法性,构建JasperDesign类的实例也是十分有用的,尤其是针对可视化编辑器

类net.sf.jasperreports.engine.design.JasperPrint

报表填充完毕后产生该类的实例,这个对象可以被JasperReport内置报表浏览工具浏览,或者序列化存储、发送等。该类的实例表现了JasperReport的报表输出;除了作为标准格式以页面形式存储外还可以转化为PDF, HTML, XML等多种形式。

类net.sf.jasperreports.engine.design.JRDataSource

就报表数据来说,JasperReport是十分灵活的,提供多种数据源,针对各种数据源都有相应的编程接口,每次报表填充时,都会产生特定场景的引擎实例

net.sf.jasperreports.view.JasperViewer
此类用来预览生成的报表(generated reports.)。

net.sf.jasperreports.view.JasperDesignViewer
此类用来预览报表设计(view the report design)。

JasperReports做报表有一下步骤:

1、 报表设计,可以用ireport可视化工具来实现,生成xml文件。完成后,可以直接到步骤3,直接编译xml文件。
2、 如果已经存在报表设计文件(xml文件),可以用 net.sf.jasperreports.engine.xml.JRXmlLoader.load()方法载入报表设计,该方法返回 JasperDesign对象,通过JasperDesign对象,可以修改报表设计,比如:添加、删除字段,添加、删除变量,添加、删除分组,等等。
3、 完成报表设计后,接下来就可以编译报设计,编译报表设计可以用类 net.sf.jasperreports.engine.JasperCompileManager的compileReport()方法来实现,该方法可以编译xml文件或JasperDesign对象,产生JasperReport对象,JasperReport对象可序列化,能够保存为文件(通常是.jasper文件)。类net.sf.jasperreports.engine.JasperCompileManager还可以把报表转化为报表设计文件(xml文件)。得到JasperReport对象(可从.jasper文件实例化一个JasperReport对象)后,给报表填充数据产生 JasperPrint对象。JasperPrint对象可序列化,保存为文件。有了JasperPrint对象后,可以打印、浏览、转换为其他格式的文件,如:PDF,HTML,XML,XLS,CSV等等,这些操作就是我们想得到的最终结果。尽管JasperPrintManager类可以导出为 PDF,XML文件,但是不赞成使用JasperPrintManager类来导出,建议用JasperExportManager类来导出PDF, HTML,XML文件;要导出XLS和CSV文件,用专业的导出类 net.sf.jasperreports.engine.export.JRXlsExporter类和 net.sf.jasperreports.engine.export.JRCsvExporter类

字段(Fields): 是数据库抽取出来的,希望在报表中出现的数据库内容。比如一个ID的所有值。$F{filedsName}

参数(Parameters):这是你的应用需要提供给报表的入口,比如你 希望在报表被解释的时候提供Where语句的条件值。那么就可以 使用参数$P{parameterName}

变量(Variables):这是报表只能够一些逻辑运算的表现,比如统计值。$V{variablesName}每种对象的定义格式如每个对象的后面说明,比如定义一个变量(Variables),
那么表达式就写成$V{ variablesName },报表中出现的就是这个变量的名称。

JasperReport填充数据有多种方法,不过最常用的就2种:一是直接在jrxml文件里嵌入sql语句,二是创建一个自己的数据源,记得这个数据源从JRDataSource继承而来.JRDataSource有个方法一定要实现,即next以及getFieldValue,具体参见其API


2.中文问题的解决
在JAVA中,用ireport是个不错的报表设计工具咯,可视化操作,但也有中文问题。典型的是加入itext后,中文显示乱码,并且导出到PDF后也乱码,解决方法经过探索后有如下方法解决:
1 在ireportlib目录下,添加iText亚洲语言包(http://itext.sourceforge.net/downloads/iTextAsian.jar.),itext-1.01.jar;
2 在itext文本的属性框中,设置字体的属性为:
font name: SansSerif
PDF font name: STSong-Light;
pdfEncoding =UniGB-UCS2-H
将PDF embedeed encoding前的勾选上,并在下拉表中选择UniGB-UCS2-V (Chinese Simplified)
这样就可以解决了

a、iReport的输出格式····
iReport的预览输出格式可以支持以下几种:
PDF、HTML、CSV、JAVA2D、Excel、纯文字、JRViewer,其中最常用的是PDF、JRViewer。
本文以JRViewer为例子。JRViewer是直接以C/S方式作为报表的输出格式,在JFrame框架下输出。Jasperreport提供默认的JRViewer输出类。
b、报表的动态对象变量、参数、字段····
在使用iReport的过程中会碰到很多与变量(Variables)、参数(Parameters)、字段(Fields)这些有关的内容,我们要介绍这些对象的使用和意义:
·字段(Fields):是数据库抽取出来的,希望在报表中出现的数据库内容。
比如一个ID的所有值。$F{ filedsName }
·参数(Parameters):这是你的应用需要提供给报表的入口,
比如你希望在报表被解释的时候提供Where语句的条件值,
那么就可以使用参数(Parameters)。$P{ parameterName }
·变量(Variables):这是报表中一些逻辑运算的表现,比如统计值。$V{ variablesName }
每种对象的定义格式如每个对象的后面说明,比如定义一个变量(Variables),
那么表达式就写成$V{ variablesName },报表中出现的就是这个变量的名称。


一个报表的结构大致是几个部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter。
·Title:每个报表一般会有一个名字,比如×××销售报表,title就是搁置这个名称的最好地方了,当然你也可以根据需要搁置在合适的地方。
·pageHeader:报表的一些公共要素,比如页码、创建时间、创建人等信息放置在这里是比较好的选择。
·columnHeader:无可非议的这里是放置列的名称,记住不是列数据。
·Detial:放置需要循环的数据,比如销售记录数据。
·columnFooter:放置列级别的统计计算值或是列的说明。
·pageFooter:放置页级别的统计值或是页的说明。
·Summary:可能需要对几页(你的报表可能有几个页组成)的统计值。比如50个销售记录共占用了3页,那么放置这些统计记录的统计值最好的地方就是summary。
·groupHeader:每个表的内容可能需要根据某个属性进行划分显示内容和计算内容,比如希望以月份为单位每组分开显示销售记录,那么就可以定义一个组(组的定义参考后文),groupHeader就是放置组说明或是组标志最好的地方。
·Groupfooter:放置组的统计或是说明 <iframe width="490" scrolling="no" height="150" frameborder="0" align="middle" style="width: 490px; height: 150px;" src="http://www.blogbao.com/script.aspx?userid=45735&amp;AdType=0&amp;AdstyleID=49847&amp;Direction=1" marginheight="0" marginwidth="0"> </iframe>

jasperReport学习


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论