JasperReport与IReport开发指南

proopen 贡献于2012-09-18

作者 wangshuyan  创建于2008-03-19 07:45:00   修改者wangshuyan  修改于2008-04-01 12:15:00字数8855

文档摘要:JasperReport与iReport简介JasperReport简介JasperReport是一款报表打印组件,是开放源代码组织sf.net中的一个java报表打印工程。我们使用jasperreports-2.0.4,JasperReport的最新版本可以从http://jasperreports.sourceforge.net/index.html下载得到,JasperReport适合用来做WEB应用程序与JavaApplication的报表打印组件,而且关键的一点是:JasperReport是免费开源的!iReport简介iReport也是开源组织sf.net中的一款免费软件,其主要作用是用来以可视化的方式设计生成JasperReport所使用的报表格式文件,因为JasperReport本身并未提供很好的可视化报表设计工具,iReport的出现正好弥补了这个缺陷。
关键词:

JasperReport与IReport开发指南 JasperReport 与iReport 简介 JasperReport 简介 JasperReport 是一款报表打印组件,是开放源代码组织sf.net 中的一个java 报表打印工程。我们使用jasperreports-2.0.4,JasperReport 的最新版本可以从http://jasperreports.sourceforge.net/index.html 下载得到,JasperReport 适合用来做WEB 应用程序与Java Application 的报表打印组件,而且关键的一点是:JasperReport 是免费开源的! iReport 简介 iReport 也是开源组织sf.net 中的一款免费软件,其主要作用是用来以可视化的方式设计 生成JasperReport 所使用的报表格式文件,因为JasperReport 本身并未提供很好的可视化报表设计工具,iReport 的出现正好弥补了这个缺陷。我们使用iReport-2.0.4,iReport 可以从http://ireport.sourceforge.net 下载得到,注意下载的iReport 一定要与你所使用的JasperReport 版本相匹配,当然您也可以更新iReport 中所使用的JasperReport 组件。 软件安装与配置 JDK 的安装与配置 JDK的版本采用1.5版本及其以上,安装1.5版本的JDK,不需要卸载之前开发的JDK版本及其配置。 在环境变量中配置JAVA_HOME路径,目录名后不要带有“\”。如下: 在环境变量中CLASSPATH变量值中增加%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar,也可以直接输入绝对路径,但建议使用%JAVA_HOME%的方式。 再接下来还要修改系统环境变量PATH,增加%JAVA_HOME%\bin 目录。 至此JDK 的配置也完成,打开一个命令行窗口,键入set classpath 与set java_home 应该可 以看到正确的配置信息,同时,输入javac -version 看系统能否找到JAVA 的编译器。 ant 的安装与配置 ant 是个很好用的工具,虽然对于JasperReport 和iReport 来说ant 并不是必须的,但还是建议以使用ant 的方式来应用。 ant 是apache 组织的一个子项目,可以从http://ant.apache.org 下载得到,Windows 平台 的可以下载ZIP 格式的安装文件,下载完成以后解压缩到某个目录,建议使用根目录下的直 接子目录作为ant 解压缩以后目录,ant 无需安装,解压缩文件以后就算安装完成。 与设置JDK相同的操作过程打开系统环境变量设置窗口,增加ANT_HOME 环境变量,变量值为解压缩以后的ant 所在目录,目录名中同样不要带有“\”。 在系统的环境变量Path 中增加%ANT_HOME%\bin 目录,然后新开一个命令行窗口, 输入ant 后如果出现如下图所示内容即算正确完成ant 的配置。 JasperReport 的安装与配置 下载jasperreport的jar包放在系统中的%JAVA_HOME%\lib\目录中。 在CLASSPATH变量值中增加jar包的路径。 iReport 的安装与配置 直接安装iReport-2.0.4-windows-installer.exe 安装完成以后,把tools.jar、dt.jar、classes12.jar(Oracle驱动程序)、iTextAsian.jar(亚洲字符集)放到iReport目录下的lib目录下,并重新启动iReport。 模板开发 设置默认语言 点击“Option”中Settings中的属性Language即可对设置默认语言,保存即可生效。 连接数据库 选择“data”菜单中的“Connections/Datasources”,在打开的数据连接列表窗口中点击“new”以便新增一个数据源,JasperReport 可以使用多种数据源,可以是JDBC 数据库连接,也可以是从XML 文件中取数据等。以下是使用Oracle 中的UTF8DB 数据库做为数据源的一个配置例子。 我们还需要手工复制Oracle 的JDBC 驱动文件(..\ oracle\ora92\jdbc\lib 目录下的classes12.jar)到iReport 的lib 目录,复制JDBC 驱动以外需要重新运行iReport 才会生效。配置好数据源以后,点击“Test”按钮,如果配置没有错误,应该会弹出测试连接成功的提示。测试数据库连接成功后,点击“Save”按钮保存这个数据源以便完成数据源的配置。 设置SQL语句查询 点击“Build”菜单,选择“set activeconnection”即可使报表与数据源连接上。然后点击“Data”菜单,点击“Report query”,在打开的窗口中输入SQL 查询语句。 2.X 版本增加字段的方法:点击“Read fields”按钮,如果SQL 查询语句语法正确,则iReport 自动取出查询结果中的字段列表,使用Ctrl 键选择我们的报表中将会使用到的字段,也可以使用Shift 键选择所有字段,点击“Register fields to report”,您所选中的字段名称及类型等信息自动增加到了报表引用字段列表中,点击“Save query to report”,保存这个查询。 3.0 版增加字段的方法:3.0 版可以自动的根据sql 语句取出查询结果,并且查询结果中的字段列表默认就是已经选中的了,如下所示,输入完正确的sql 语句后直接点击“OK”即可完成字段的自动增加。 设置报表样式 在IReport新版本中,不推荐使用直接设置字体和字符集的方式。而是采用样式(Stryle)的方式。这样处理的好处大致有两点:1、只需要对属性Style进行设置,不需要对每一个字体、字符集等一一设置;2、当字体等发生变化,不需要一一修改每一个元件,只要修改Style设置就可以了。 菜单Format->Styles中新增一个样式,如果该样式在这个报表中使用比较多的话,可以设置为默认。 在样式中可以设置字体、字符集、颜色、等属性。 在元件属性Style中选择需要的样式。 iReport 中各band 的功能 Title Band:title 段只在整个报表的第一页的最上面部分显示,除了第一页以外,不管报表中共有多少个页面也不会再出现Title band 中的内容。 pageHeader Band:顾名思义,pageHeader 段中的内容将会在整个报表中的每一个页面中都会出现,显示在位置在页面的上部,如果是报表的第一页,pageHeader 中的内容将显示在Title Band 下面,除了第一页以外的其他所有页面中pageHeader 中的内容将在显示在页面的最上端。 pageFooter Band:显示在所有页面的最下端。 lastPageFooter Band:显示在最后一页的最下端。 Detail Band: 报表内容段,在这个Band 中设计报表中需要重复出现的内容,Detail 段中的内容每页都会出现。 columnHeader Band:针对Detail Band 的表头段,一般情况下在这个段中画报表的表头。 columnFooter Band:针对Detail Band 的表尾段。 Summary Band:表格的合计段,出现在整个报表的最后一页中的Detail band 的后面,一般用来统计报表中某一个或某几个字段的合计值。 这些Band的功能、条件、所处的位置与如意报表的Band功能差不多。 使用报表字段 点击“View”菜单,选择“Fields”,iReport 打开报表字段列表窗口,就会显示出从SQL 查询中增加过了报表字段列表,则打开后的窗口中将会显示您所增字段列表,在此功能中可以再手工增加、修改、删除报表字段列表。 在动态文本框中,即可使用报表字段,如下 在iReport 中定义与使用参数 参数用来在报表运行时动态传递某些数据,如SQL 查询中的条件,报表中需要动态显示的数据等,定义参数的方法为:选择“View”主菜单,选择“Report Parameters”项,打开当前报表中的参数列表窗口,点击“New”来新增参数,在新增参数对话框中输入参数的名称、数据类型、缺省值以及参数的描述信息等,如下图所示: 需要注意的是,根据不同的参数类型,在设置参数的缺省值时要使值能与参数类型匹配,即字符型的参数在设置缺省值时要用””把值括起来,如果是数据值型的则不能加””。 参数在iReport 设计器中的使用也很简单,使用方法与使用数据库字段类似,只是需要将$F 改为$P,即,参数数据的表达格式为$P{参数名称},同时注意参数名称是大小写敏感的。 怎样定义与使用变量 何时使用变量呢?对于一些可以由报表系统自己产生而不必需要从外界传入的数据,如 报表的打印时间等,我们可以通过定义一个变量来解决这类小问题。 定义过程如下:选择“View”菜单,选择“Report Variables”项,点击“New”按钮, 在 变量名称处输入您要定义的变量名称,如:PrintDate,选择变量类型,设置变量的初始值, 设置合适的变量计算类型。 保存变量后,打开字段设计窗口,修改里面的内容为如下所示: 主要修改了三个地方,一是字段的类型,必须要和变量所定义的类型相符,二是字段的取值,变量类型的格式为:$V(变量名),三是变量的输出格式,即在Pattern 中设置正确的格式,如取小时和分钟的话可以设置为:HH 时MM 分。 使用变量的报表结果如下所示:18时05分。 报表元件属性介绍 Stretch type - No stretch 预先改变类型利用元素的高度保持一直。 -RelativeToBandHeight 元素成比例的增加使band增加,用来模仿表格的垂线。 - RelativeToTallestObject 这个选项修改一个元素的高度从而改变离它最近的元素:它也被用做element group,这是一个元素组机制,但不能被iReport管理。 Position type 在band被改变的情况下确定顶部的坐标。三个可能的值是: - FixRelativeToTop 预先定义位置类型;这个坐标从来不改变的。 - Float 元素进一步的向底边增加他们的高度,依据前一个元素的高度 - FixRelativeToBottom 元素维持其到底边的距离的常量值;被用做单独记录的分割线。 Print repeated values this 当这个选项没有被选中的时候,会压缩重复值。 Print in first whole band 当text字段被压缩重复值的时候,新一页的第一行也会显示出来。 Print when detail overflows 这个选项允许打印元素以页或列,如果band不能被打印当前的列或页。 Print when expression it is 它是一个java表达式像那些描述在第三章,返回一个boolean对象;除了这些元素之外,这些表达式也被连接到band中。如果表达式返回true,这个元素是隐藏的。一个null值和一个新boolean(true)关联,将被无条件打印出来。 设置报表分页 在菜单编辑Edit中点击New Report Group Wizard 增加一个分组,输入Group name ,然后选择分组的字段,如下 点击Finish完成。 点击菜单View中的Report Groups,对所选择的分组进行设置,选中如下: 用分组来实现来换页,然后选择 start on a new page就可以了。 设置几个文本伸展性 设置band最前面第一个文本属性Transparent 为空, Position type为Fix relative to top,Stretch with overflow 为非空; 下面的文本属性为Transparent 为非空,Position type为Float,Stretch with overflow 为非空。这样的设置就可以自动往下伸展,并使下面的字段也往下移动。 设置中文字体 中文字体不能显示在页面上主要是PDF编码失败,所以,在制作报表的时候一定要明确是否会出现中文(简体或繁体中文),如果会出现中文一定要设置好中文字体,属性中的字体名称Font name一定要选择中文字体,如“黑体”、“宋体”等,PDF字体名称PDF font name 为“STSong-Light”,修改PDF字符集PDF Encoding 中的内容为“UniGB-UCS2-H”。 开发和部署报表图片 在开发中,图片的路径我们以相对路径的形式维护在报表模板中,做法如下: 1、 定义报表参数 设置参数名称(Parameter Name),并设置参数类型(Paramter Class Type)为java.lang.String。在报表模板开发(IReport)中,设置一个默认参数值便于开发测试。 2、 加载报表模板图片 点击工具栏上,在适当位置点击增加图片,并修改图片的Image Expression值,如下: 3、 在web 参数配置的时候配置好参数 在ggreportdescparam中配置参数代码paramCode为“TitleImage”,同报表配置中,严格区分大小写,然后设置默认值类型defaultvaluetype为固定文本类型“0”,并设置默认值defaultvalue为“/jasperreport/a/Winter.jpg”,相对路径为在webapps目录下。 开发和部署子报表 子报表是一个真正的报表,它有自己的数据源,有单独的jasper文件。创建一个子报表就意味着创建一个单独的报表。 1、在报表中增加子报表 将一个子报表连接到父报表也需要确定三件事:如何获得jasper对象来执行子报表,如何将数据传递给子报表,如何给子报表参数设置值。所有的这些信息可以通过子报表属性来Subreport 和 Subreport (Other).确定。 点击工具栏上,在适当的band上点击,跳出子报表创建框,按照提示配置一个子报表。右击band上 的属性Properties,弹出下拉选项框。 在Subreport栏中设置Connection/Data Source Expression 的下拉选择为Use connection expression,带出默认值为$P{REPORT_CONNECTION},不要去修改它。 在Subreport(Other)中设置如何获得子报表的jasper对象,在Subreport Expression Class中选中java.lang.String,在表达式输入子报表的相对路径。 为了可移动子报表,我们使用配置报表参数动态的决定子报表的相对路径。具体配置同图片的配置。 在Subreport(Other)中设置子报表参数,输入子报表参数,如riskClass,在表达式中输入父报表的关联字段。如果关联字段有多个,可以设置多个关联字段。 在子报表中创建riskClass参数,注意与父报表设置的参数名称一致,为避免出错,设置默认值,如下: 在子报表中的Report Query中创建如select * from ggrisk where riskclass=$P{riskClass}的动态SQL。 注意:我上面使用子报表流程是为了便于大家理解,正常流程为,创建子报表,为子报表创建关联参数,再定义子报表动态SQL,再和父报表设置关联关系,这样就不会编译出错。 2、在web 参数配置的时候配置好参数 配置同图片的配置。 如何使用资源文件 有两种方法可以找回本地字符串来插入到JaserReport表达式:你可以用内置的str(“key name”)功能或者用指定的语法$R{key name}。源键被转化成java变量在报表编辑期间,像字段,变量和参数:允许使用任意的名字作为源键,不用遵守java变量的规则(就像这样,你可以插入一个点“.”在这些名字中)。总直,最好不要使用空格“ “字符。这儿是一个表达式例子用来找回本地化字符串: $R{text.paragraph1} 这个表达式能修改与其相关的文本用这个键“text.paragraph1”,使用最合适的变量转化为选择的地区。 使用指定语法$R{key name}在java中也是使用str(“key name”)方法。 WEB部署 Web部署同如意报表的web部署一致,只不过不在需要配置数据集,涉及到JasperReport的web部署,只需要维护三张表,GgReport表,GgReportDescParam表,GgDocument表。我们使用GgReport表中的Flag字段表表明那种报表,1:如意报表 ;2:JasperReport报表。这点需要大家注意,不同的报表,所调用的报表引擎不一样。报表模板文件*.jasper放在webapps\jasperreport目录下,并分组维护。其他配置同如意报表 Demo开发 设计单证 设计单证主要是如何设计好单证用到临时表,并维护好临时表的每一个字段在该单证中的含义,临时表中的字段是一个动态字段,可能会被很多存储过程共用。 开发存储过程 需要复杂的业务需要在存储过程中来完善,好的存储过程,可以优化报表展示速度和减少报表模板开发的复杂度。 注意点:会存在多个单证共用一个临时表,所以在插入报表数据的时候,一定要查一下,试试报表中已经存在相同的taskId的数据了,如果有,就要先删除那些数据。 新增报表 设置报表名称、页面大小等,报表生成之后也可以对其进行设置。 设置报表Band 设置band的高度,如果那个band不需要使用,可以设置高度为0,Split allowed 表示是否允许分割,如果不选中,整个band打印不了,就会打印在下一页。Band的高度设置不需要设置的过大,否则会打印大片的留白。 设置报表样式 定义报表所有的各种样式,如下: 如果这些样式在以前的报表模板中已经定义,只需要把模板文件中的拷贝到你新增的模板中即可。 增加报表分组 需要增加报表分组来实现按字段来强迫换页,配置如下: 选中Start on a New Page,来实现强迫换页,再选中Reset Page Number ,来实现页码重新编号。如果不需要设置分组的空间,可以设置高度为0。 设计报表模板 在开发的时候要注意以下几点: 1、 各个单证需要哪些band来实现它的功能; 2、 文本框伸展的时候会带动它下面的文本框往下流动,当是不能带到它下面的旁边的文本框往下移动,这就需要在中间依靠一个空白文本。如上图的空白文本框。 使用CLOB对象 在java Scriptlet中添加下列方法 import net.sf.jasperreports.engine.*; import java.io.Reader; import oracle.sql.CLOB; public String getCLOBString(CLOB clob)throws JRScriptletException { StringBuffer sb = new StringBuffer(1024); Reader instream = null; try { instream = clob.getCharacterStream(); char[] buffer = new char[(int)clob.length()]; int length = 0; while((length = instream.read(buffer)) != -1) { sb.append(buffer); } } catch(Exception ex) { ex.printStackTrace(); } finally { try { if(instream != null) instream.close(); } catch(Exception dx) { instream = null; } return sb.toString(); } } 在文本框中添加脚本处理 ($P{REPORT_SCRIPTLET}).getCLOBString ($F{ENDORSETEXT}) 注意$F{ENDORSETEXT}是字段名称。 如何设置单证尾部签字部分 如果报表模板不需要支持批量打印,直接可以把签字部分放到lastPageFooter Band上,这样实现起来很简单。但是在批量打印中就不能这样做,需要把签字部分放在分组尾端打印,并合理设置好各band的高度,这样才能做到签字部分在pageFooter Band上面打印。 参考信息 iReport 中引用报表中的变量、参数及字段的书写形式 元素 名称 引用 变量 variablesName $V{ variablesName } 参数 parameterName $P{ parameterName } 字段 filedsName $F{ filedsName } 动态sql SQLSTR $P!{SQLSTR} 资源文件 key name $R{key name} 各个国家语种代码 语种代码 英文名称 中文名称 de German 德语 en English 英语 fr French 法语 ja Japanese 日语 jw Javanese 爪哇语 ko Korean 韩语 zh Chinese 中文 各个国家代码 Country Code Description CN China DE Germany FR France IN India US United States iReport pdf字体和字符集选择 语言 PDF 字体名 简体中文 STSong-Light 繁体中文 MHei-Medium MSung-Light 日语 HeiseiKakuGo-W5 HeiseiMin-W3 韩语 HYGoThic-Medium HYSMyeongJo-Medium 字符集 编码 简体中文 UniGB-UCS2-H UniGB-UCS2-V 繁体中文 UniCNS-UCS2-H UniCNS-UCS2-V 日语 UniJIS-UCS2-H UniJIS-UCS2-V UniJIS-UCS2-HW-H UniJIS-UCS2-HW-V 韩语 UniKS-UCS2-H UniKS-UCS2-H

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档