当前位置: 代码迷 >> 报表 >> Java表格制作(iReport+jaserReport+jFreeChart)
  详细解决方案

Java表格制作(iReport+jaserReport+jFreeChart)

热度:674   发布时间:2016-05-05 08:02:04.0
Java报表制作(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 工作流程介绍

?

?

?

?

?

<shapetype id="_x0000_t75" stroked="f" filled="f" path="[email protected]@[email protected]@[email protected]@[email protected]@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 500.25pt; HEIGHT: 190.5pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:/DOCUME~1/admin/LOCALS~1/Temp/msohtml1/01/clip_image001.jpg" o:href="file:///C:/Documents%20and%20Settings/admin/桌面/temp/pic/1.JPG"></imagedata></shape>

?

?

?

?

?

如果我们已经用iReport已经将xml编译为.japser文件后,上图中编译部分的工作就可以省略,JasperFillManager根据定义的数据源和报表模版填充jasperPrint,有数据的报表就在这个部分填充的。如果我们要导出到不同类型的档案,则需要通过JasperExportMananger,也可以自己写一个类,但是要实现net.sf.jasperreports.engine. JRExporter这个接口。JaserReport提供的exporter再下面一节介绍。

?

?

?

?

?

2.3 重要的ClassInterface详细介绍

?

?

? 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

?

?

?

?

?

报表输出到Graphics2DJava2D应用的时候才会用到

?

?

?

?

?

? 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

?

?

这个参数是包含了nnet.sf.jasperreports.engine.JasperPrint对象的java.util.Listexporter在导出报表前会做检测

?

?

?

?

? 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被序列化对象的URLexporter在导出报表前会做检测

?

?

?

?

? 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的对象,将指定格式报表的内容发送到一个字符流,例如ServletPrintWriter

?

?

?

?

? 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 报表模版布局

?

?

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span style="mso-bookmark: _Toc154202853"><strong><span lang="EN-US" style="FONT-SIZE: 13.5pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">3.2.1</span></strong></span></chsdate>区域位置介绍

?

?

<shape id="_x0000_i1026" style="WIDTH: 508.5pt; HEIGHT: 513pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:/DOCUME~1/admin/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg" o:href="file:///C:/Documents%20and%20Settings/admin/桌面/temp/pic/2.JPG"></imagedata></shape>

?

?

一般情况下规则如下:


?

n title

?

?

这个区域的资料整个报表只显示一次

?

?

?

?

?

n pageHeader

?

?

这个区域的资料每一页的顶部显示一次

?

?

?

?

?

n columnHeader

?

?

这个区域的资料每一页的顶部显示一次,位置在pageHeader的后面

?

?

?

?

?

n detail

?

?

这个区域的资料有多少笔记录就显示多少次

?

?

?

?

?

n columnFooter

?

?

这个区域的资料每一页的底部只显示一次,位置在pageFooter,lastPageFooter的前面

?

?

?

?

?

n pageFooter

?

?

这个区域的资料每一页的底部只显示一次,如果有定义lastPageFooter,则最后一页不显示

?

?

?

?

?

n lastPageFooter

?

?

这个区域的资料在报表最后一页的底部只显示一次

?

?

?

?

?

n summary

?

?

这个区域的资料在最后一条记录后面显示,位置在columnFooter pageFooter,lastPageFooter的前面

?

?

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span style="mso-bookmark: _Toc154202854"><strong><span lang="EN-US" style="FONT-SIZE: 13.5pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">3.2.2</span></strong></span></chsdate>如何设置区域

?

?

点击工具栏的<shape id="_x0000_i1027" style="WIDTH: 24.75pt; HEIGHT: 24.75pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:/DOCUME~1/admin/LOCALS~1/Temp/msohtml1/01/clip_image003.jpg" o:href="file:///C:/Documents%20and%20Settings/admin/桌面/temp/pic/3.JPG"></imagedata></shape>,会弹出下面的窗口,在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 nameVariableclass type, Calculation typeVariable expressionInitial 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 nameParameter class type, Parameter default valueParameter description等等


?

Parameter name:参数名称,其实就是Mapkey,所以参数名称不能重复


?

Parameter class type:表示参数是那个类的对象,即Mapkey对应的对象类型


?

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里面包括:边框的线条颜色,粗细,框内文字距离边框的距离等等


?

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span style="mso-bookmark: _Toc154202857"><strong><span lang="EN-US" style="FONT-SIZE: 13.5pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">3.4.1</span></strong></span></chsdate>直线

?

?

点击工具栏 ,可以在报表的任意区域画一条直线

?

?

?

?

?

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span style="mso-bookmark: _Toc154202858"><strong><span lang="EN-US" style="FONT-SIZE: 13.5pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">3.4.2</span></strong></span></chsdate>静态的文字

?

?

点击工具栏 ,可以在任意区域画一个文本框, 在它的属性窗口输入想要显示的文字

?

?

?

?

?

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span style="mso-bookmark: _Toc154202859"><strong><span lang="EN-US" style="FONT-SIZE: 13.5pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">3.4.3</span></strong></span></chsdate>文字字段

?

?

点击工具栏 ,可以在任意区域画一个文本框,在属性框输入要显示的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}

