- 浏览: 442199 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
q12344566789:
...
如何查看表的并行度并设置表的并行度 -
chruan:
刚好遇到这个问题,谢谢了。
使用Spring的CharacterEncodingFilter应注意的问题 -
nwpucyp:
还需要修改shutdown.bat里的CATALINA_HOM ...
一台机器上同时部署多个tomcat服务 -
ronghua_liu:
dom4j比较奇葩,其他开源项目没看到这样的
dom4j下载地址 -
mc90716:
引用引用引用引用
数据库查询时对多个字段group by 有什么作用
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详细介绍
Ø Class net.sf.jasperreports.engine.JasperReport
这个类的对象通过net.sf.jasperreports.engine.util.JRLoader从.jasper文件中获取,为用数据填充和产生报表做准备,当用数据填充报表的时候,运行时求各种各样报表表达式的值。对象中包含了报表的各种元素,例如报表的大小,显示位置,显示的栏位,图片信息等等。
Ø Class net.sf.jasperreports.engine.util.JRLoader
所有JasperReports 主要的功能,象报表编辑,报表填充及导出,经常用到序列化的对象,net.sf.jasperreports.engine.util.JRLoader可以帮助从文件或者URLs或者输入流中装载这些被序列化的对象。
Ø Class net.sf.jasperreports.engine.JasperPrint
这个类的对象是通过填充类根据net.sf.jasperreports.engine.JasperReport的对象用数据填充后的结果,这样可以被很直观的被别的类引用,将报表输出到网络或者文件
Ø Interface net.sf.jasperreports.engine.JRDataSource
JasperReports是一个非常灵活的报表工具,在数据来源方面更是体现了这一点,程序员可以自己定义不同类型的数据源,前提是实现这个接口,我们的数据源就可以千变万化,数据源可以是XML,CSV,TEXT,Object List 等等,在后面的章节详细描述如何实现该接口
Ø Class net.sf.jasperreports.engine.export.JExcelApiExporter
报表产生到一个EXCEL文档,如果报表里面有图形,一定要用这个exporter
Ø Class net.sf.jasperreports.engine.export.JRCsvExporter
报表产生到一个CVS文档
Ø Class net.sf.jasperreports.engine.export.JRGraphics2Dexporter
报表输出到Graphics2D,Java2D应用的时候才会用到
Ø Class net.sf.jasperreports.engine.export.JRHtmlExporter
报表产生到一个HTML文档
Ø Class net.sf.jasperreports.engine.export.JRPdfExporter
报表产生到一个PDF文档
Ø Class net.sf.jasperreports.engine.export.JRRtfExporter
报表产生到一个RTF文档
Ø Class net.sf.jasperreports.engine.export.JRTextExporter
报表产生到一个TXT文档
Ø Class net.sf.jasperreports.engine.export.JRXlsExporter
报表产生到EXCEL文档,用这个exporter,报表中的图形将不被输出
Ø Class net.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对象,在用Report Query的时候调用
Ø 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
这个是调用Java Swing tables得到的数据源
Ø net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
这个是调用collections得到的数据源
我们要定义自己的DataSource,需要实现下面两个方法:
² public boolean next() throws JRException;
报表填充数据的时候,填充每一条记录之前都会调用这个方法,将指针移动到下一条数据,如果有下一条数据返回true,否则返回false。
² public Object getFieldValue(JRField jrField) throws JRException;
当填充报表的每一个栏位的时候,会调用这个方法获取填充的值。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 如何设置区域
点击工具栏的 ,会弹出下面的窗口,在Band height处输入高度后,点Apply按钮就可以了。
3.3 如何定义Fields,Parameters,Variables
报表的显示数据基本由这三个部分组成。
Fields指的是定义的数据源中对象的属性
Parameters指的是在调用填充报表的对象前,将所需要的参数放到Map对象里
Variables指的是按一定的逻辑通过调用Fields或者Parameters或者Variables组织一个计算表达式
点击工具栏 ,弹出一个对象属性的窗口
Ø Fields
点击新增按钮增加一个field,field包括3个特性:
name:唯一标识
Class type:表示field是哪个类的对象例如:java.lang.Integer等等,不能为基本变量类型如int,double等
Description:field的描述,在特定应用时会用到,例如自己定义的xml数据源,可能需要从不同的Node获取资料,这个时候需要通过description来识别,在后面的具体制作报表的时候可以看到这点。
JasperReport会通过这几个属性产生一个JRField的对象。
在报表模版里书写的标识为$F{field name}
Ø Variables
我们可以看到里面已经有一些变量了,这些就是在JasperReport提到的它的内置变量。
点击新增按钮,弹出的窗口中包括定义Variable name,Variable class type, Calculation type,Variable expression,Initial value expression等等。
Variable name :变量的名字可以和Fields或者Parameters的名字相同,但是不能和其他的变量名字一样
Variable class type:表示变量是哪个类的对象,例如java.lang.Integer等等,不能为基本变量类型如int,double等
Calculation type:常用的包括count,sum, average等等
Variable expression:可以是之前的$F{field name},也可以是自己或者其它的变量
Initial value expression:类型一定要和选择的Variable class type一致
在报表模版里书写的标识为$V{variable name}
Ø Parameters
我们可以看到里面已经有一些参数的定义了,这些就是在JasperReport提到的它的内置参数。
点击新增按钮,弹出的窗口中包括定义Parameter name,Parameter class type, Parameter default value,Parameter description等等
Parameter name:参数名称,其实就是Map的key,所以参数名称不能重复
Parameter class type:表示参数是那个类的对象,即Map中key对应的对象类型
Parameter default value:表示参数为空的时候,赋与的一个值,类型必须和选择的Parameter class type一致
Parameter description:描述栏位,保留栏位
在报表模版里书写的标识为$P{parameter name}
3.4 报表模版主要元件
所有元件在正确的区域内时,当鼠标点击该元件,边框颜色均为蓝色
如果不在正确的区域时,当鼠标点击该元件,边框颜色为红色
如果多个元件重叠,当鼠标点击该元件,边框颜色为绿色
所有元件基本有共同的几个属性,右键点击元件从弹出的菜单中选择properties,弹出一个属性窗口:
Common里面包括:绑定的区域信息,绝对位置和大小,前景色,背景色等等。
Print when expression表示满足甚么条件的时候显示,表达式必须返回一个Boolean的对象
Font里面包括:字体大小,文字位置,文字字体等等,如果是中文或者是亚洲其他语言,当输出为PDF格式时候,需要设定Font是:
Language
PDF Font Name
Simplified Chinese
STSong-Light
Traditional Chinese
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, Variable,Parameter
Textfield Expression Class:必须和定义的类型一致,目前只支持下面的类型:
java.lang.Boolean
java.lang.Byte
java.util.Date
java.sql.Timestamp
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.math.BigDecimal
java.lang.String
Evaluation time:赋值时间一般选择now
Stretch with overflow:当文字超出边框时是否自动延长
Banlk when null:当内容为空指针的时候是否显示空格
Pattern:显示的式样,如果为Number类型或者日期类型时可以建立特定的显示式样
Textfield expression:表达式可以为$F{field},$V{variable},$P{parameter}
3.4.4 图象
点击工具栏 ,可以在任意区域插入图象,在属性窗口输入图象的来源
Image Expression:图象来源的表达式,一般情况下选择Image Expression Class为java.lang.String时,表达式为图象的绝对路径,可以通过$F{field},$P{parameter}来传递,也可以通过Find按钮找到本地需要显示的图象路径。
Image Expression Class:图象来源的对象类型,根据不同的类型,Image Expression就要传递该类型的对象
3.4.5 子报表
点击工具栏的 ,可以在detail,summary区域插入子报表,下面是子报表的属性:
u 窗口1
Paramters Map Expression:这个是传递给子报表的参数表,类型一定是java.util.Map,子报表的参数还可以通过别的方式传递,在下面窗口2中有描述。
Connetion / Datasouce Expression:这个是子报表的数据源,一般情况下是用JRDataSource,这里写的$P{MY_DATA_SOURCE},表示子报表数据源是通过父报表参数传递的,因此要在参数表那里定义。
u 窗口2
Subreport Expression Class:子报表的类型,通常选择如图中所示的类型,这个参数也是通过父报表的参数来传递,因此要在参数中定义它。
SubReport parameters:子报表的参数,这个地方的参数和窗口1的Paramters Map功能一样,提供参数给子报表,区别是这个地方可以将父报表的一些具体的资料通过map传递给子报表。
3.4.6 图形报表
点击工具栏的 ,可以在任何区域插入它,具体的图形报表制作将在后面的章节详细描述。
3.5 编译报表
当我们画好报表模版后,保存到硬盘上的只是xml 档案,因此需要编译为.jasper的档案,
点击工具栏的 ,如果我们画好的报表没有问题,将产生一个.jasper的档案,如果有错误,将在iReport的下方信息窗口显示出错的信息,为我们纠正错误提供帮助。
4 JFreeChart
4.1 简介
主要用来开发各种各样的图形报表,这些图形报表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图形报表上可以满足目前商业系统的要求。JFreeChart是一种基于JAVA 2D的图形报表开发技术。JFreeChart可用于Servlet、JSP、Applet、Java Appication环境中,通过JDBC可动态显示任何数据库数据,结合Itext可以输出至PDF文档。
4.2 几个重要的Class和Interface介绍
Ø Class org.jfree.chart.ChartFactory
这个类负责产生各种图形的org.jfree.chart.JFreeChart的对象,JasperReport通过调用org.jfree.chart.ChartFactory的方法获取到相应图形的org.jfree.chart.JfreeChar的对象。
Ø Class org.jfree.chart.JFreeChart
这个类实现了Java 2D APIs,它的目的是在Java 2D graphics device上绘出想要的图像
Ø Interface org.jfree.data.category.CategoryDataset
用于图形生成所要的数据集对象,实现这个接口的Dataset主要用于3D数据,例如Bar,Group Bar,Line,StackedBar 等等
Ø Interface org.jfree.data.category.PieDataset
用于图形生成所要的数据集对象,实现这个接口的Dataset主要用于2D数据,例如Pie
Ø Interface org.jfree.chart.plot.DrawingSupplier
java.awt.Paint及java.awt.Stroke 对象的提供者,可以通过实现它自己定义Chart的颜色
Ø Abstract Class org.jfree.chart.plot.Plot
这个抽象类以及所有子类做为org.jfree.chart.JFreeChart的代理,在Java 2D graphics device绘出坐标以及数据区域的图像
Ø Abstract Class org.jfree.chart.renderer.AbstractRenderer
这个抽象类以及所有子类主要用在3D数据时在Java 2D graphics device绘出每个区域的颜色,每个区域轮廓的颜色,每个区域上的数值
4.3 JasperReport如何调用JFreeChart产生图形报表
JasperReport在用数据填充报表时,根据图形报表的类型,生成对应的JFreeChart的Dataset对象,再调用org.jfree.chart.ChartFactory产生出对应的org.jfree.chart.JFreeChart对象。获取到该对象后,JasperReport在exporter里建立一个java.awt.image.BufferedImage对象,
BufferedImage返回一个java.awt.Graphics2D对象,再将它传入给之前JFreeChart对象,最后调用JFreeChart对象的draw方法将图形输出到BufferedImage对象,供给Exporter使用。
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详细介绍
Ø Class net.sf.jasperreports.engine.JasperReport
这个类的对象通过net.sf.jasperreports.engine.util.JRLoader从.jasper文件中获取,为用数据填充和产生报表做准备,当用数据填充报表的时候,运行时求各种各样报表表达式的值。对象中包含了报表的各种元素,例如报表的大小,显示位置,显示的栏位,图片信息等等。
Ø Class net.sf.jasperreports.engine.util.JRLoader
所有JasperReports 主要的功能,象报表编辑,报表填充及导出,经常用到序列化的对象,net.sf.jasperreports.engine.util.JRLoader可以帮助从文件或者URLs或者输入流中装载这些被序列化的对象。
Ø Class net.sf.jasperreports.engine.JasperPrint
这个类的对象是通过填充类根据net.sf.jasperreports.engine.JasperReport的对象用数据填充后的结果,这样可以被很直观的被别的类引用,将报表输出到网络或者文件
Ø Interface net.sf.jasperreports.engine.JRDataSource
JasperReports是一个非常灵活的报表工具,在数据来源方面更是体现了这一点,程序员可以自己定义不同类型的数据源,前提是实现这个接口,我们的数据源就可以千变万化,数据源可以是XML,CSV,TEXT,Object List 等等,在后面的章节详细描述如何实现该接口
Ø Class net.sf.jasperreports.engine.export.JExcelApiExporter
报表产生到一个EXCEL文档,如果报表里面有图形,一定要用这个exporter
Ø Class net.sf.jasperreports.engine.export.JRCsvExporter
报表产生到一个CVS文档
Ø Class net.sf.jasperreports.engine.export.JRGraphics2Dexporter
报表输出到Graphics2D,Java2D应用的时候才会用到
Ø Class net.sf.jasperreports.engine.export.JRHtmlExporter
报表产生到一个HTML文档
Ø Class net.sf.jasperreports.engine.export.JRPdfExporter
报表产生到一个PDF文档
Ø Class net.sf.jasperreports.engine.export.JRRtfExporter
报表产生到一个RTF文档
Ø Class net.sf.jasperreports.engine.export.JRTextExporter
报表产生到一个TXT文档
Ø Class net.sf.jasperreports.engine.export.JRXlsExporter
报表产生到EXCEL文档,用这个exporter,报表中的图形将不被输出
Ø Class net.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对象,在用Report Query的时候调用
Ø 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
这个是调用Java Swing tables得到的数据源
Ø net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
这个是调用collections得到的数据源
我们要定义自己的DataSource,需要实现下面两个方法:
² public boolean next() throws JRException;
报表填充数据的时候,填充每一条记录之前都会调用这个方法,将指针移动到下一条数据,如果有下一条数据返回true,否则返回false。
² public Object getFieldValue(JRField jrField) throws JRException;
当填充报表的每一个栏位的时候,会调用这个方法获取填充的值。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 如何设置区域
点击工具栏的 ,会弹出下面的窗口,在Band height处输入高度后,点Apply按钮就可以了。
3.3 如何定义Fields,Parameters,Variables
报表的显示数据基本由这三个部分组成。
Fields指的是定义的数据源中对象的属性
Parameters指的是在调用填充报表的对象前,将所需要的参数放到Map对象里
Variables指的是按一定的逻辑通过调用Fields或者Parameters或者Variables组织一个计算表达式
点击工具栏 ,弹出一个对象属性的窗口
Ø Fields
点击新增按钮增加一个field,field包括3个特性:
name:唯一标识
Class type:表示field是哪个类的对象例如:java.lang.Integer等等,不能为基本变量类型如int,double等
Description:field的描述,在特定应用时会用到,例如自己定义的xml数据源,可能需要从不同的Node获取资料,这个时候需要通过description来识别,在后面的具体制作报表的时候可以看到这点。
JasperReport会通过这几个属性产生一个JRField的对象。
在报表模版里书写的标识为$F{field name}
Ø Variables
我们可以看到里面已经有一些变量了,这些就是在JasperReport提到的它的内置变量。
点击新增按钮,弹出的窗口中包括定义Variable name,Variable class type, Calculation type,Variable expression,Initial value expression等等。
Variable name :变量的名字可以和Fields或者Parameters的名字相同,但是不能和其他的变量名字一样
Variable class type:表示变量是哪个类的对象,例如java.lang.Integer等等,不能为基本变量类型如int,double等
Calculation type:常用的包括count,sum, average等等
Variable expression:可以是之前的$F{field name},也可以是自己或者其它的变量
Initial value expression:类型一定要和选择的Variable class type一致
在报表模版里书写的标识为$V{variable name}
Ø Parameters
我们可以看到里面已经有一些参数的定义了,这些就是在JasperReport提到的它的内置参数。
点击新增按钮,弹出的窗口中包括定义Parameter name,Parameter class type, Parameter default value,Parameter description等等
Parameter name:参数名称,其实就是Map的key,所以参数名称不能重复
Parameter class type:表示参数是那个类的对象,即Map中key对应的对象类型
Parameter default value:表示参数为空的时候,赋与的一个值,类型必须和选择的Parameter class type一致
Parameter description:描述栏位,保留栏位
在报表模版里书写的标识为$P{parameter name}
3.4 报表模版主要元件
所有元件在正确的区域内时,当鼠标点击该元件,边框颜色均为蓝色
如果不在正确的区域时,当鼠标点击该元件,边框颜色为红色
如果多个元件重叠,当鼠标点击该元件,边框颜色为绿色
所有元件基本有共同的几个属性,右键点击元件从弹出的菜单中选择properties,弹出一个属性窗口:
Common里面包括:绑定的区域信息,绝对位置和大小,前景色,背景色等等。
Print when expression表示满足甚么条件的时候显示,表达式必须返回一个Boolean的对象
Font里面包括:字体大小,文字位置,文字字体等等,如果是中文或者是亚洲其他语言,当输出为PDF格式时候,需要设定Font是:
Language
PDF Font Name
Simplified Chinese
STSong-Light
Traditional Chinese
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, Variable,Parameter
Textfield Expression Class:必须和定义的类型一致,目前只支持下面的类型:
java.lang.Boolean
java.lang.Byte
java.util.Date
java.sql.Timestamp
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.math.BigDecimal
java.lang.String
Evaluation time:赋值时间一般选择now
Stretch with overflow:当文字超出边框时是否自动延长
Banlk when null:当内容为空指针的时候是否显示空格
Pattern:显示的式样,如果为Number类型或者日期类型时可以建立特定的显示式样
Textfield expression:表达式可以为$F{field},$V{variable},$P{parameter}
3.4.4 图象
点击工具栏 ,可以在任意区域插入图象,在属性窗口输入图象的来源
Image Expression:图象来源的表达式,一般情况下选择Image Expression Class为java.lang.String时,表达式为图象的绝对路径,可以通过$F{field},$P{parameter}来传递,也可以通过Find按钮找到本地需要显示的图象路径。
Image Expression Class:图象来源的对象类型,根据不同的类型,Image Expression就要传递该类型的对象
3.4.5 子报表
点击工具栏的 ,可以在detail,summary区域插入子报表,下面是子报表的属性:
u 窗口1
Paramters Map Expression:这个是传递给子报表的参数表,类型一定是java.util.Map,子报表的参数还可以通过别的方式传递,在下面窗口2中有描述。
Connetion / Datasouce Expression:这个是子报表的数据源,一般情况下是用JRDataSource,这里写的$P{MY_DATA_SOURCE},表示子报表数据源是通过父报表参数传递的,因此要在参数表那里定义。
u 窗口2
Subreport Expression Class:子报表的类型,通常选择如图中所示的类型,这个参数也是通过父报表的参数来传递,因此要在参数中定义它。
SubReport parameters:子报表的参数,这个地方的参数和窗口1的Paramters Map功能一样,提供参数给子报表,区别是这个地方可以将父报表的一些具体的资料通过map传递给子报表。
3.4.6 图形报表
点击工具栏的 ,可以在任何区域插入它,具体的图形报表制作将在后面的章节详细描述。
3.5 编译报表
当我们画好报表模版后,保存到硬盘上的只是xml 档案,因此需要编译为.jasper的档案,
点击工具栏的 ,如果我们画好的报表没有问题,将产生一个.jasper的档案,如果有错误,将在iReport的下方信息窗口显示出错的信息,为我们纠正错误提供帮助。
4 JFreeChart
4.1 简介
主要用来开发各种各样的图形报表,这些图形报表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图形报表上可以满足目前商业系统的要求。JFreeChart是一种基于JAVA 2D的图形报表开发技术。JFreeChart可用于Servlet、JSP、Applet、Java Appication环境中,通过JDBC可动态显示任何数据库数据,结合Itext可以输出至PDF文档。
4.2 几个重要的Class和Interface介绍
Ø Class org.jfree.chart.ChartFactory
这个类负责产生各种图形的org.jfree.chart.JFreeChart的对象,JasperReport通过调用org.jfree.chart.ChartFactory的方法获取到相应图形的org.jfree.chart.JfreeChar的对象。
Ø Class org.jfree.chart.JFreeChart
这个类实现了Java 2D APIs,它的目的是在Java 2D graphics device上绘出想要的图像
Ø Interface org.jfree.data.category.CategoryDataset
用于图形生成所要的数据集对象,实现这个接口的Dataset主要用于3D数据,例如Bar,Group Bar,Line,StackedBar 等等
Ø Interface org.jfree.data.category.PieDataset
用于图形生成所要的数据集对象,实现这个接口的Dataset主要用于2D数据,例如Pie
Ø Interface org.jfree.chart.plot.DrawingSupplier
java.awt.Paint及java.awt.Stroke 对象的提供者,可以通过实现它自己定义Chart的颜色
Ø Abstract Class org.jfree.chart.plot.Plot
这个抽象类以及所有子类做为org.jfree.chart.JFreeChart的代理,在Java 2D graphics device绘出坐标以及数据区域的图像
Ø Abstract Class org.jfree.chart.renderer.AbstractRenderer
这个抽象类以及所有子类主要用在3D数据时在Java 2D graphics device绘出每个区域的颜色,每个区域轮廓的颜色,每个区域上的数值
4.3 JasperReport如何调用JFreeChart产生图形报表
JasperReport在用数据填充报表时,根据图形报表的类型,生成对应的JFreeChart的Dataset对象,再调用org.jfree.chart.ChartFactory产生出对应的org.jfree.chart.JFreeChart对象。获取到该对象后,JasperReport在exporter里建立一个java.awt.image.BufferedImage对象,
BufferedImage返回一个java.awt.Graphics2D对象,再将它传入给之前JFreeChart对象,最后调用JFreeChart对象的draw方法将图形输出到BufferedImage对象,供给Exporter使用。
发表评论
-
深入理解Oracle索引(5):反向索引的定义、缺点和适用场景
2014-02-20 13:26 828http://blog.csdn.net/dba_waterb ... -
java.sql.SQLException: ORA-01008: 并非所有变量都已绑定
2013-10-17 19:21 3523java.sql.SQLException: ORA-0100 ... -
linux下mysql的root密码忘记解决方
2013-10-08 10:02 8511.首先确认服务器出于安全的状态,也就是没有人能够任意地连接 ... -
centos6 修改profile后,无法登录系统(profile修改错误)
2013-09-29 15:41 820使用单用户模式登陆去修改profile 一、单用户模式; ... -
centos6 修改profile后,无法登录系统(profile修改错误)
2013-09-29 15:41 1754使用单用户模式登陆去修改profile 一、单用户模式; ... -
JavaScript trim函数大赏
2013-09-18 17:41 909http://www.cnblogs.com/rubylouv ... -
java 线程
2013-07-17 17:57 1039http://www.cnblogs.com/devinzha ... -
AIX 操作系统查看文件夹及文件大小的命令
2013-07-03 18:51 75521、df -sg 说明:查看各分区的使用情况 2、du ... -
oracle 多个例程,启动具体例程 startup pfile
2013-07-03 13:46 3743如果环境是AIX系统,安装了oracle,具有多个例程(实例i ... -
解决ORA-30036:无法按8扩展段(在还原表空间‘XXXX’中)
2013-07-01 18:03 1815http://blog.sina.com.cn/s/blog_ ... -
oracle 并行度--转载
2013-06-28 15:51 1925从巴乔博客中看到: ‘并行度为DEFAULT的表进行PDML时 ... -
oracle并行查询常见问题 --转载
2013-06-28 15:46 1182在OLAP环境,以利用多的 ... -
多核技术与并发多线程技术介绍(转载)
2013-06-28 15:45 1527看多很多人在这个上面 ... -
AIX如何查看cpu个数(转载)
2013-06-28 15:19 1321http://hi.baidu.com/fgvibxjaneb ... -
如何查看表的并行度并设置表的并行度
2013-06-28 15:17 7640查看表的并行度语句: select table_name,de ... -
Oracle--optimizer_mode
2013-06-24 17:00 1547Oracle--optimizer_mode O ... -
jtable单元格的悬浮提示和表头标题的悬浮提示
2013-06-19 18:14 1552http://blog.csdn.net/yufaw/arti ... -
servlet2.4 和servlet2.5中配置taglib的区别
2013-06-17 15:54 15492.4写法: <jsp-config> & ... -
win7 SP2-1503: 无法初始化 Oracle 调用界面
2013-06-09 15:01 1454win7 下 cmd 运行 sqlplus 报 ... -
触发Full GC执行的情况
2013-06-06 18:38 990http://blog.sina.com.cn/s/blog_ ...
相关推荐
本文详细介绍了JasperReport的基本概念、设计方式、数据源配置以及集成部署等方面的内容。通过本文的学习,读者可以更好地理解和掌握如何使用JasperReport进行报表设计与开发。随着对JasperReport的深入了解,开发者...
本文详细介绍了使用iReport和JasperReport开发柱状图的过程,包括确定数据源类型、开发数据源类、设计图表属性等步骤。作者分享了自己的实践经验,遇到的困难和解决方法,旨在帮助读者更好地理解和掌握iReport和...
【JasperReport教程】 JasperReport是一款开源的报表生成工具,它允许...以上就是JasperReport的基本介绍和使用方法,通过熟练掌握这些知识点,开发者可以构建出功能丰富的报表系统,满足企业对数据分析和展示的需求。
本文旨在详细介绍如何将Spring MVC框架与JasperReport报表工具进行有效集成的过程,并解决在此过程中可能遇到的问题。JasperReport是一款非常强大的报表生成工具,它支持多种数据源,如JDBC、XML等,并且可以输出PDF...
本教程将详细介绍以下几个关键知识点: 1. **安装与配置**:首先,你需要学习如何下载并安装iReport,以及如何配置与JasperReport的连接。这通常涉及到设置JDBC驱动和数据源。 2. **报表设计基础**:了解iReport的...
1. "ireport-5.6.0说明.txt" - 这个文件很可能包含了关于如何使用iReport 5.6.0的详细说明,包括安装步骤、配置指南、功能介绍、示例以及可能的常见问题解答。 2. "extONE" - 这个文件名没有明确的扩展名,可能是另...
本实例将详细介绍如何通过自定义JavaBean数据源来生成报表。 首先,理解JavaBean是一种符合特定规范的Java类,它通常具有公共getter和setter方法,用于封装对象的状态。在JasperReport中,JavaBean可以被用作数据源...
这个压缩包中的API文档将详细介绍JasperReport的各个类和方法,是你学习和解决问题的重要参考。通过阅读和查阅,你可以了解到更多关于报表设计、数据处理、输出格式等方面的细节,从而提高开发效率和报表质量。在...
这一过程涉及到的主要类有JasperDesign、JasperReport、JasperFillManager和JasperPrint。 第3章至第5章,你将学习如何使用JasperReport的高级特性,如子报表、图表、参数和变量。这些特性使报表能动态地处理复杂的...
总结起来,这篇博文会介绍如何在Struts2中集成JasperReport,通过编写Action类和配置Struts2的XML文件,实现动态报表的生成,并导出为PDF、Excel和HTML格式。这样的功能对于需要展示大量数据的应用场景非常有用,如...
### JasperReport+iReport 报表工具详细开发手册 ...以上就是关于JasperReport+iReport 报表工具的详细介绍,通过本文档的学习,相信您可以更好地理解和掌握如何使用这两款工具来设计和生成报表。
### JasperReport中使用多个数据源的方法详解 #### 场景背景 在报表开发过程中,有时我们需要在一个报表中展示不同来源的数据。例如,在同一份报告中同时呈现交叉表和饼状图,而这两部分数据可能源自不同的数据库表...
本文将介绍如何在MyEclipse中使用iReport和JasperReport结合Struts2框架来开发报表。MyEclipse是一款强大的Java集成开发环境,而iReport是一款基于JasperReport的报表设计工具,Struts2则是一个流行的Java web应用...
然而,这种做法过于繁琐,因此出现了一些可视化的报表设计工具,只需要通过鼠标操作就可以完成设计工作,而iReport就是这类工具之一。iReport官方网站(http://ireport.sourceforge.net/)对其描述如下: iReport是...
1. **安装JasperReport库**:首先,需要将JasperReport的JAR文件添加到Compiere的类路径中,以确保系统可以识别和调用JasperReport的API。 2. **设计报表模板**:使用iReport或其他工具创建JasperDesign文件,定义...
本文将详细介绍如何利用JasperReport和iReport来创建动态的Java报表组件,并探讨其主要优点和使用方法。 1. **JasperReport简介** JasperReport是一个用Java编写的报表库,它可以生成PDF、HTML、XLS、CSV等多种...
描述中提到的链接是一个CSDN博客文章,该文章详细介绍了如何解决JasperReport在处理中文字符时的字体问题。文章指出,使用"微软雅黑"字体是一个常见的选择,因为这款字体在Windows系统中广泛使用,并且包含了丰富的...
在Web方面,本手册将介绍如何将JasperReport报表集成到Web应用程序中。其中提到了JasperReportWeb,意味着如何在Web项目中使用JasperReport生成的报表。通过一个名为reportRun.jsp的JSP页面来展示报表,这里的...