报表制作iReport+jaserReport+jFreeChart.docx
- 文档编号:10914496
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:20
- 大小:22.54KB
报表制作iReport+jaserReport+jFreeChart.docx
《报表制作iReport+jaserReport+jFreeChart.docx》由会员分享,可在线阅读,更多相关《报表制作iReport+jaserReport+jFreeChart.docx(20页珍藏版)》请在冰豆网上搜索。
报表制作iReport+jaserReport+jFreeChart
INTRODUCTION
目前开源报表中,本人觉得比较好的组合是iReport+jasperReport+jFreeChart,本文将对这三个工具做一些介绍,希望对你的报表开发有些帮助。
2 JasperReport
2.1 简介
JasperReport是产生报表的核心部分,首先要先有个xml文件,然后根据jasperreports.dtd编译成jasper文件(以.jasper结尾),我们真正要使用的是编译以后的.jasper文件。
xml文件的内容包括对报表样式的定义,数据来源,参数等等,它可以支持的输出格式:
PDF,HTML,XML,XLS,CVS等。
在没有iReport之前,需要花费大量的时间去熟悉JasperReport的文档以及自己去写定义报表的xml,现在你一定对iReport的作用有些了解吧
2.2 工作流程介绍
如果我们已经用iReport已经将xml编译为.japser文件后,上图中编译部分的工作就可以省略,JasperFillManager根据定义的数据源和报表模版填充jasperPrint,有数据的报表就在这个部分填充的。
如果我们要导出到不同类型的档案,则需要通过JasperExportMananger,也可以自己写一个类,但是要实现net.sf.jasperreports.engine.JRExporter这个接口。
JaserReport提供的exporter再下面一节介绍。
2.3 重要的Class和Interface详细介绍
Ø Classnet.sf.jasperreports.engine.JasperReport
这个类的对象通过net.sf.jasperreports.engine.util.JRLoader从.jasper文件中获取,为用数据填充和产生报表做准备,当用数据填充报表的时候,运行时求各种各样报表表达式的值。
对象中包含了报表的各种元素,例如报表的大小,显示位置,显示的栏位,图片信息等等。
Ø Classnet.sf.jasperreports.engine.util.JRLoader
所有JasperReports主要的功能,象报表编辑,报表填充及导出,经常用到序列化的对象,net.sf.jasperreports.engine.util.JRLoader可以帮助从文件或者URLs或者输入流中装载这些被序列化的对象。
Ø Classnet.sf.jasperreports.engine.JasperPrint
这个类的对象是通过填充类根据net.sf.jasperreports.engine.JasperReport的对象用数据填充后的结果,这样可以被很直观的被别的类引用,将报表输出到网络或者文件
Ø Interfacenet.sf.jasperreports.engine.JRDataSource
JasperReports是一个非常灵活的报表工具,在数据来源方面更是体现了这一点,程序员可以自己定义不同类型的数据源,前提是实现这个接口,我们的数据源就可以千变万化,数据源可以是XML,CSV,TEXT,ObjectList等等,在后面的章节详细描述如何实现该接口
Ø Classnet.sf.jasperreports.engine.export.JExcelApiExporter
报表产生到一个EXCEL文档,如果报表里面有图形,一定要用这个exporter
Ø Classnet.sf.jasperreports.engine.export.JRCsvExporter
报表产生到一个CVS文档
Ø Classnet.sf.jasperreports.engine.export.JRGraphics2Dexporter
报表输出到Graphics2D,Java2D应用的时候才会用到
Ø Classnet.sf.jasperreports.engine.export.JRHtmlExporter
报表产生到一个HTML文档
Ø Classnet.sf.jasperreports.engine.export.JRPdfExporter
报表产生到一个PDF文档
Ø Classnet.sf.jasperreports.engine.export.JRRtfExporter
报表产生到一个RTF文档
Ø Classnet.sf.jasperreports.engine.export.JRTextExporter
报表产生到一个TXT文档
Ø Classnet.sf.jasperreports.engine.export.JRXlsExporter
报表产生到EXCEL文档,用这个exporter,报表中的图形将不被输出
Ø Classnet.sf.jasperreports.engine.export.JRTextExporter
报表产生到XML文档
2.4 Exporter常用参数说明
Ø net.sf.jasperreports.engine.JRExporterParameter.JASPER_PRINT
这个参数是net.sf.jasperreports.engine.JasperPrint的对象,exporter在导出报表前会做检测
Ø net.sf.jasperreports.engine.JRExporterParameter.JASPER_PRINT_LIST
这个参数是包含了n个net.sf.jasperreports.engine.JasperPrint对象的java.util.List,exporter在导出报表前会做检测
Ø net.sf.jasperreports.engine.JRExporterParameter.INPUT_STREAM
这个参数是net.sf.jasperreports.engine.JasperPrint被序列化对象的输入流,exporter在导出报表前会做检测
Ø net.sf.jasperreports.engine.JRExporterParameter.INPUT_URL
这个参数是包含net.sf.jasperreports.engine.JasperPrint被序列化对象的URL,exporter在导出报表前会做检测
Ø net.sf.jasperreports.engine.JRExporterParameter.INPUT_FILE_NAME
这个参数是存储了net.sf.jasperreports.engine.JasperPrint被序列化对象的文件路径,exporter在导出报表前会做检测
注意:
以上几个参数不能全部为空
Ø net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STRING_BUFFER
这个参数是java.lang.StringBuffer的对象,存储已经产生出的指定格式报表的内容
Ø net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_WRITER
这个参数是java.io.Writer的对象,将指定格式报表的内容发送到一个字符流,例如Servlet的PrintWriter
Ø net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STREAM
这个参数是java.io.OutputStream的对象,将指定格式报表的内容发送到一个输出流,例如ServletOutputStream
Ø net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE
这个参数是java.io.FILE的对象,将指定格式报表的内容存储到文件里面
Ø net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE_NAME
这个参数是java.lang.String的对象,将指定格式报表的内容存储到文件里面
Ø net.sf.jasperreports.engine.JRExporterParameter.CHARACTER_ENCODING
这个参数是java.lang.String的对象,指定格式报表的内容编码
Ø net.sf.jasperreports.engine.JExcelApiExporterParameter.IS_FONT_SIZE_FIX_ENABLED
这个参数是java.lang.Boolean的对象,是否允许自动修正Excel每个栏位的大小
Ø net.sf.jasperreports.engine.JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET
这个参数是java.lang.Boolean的对象,每一页是否用一个Sheet
Ø net.sf.jasperreports.engine.JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS
这个参数是java.lang.Boolean的对象,是否移除行与行之间的空行
Ø net.sf.jasperreports.engine.JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND
这个参数是java.lang.Boolean的对象,页面的背景是否为白的
Ø net.sf.jasperreports.engine.JRXlsExporterParameter.SHEET_NAMES
这个参数是java.lang.String的对象,Sheet的名字
Ø net.sf.jasperreports.engine.JRCsvExporterParameter.FIELD_DELIMITER
这个参数是java.lang.String的对象,栏位之间的分隔符
Ø net.sf.jasperreports.engine.JRCsvExporterParameter.RECORD_DELIMITER
这个参数是java.lang.String的对象,栏位之间的分隔符
Ø net.sf.jasperreports.engine.JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR
这个参数是java.lang.Boolean的对象,是否输出图片到目录
Ø net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR_NAME
这个参数是java.lang.String的对象,图片目录的绝对路径
Ø net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR
这个参数是java.io.File的对象,图片目录
Ø net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_URI
这个参数是java.lang.String的对象,通过Web访问时图片的URI
2.5 JasperReport内置的常用参数说明
这些参数是放到java.util.Map,在填充报表的时候使用
Ø REPORT_CONNECTION
这个参数是java.sql.Connection对象,在用ReportQuery的时候调用
Ø REPORT_DATASOURCE
这个参数是实现了接口net.sf.jasperreports.engine.JRDataSource的对象,在填充报表的时候调用
Ø IS_IGNORE_PAGINATION
这个参数是java.lang.Boolean对象,报表是否忽略分页
Ø REPORT_MAX_COUNT
这个参数是java.lang.Integer对象,报表显示的最大记录数
Ø DRAWING_SUPPLIER
这个参数是实现了接口org.jfree.chart.plot.DrawingSupplier对象,定义自己的填充色
这个参数不是原来JasperReport定义的,是后来加上的
2.6 JasperReport内置的常用变量说明
Ø PAGE_NUMBER
当前页面的页码,即第几页
Ø REPORT_COUNT
整个报表填充完成后,总的记录数
Ø PAGE_COUNT
当前页面的记录数
Ø COLUMN_COUNT
当前记录的行数,每个页面的计数会复位后重新计算。
2.7 如何实现接口JRDataSource
当调用填充报表过程的时候,负责填充的类会通过这个接口获取到相应的数据,jasperreport提供了几个实现了这个接口的类:
Ø net.sf.jasperreports.engine.JRResultSetDataSource
这个是通过JDBC访问关系数据库得到的数据源
Ø net.sf.jasperreports.engine.data.JRTableModelDataSource
这个是调用JavaSwingtables得到的数据源
Ø net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
这个是调用collections得到的数据源
我们要定义自己的DataSource,需要实现下面两个方法:
² publicbooleannext()throwsJRException;
报表填充数据的时候,填充每一条记录之前都会调用这个方法,将指针移动到下一条数据,如果有下一条数据返回true,否则返回false。
² publicObjectgetFieldValue(JRFieldjrField)throwsJRException;
当填充报表的每一个栏位的时候,会调用这个方法获取填充的值。
JrField是报表里面定义显示栏位的对象。
在iReport工具里面可以定义jrField的名字类型以及description
2.8 JasperReport如何绘制图形报表
JasperReport本身是不绘制图形报表的,JasperReport是通过调用JFreeChart产生的image显示到报表的页面里,所以我们还需要再了解JFreeChart,我们将再后面的章节介绍JFreeChart。
3 iReport
3.1 简介
iReport就是一个可视化的报表制作工具,代替原来人工书写定义报表的xml,我们可以用iReport做下面的一些工作:
n 用iReport可以画出我们需要的报表的模版,例如在某个位置显示甚么内容,显示风格的定义等等
n 定义需要传给jasperReport的参数,例如前面一章将提到的内置参数,也可以自定义需要传递的参数
n iReport的提供的功能可以预览报表
n 将报表模版的xml编译为.jasper文件,供jasperreport调用生成我们需要的报表
n 除了可以使用前面一章提到的内置变量,我们也可以定义自己的变量
3.2 报表模版布局
3.2.1 区域位置介绍
一般情况下规则如下:
n title
这个区域的资料整个报表只显示一次
n pageHeader
这个区域的资料每一页的顶部显示一次
n columnHeader
这个区域的资料每一页的顶部显示一次,位置在pageHeader的后面
n detail
这个区域的资料有多少笔记录就显示多少次
n columnFooter
这个区域的资料每一页的底部只显示一次,位置在pageFooter,lastPageFooter的前面
n pageFooter
这个区域的资料每一页的底部只显示一次,如果有定义lastPageFooter,则最后一页不显示
n lastPageFooter
这个区域的资料在报表最后一页的底部只显示一次
n summary
这个区域的资料在最后一条记录后面显示,位置在columnFooter,pageFooter,lastPageFooter的前面
3.2.2 如何设置区域
点击工具栏的,会弹出下面的窗口,在Bandheight处输入高度后,点Apply按钮就可以了。
3.3 如何定义Fields,Parameters,Variables
报表的显示数据基本由这三个部分组成。
Fields指的是定义的数据源中对象的属性
Parameters指的是在调用填充报表的对象前,将所需要的参数放到Map对象里
Variables指的是按一定的逻辑通过调用Fields或者Parameters或者Variables组织一个计算表达式
点击工具栏,弹出一个对象属性的窗口
Ø Fields
点击新增按钮增加一个field,field包括3个特性:
name:
唯一标识
Classtype:
表示field是哪个类的对象例如:
java.lang.Integer等等,不能为基本变量类型如int,double等
Description:
field的描述,在特定应用时会用到,例如自己定义的xml数据源,可能需要从不同的Node获取资料,这个时候需要通过description来识别,在后面的具体制作报表的时候可以看到这点。
JasperReport会通过这几个属性产生一个JRField的对象。
在报表模版里书写的标识为$F{fieldname}
Ø Variables
我们可以看到里面已经有一些变量了,这些就是在JasperReport提到的它的内置变量。
点击新增按钮,弹出的窗口中包括定义Variablename,Variable classtype,Calculationtype,Variableexpression,Initialvalueexpression等等。
Variablename:
变量的名字可以和Fields或者Parameters的名字相同,但是不能和其他的变量名字一样
Variableclasstype:
表示变量是哪个类的对象,例如java.lang.Integer等等,不能为基本变量类型如int,double等
Calculationtype:
常用的包括count,sum,average等等
Variableexpression:
可以是之前的$F{fieldname},也可以是自己或者其它的变量
Initialvalueexpression:
类型一定要和选择的Variableclasstype一致
在报表模版里书写的标识为$V{variablename}
Ø Parameters
我们可以看到里面已经有一些参数的定义了,这些就是在JasperReport提到的它的内置参数。
点击新增按钮,弹出的窗口中包括定义Parametername,Parameterclasstype,Parameterdefaultvalue,Parameterdescription等等
Parametername:
参数名称,其实就是Map的key,所以参数名称不能重复
Parameterclasstype:
表示参数是那个类的对象,即Map中key对应的对象类型
Parameterdefaultvalue:
表示参数为空的时候,赋与的一个值,类型必须和选择的Parameterclasstype一致
Parameterdescription:
描述栏位,保留栏位
在报表模版里书写的标识为$P{parametername}
3.4 报表模版主要元件
所有元件在正确的区域内时,当鼠标点击该元件,边框颜色均为蓝色
如果不在正确的区域时,当鼠标点击该元件,边框颜色为红色
如果多个元件重叠,当鼠标点击该元件,边框颜色为绿色
所有元件基本有共同的几个属性,右键点击元件从弹出的菜单中选择properties,弹出一个属性窗口:
Common里面包括:
绑定的区域信息,绝对位置和大小,前景色,背景色等等。
Printwhenexpression表示满足甚么条件的时候显示,表达式必须返回一个Boolean的对象
Font里面包括:
字体大小,文字位置,文字字体等等,如果是中文或者是亚洲其他语言,当输出为PDF格式时候,需要设定Font是:
Language
PDFFontName
SimplifiedChinese
STSong-Light
TraditionalChinese
MHei-Medium
MSung-Light
Japanese
HeiseiKakuGo-W5
HeiseiMin-W3
Korean
HYGoThic-Medium
HYSMyeongJo-Medium
Border里面包括:
边框的线条颜色,粗细,框内文字距离边框的距离等等
3.4.1 直线
点击工具栏,可以在报表的任意区域画一条直线
3.4.2 静态的文字
点击工具栏,可以在任意区域画一个文本框,在它的属性窗口输入想要显示的文字
3.4.3 文字字段
点击工具栏,可以在任意区域画一个文本框,在属性框输入要显示的Field,Va
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 报表 制作 iReport jaserReport jFreeChart