?

?

?

?

?

?

?

?

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span style="mso-bookmark: _Toc154202860"><strong><span lang="EN-US" style="FONT-SIZE: 13.5pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">3.4.4</span></strong></span></chsdate>图象

?

?

点击工具栏 ,可以在任意区域插入图象,在属性窗口输入图象的来源

?

?

Image Expression:图象来源的表达式,一般情况下选择Image Expression Classjava.lang.String时,表达式为图象的绝对路径,可以通过$F{field},$P{parameter}来传递,也可以通过Find按钮找到本地需要显示的图象路径。

?

?

Image Expression Class:图象来源的对象类型,根据不同的类型,Image Expression就要传递该类型的对象

?

?

?

?

?

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span style="mso-bookmark: _Toc154202861"><strong><span lang="EN-US" style="FONT-SIZE: 13.5pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">3.4.5</span></strong></span></chsdate>子报表

?

?

点击工具栏的 ,可以在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:子报表的参数,这个地方的参数和窗口1Paramters Map功能一样,提供参数给子报表,区别是这个地方可以将父报表的一些具体的资料通过map传递给子报表。

?

?

?

?

?

<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899"><span style="mso-bookmark: _Toc154202862"><strong><span lang="EN-US" style="FONT-SIZE: 13.5pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">3.4.6</span></strong></span></chsdate>图形报表

?

?

点击工具栏的 ,可以在任何区域插入它,具体的图形报表制作将在后面的章节详细描述。

?

?

3.5 编译报表

?

?

当我们画好报表模版后,保存到硬盘上的只是xml 档案,因此需要编译为.jasper的档案,

?

?

点击工具栏的 ,如果我们画好的报表没有问题,将产生一个.jasper的档案,如果有错误,将在iReport的下方信息窗口显示出错的信息,为我们纠正错误提供帮助。

?

?

?

?

?

4 JFreeChart

?

?

4.1 简介

?

?

主要用来开发各种各样的图形报表,这些图形报表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图形报表上可以满足目前商业系统的要求。JFreeChart是一种基于JAVA 2D的图形报表开发技术。JFreeChart可用于ServletJSPAppletJava Appication环境中,通过JDBC可动态显示任何数据库数据,结合Itext可以输出至PDF文档。

?

?

?

?

?

?

?

?

4.2 几个重要的ClassInterface介绍

?

?

?

?

?

? 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.Paintjava.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在用数据填充报表时,根据图形报表的类型,生成对应的JFreeChartDataset对象,再调用org.jfree.chart.ChartFactory产生出对应的org.jfree.chart.JFreeChart对象。获取到该对象后,JasperReportexporter里建立一个java.awt.image.BufferedImage对象,

?

?

BufferedImage返回一个java.awt.Graphics2D对象,再将它传入给之前JFreeChart对象,最后调用JFreeChart对象的draw方法将图形输出到BufferedImage对象,供给Exporter使用。

?

?

  相关解决方案