JasperReport+iReport报表工具详细开发手册
iReport开发使用步骤

开发使用步骤(iReport 4.1.1)一、JasperReport 和iReport的介绍网上有这个软件的详细介绍。
可以搜索下,进一步了解。
这里只是简略介绍。
1、JasperReport 简介l 一个报表是由一个源代码的文件来描述,这个源文件就是由DTD(jasperreport.dtd, version 0.6.3 is listed in Appendix B)来定义的XML标记。
在0.5.3版本中它的源文件扩展名变成了.jrxml; 取代了一般的.xml扩展名。
报表的源代码被编译成jasper文件(扩展名是.jasper)。
l jasper文件是一种预报表,严密的说就像是java的类被封状成的对象。
Jasper文件通过你的应用程序来加载。
它被添加一个数据源的标记从而创建报表,接着它就能以你想要的格式输出(例如:pdf或xls)。
2、iReport 简介iReport也是开源组织中的一款免费软件,其主要作用是用来以可视化的方式设计生成JasperReport 所使用的报表格式文件,因为JasperReport 本身并未提供很好的可视化报表设计工具,iReport 的出现正好弥补了这个缺陷。
现在的iReport 的最新版本是4.1.3iReport运行时需要sun java2 SDK 1.5及以上版本,为了能编译我们的报表文件我们需要完整的安装JDK。
2、1、iReport几个重要的概念1)报表的动态对象变量、参数、字段○l字段(Fields):是数据库抽取出来的,希望在报表中出现的数据库内容。
比如一个ID 的所有值。
$F{ filedsName }○2参数(Parameters):这是你的应用需要提供给报表的入口,比如你希望在报表被解释的时候提供Where语句的条件值,那么就可以使用参数(Parameters)。
$P{ parameterName }○3变量(Variables):这是报表中一些逻辑运算的表现,比如统计值。
JasperReports最终用户手册中文版——第二章API 概述

2 API 概述大多数情况下,人们使用JasperReports的类库的时候都只会用到一小部分,并且不会对所有的API有个整体的概念。
在这一章节里让我们近距离的来看一下那些在使用时有重要意义的类和接口。
同时也可以了解在需要使用到JasperReports报表功能的应用程序里怎样使用这些类和接口。
Class dori.jasper.engine.design.JasperDesign从这个类开始介绍是因为这个类的实例为JasperReports生成报表提供原材料。
在JasperReprots使用内部的XML解析器解析了XML报表设计文件后便生成了dori.jasper.engine.design.JasperDesign实例。
如果应用程序不使用XML文件,这个实例的生成也可以通过编程来实现。
在提供源代码的例子里有一个叫做noxmldesign的例子,通过它你可以了解到如何不写XML报表设计文件而动态的生成一个dori.jasper.engine.design.JasperDesign实例。
所有dori.jasper.engine.design.JasperDesign类的实例在被填充和生成报表使用之前已经被编译出来了。
这就是我说它为类库提供原材料的原因。
Class dori.jasper.engine.JasperReport这个类的实例是编译好的报表设计对象。
它只会作为JasperReports报表编译的结果获得,并在填充表格和生成报表时被使用。
为了以后更快速的使用,在通过不通程度的检查和报表元素整理后,这个类库创建了一个临时文件存放包括报表变量表达式、文本域和图形表达式组表达式等所有的报表表达式信息。
这个临时Java源文件可以在两种情况下被编译。
一是在使用中编译,还有一种是被JDK编译。
如果在classpath里没有发现tools.jar e文件,编译器就会通过运行javac.exe来编译这个文件。
JasperReport+iReport高级报表设计实战

JasperReport+iReport高级报表设计实战序言一直以来,报表都是很多项目中一个重要的、不可获取的组成部分。
然而其复杂性和专业性又使得程序员不能够也没时间自己设计属于目前手头正在构建的系统的报表模块;即便设计来了又可能由于通用性等原因不能够应用到下一个系统当中,这就导致了报表类库/组件在市场上的火爆。
典型的例子就是水晶报表,几乎无处不在。
还有一些专门处理中国式报表的组件也陆续出现在软件市场上。
然而遗憾的是,他们中的绝大多数都是要收费的--这也无可厚非,毕竟人都是要生存的。
所以大多数预算不够充裕的程序员都将目光转向了开源软件,而JasperReport就将是第一个进入他们视线中的佼佼者。
然而代码开源不代表我们就可以大大方方的拿来就用了,人家的文档也是要收费的,所以市面上有关于JasperReport 的文档虽然也不少,但大多数都集中在简单应用和介绍基本操作的基础之上。
对于复杂的报表设计并不能提供良好的帮助。
本文将火力集中在相对复杂的报表设计(不包括图片和超连接等对办公系统或过程没有太大用途的页面元素),交叉表的生成等高级报表设计方案。
对于那些基本的操作则留给读者自行体会,相信可以为各位解决一些实际问题。
1 iReport概览 (4)2.1. 准备工作 (5)1.1.1 Database JDBC Connection Datasource. 51.1.2 JavaBean Set Datasource. 72 实战报表设计 (10)2.1 简单的复杂表头报表设计 (12)2.2 交叉表的设计 (13)2.2.1 利用iReport向导生成交叉表架构 (13)2.2.2 偷懒的解决方案 (16)3 结束语 (17)1 iReport概览JasperReport 是JasperSoft公司的一款开源的报表解决方案。
通过JasperReport,用户就可以方便的定制、设计、生成项目所需要的各种报表。
图示ireport中使用javabean作数据源开发基于jasperreports报表过程

图示ireport中使用javabean作数据源开发基于jasperreports报表过程图示ireport 中使用javabe an作数据源开发基于jasperreports报表过程——学习笔记系列之ireport起步xmlin本文不讲原理,因为网上的资源很多,本文以一个简单的日销售报表为例,记录在 ireport 中使用 javabe an 作数据源开发基于 jasperreports 报表过程 .一.准备工作1. 正确安装 jdk2. 到去下载 ireport, 本文使用 1.3.1 版本,解压 iReport 在任意目录,解压后的文件里面有一个 iReport.bat ,通过双击运行。
3. 到 /index.html 下载 jasperreport, 本文使用的是 1.3.1 版本,解压到任意目录,开发中需要使用其中的 jasperreports-1.3.1.jar 、 commons-logging-1.0.2.jar 、 commons-collections-2.1.jar ,使用 bean 做为数据源还需要 commons-beanutils-1.7.jar, 如果需要生成 pdf 文件 , 还需要 itext-1.3.1.jar 、 iTextAsian.jar, 如果使用动态编译 jrxml 文件,还需要 commons-digester-1.7.jar 。
二.创建 javabean1. 创建 DailySales.java, 一个简单 VO bean 。
import java.io.Serializable;public class DailySales implements Serializable{private static final long serialVersionUID= 1L;private String productNo;private String productName;private int number;private int money;private int id;public DailySales(String productNo, String productName, int number, int money){this .productNo= productNo;this .productName= productName;this .number= number;this .money= money;}public String getProductNo(){return productNo;}public void setProductNo(String productNo){this .productNo= productNo;}public String getProductName()return productName;}public void setProductName(String productName) {this .productName= productName;}public int getNumber(){return number;}public void setNumber(int number){this .number= number;}public int getMoney(){return money;}public void setMoney(int money){this .money= money;}public int getId(){return id;}public void setId(int id)this .id= id;}}2 .生成数据源import java.util.Arrays;import java.util.Collection;/*** 简单工厂类,取得数据* @author xmlin**/public class DailySalesFactory{//为了在ireport 中能够测试,必须使用static方法public static Collection<DailySales> getBeanCollection() {//数据源的生成,通常调用dao 操作List<DailySales> data = new ArrayList<DailySales>();for (int i = 0; i < 100; i++){data.add(new DailySales("货号"+ i, "产品"+ i, i, i * 100)); }return data;}}三.使用 ireport 开发报表样式1.新建一个项目。
ireport图文教程(超详细)(word文档良心出品)

1下载iReportiReport是一个可视化的报表模板设计工具,使用此工具能方便地对报表进行设计。
在iReport中已经包含了jasperreports在运行时需要的jar 文件,在项目中的lib目录中包含Jasperreports-***.jar即可,其中***为版本号,比如2.0.3。
下载地址:/project/showfiles.php?group_id=64348,此文档编写时版本为2.0.3,如图:点击download出现以下界面:可以看到提供了多种下载包,其中:ØiReport-2.0.3-src.zip:为iReport的源代码ØiReport-2.0.3.tar.gz:为.tar.gz格式,一般用于Linux、Unix等非windows系统ØiReport-2.0.3-windows.installer.exe:为exe格式,一般用于windows系统ØiReport-2.0.3.zip:为zip格式,可以用于各类操作系统本文使用window版本为例,因此下载iReport-2.0.3-windows.installer.exe即可。
2安装iReport安装iReport需要先设置JDK环境,2.0.X版本要求JDK1.5环境(另参考文档)。
如果是windows系统,直接双击安装图标即可。
(如果是下载的ZIP文档,则将其解压到指定的目录,还需运行bin/startup.bat)。
如果是其他系统,比如Linux,Unix等,解压下载的安装文件(如下载的是tar.gz格式,使用tar xvfz iReport-2.0.3.tar.gz进行解压,如下载的zip格式,使用zip命令解压),然后运行bin/startup.sh即可。
以下以在windows上安装为例:A.欢迎界面,点击“N ext >”继续B.阅读license内容,点击“I A gree”继续C.选择安装组件,点击“N ext >”继续D.指定安装路径,点击“N ext >”继续E.指定程序组名称,点击“I nstall”即可F.等待安装过程G.安装结束,点击“F inish”完成在桌面上会出现如此图标:。
JasperReport报表开发说明(深入浅出)

1.报表制作流程实例:我们实现一个简单的JasperReports示例,展现其基本的开发、使用流程。
Jasper Studio是基于Eclipse的报表设计工具(不熟悉Eclipse的看官先去熟悉一下基本知识吧),默认工作区设置为当前用户主目录下的JaspersoftWorkspace文件夹,并且不可更改。
首先,我们创建一个报表工程,本例中命名为DemoProject,然后创建一张新的报表(File --> New–->Jasper Report),就会出现类似下图所示的窗口让我们选择一个模板。
此例我们选Coffee模板,然后点Next。
在接下来的页面里,我们给报表模板起个名字(Demo1.jrxml)并放在DemoProject的根目录下,然后点Next,于是进入了数据源选择界面:数据源是填充报表的关键,我们必须制定一个数据适配器(Data Adapter),此时我们有三种选择:1、选择“OneEmpty Record - Empty rows”,这样我们就可以专注于报表的设计,而暂时不指定数据源,创建完报表之后,我们随时可以制定别的数据源。
2、选择“SampleDB - Database JBDC Connection”,这是JaspersoftStudio安装时提供的一个示例数据库。
3、点击“New”按钮创建一个新的数据源。
这正是本例要采用的方式,我们将创建一个连接到本机MySql数据库的world的数据源。
首先点击“New”,在弹出的向导页中选择“Database JDBC Connection”,然后点“Next”弹出下图所示的页面:配置好基本的数据库连接信息,点击“Test”测试通过之后,一个数据源就配置好了,我们点击“Finish”结束配置。
初次配置MySql数据源需要在Driver Classpath页面指定MySql驱动包的路径:配置并选择数据适配器之后,我们需要指定数据查询的语句,该语句查询出的字段将直接用于报表中的数据字段。
iReport使用说明

iReport使用说明iReport使用说明1、简介iReport是一个开源的报表设计工具,基于Java开发,可用于创建和各种类型的报表。
本文档旨在提供详细的使用说明,帮助用户熟悉iReport的各项功能并正确操作。
2、安装和配置2.1 和安装Java Development Kit (JDK)2.2 并安装iReport2.3 配置iReport的环境变量3、创建新报表3.1 新建报表项目3.2 设计报表3.2.1 设置报表属性3.2.2 添加数据源3.2.3 设计报表布局3.2.4 添加报表组件3.2.5 设置数据绑定3.2.6 设置报表参数3.2.7 设计报表样式和格式4、数据源管理4.1 添加数据库连接4.1.1 添加JDBC连接4.1.2 添加JNDI连接4.2 添加自定义数据源4.3 设置查询语句4.3.1 使用SQL查询4.3.2 使用JPQL查询5、报表布局5.1 页面设置5.1.1 设置页面大小5.1.2 设置页边距5.1.3 设置纸张方向5.1.4 设置打印设置5.2 添加报表元素5.2.1 文本框5.2.2 图片5.2.3 矩形框5.2.4 表格5.2.5 图表5.2.6 子报表5.2.7 其他组件5.3 设置组件样式和属性5.3.1 设置字体和颜色 5.3.2 设置边框和背景 5.3.3 设置可见性和位置5.3.4 设置超和书签6、数据绑定6.1 绑定静态数据6.2 绑定动态数据6.2.1 单值绑定6.2.2 列表绑定6.2.3 数据表绑定6.2.4 重复区域绑定7、报表参数7.1 添加参数7.1.1 输入参数7.1.2 输出参数7.1.3 多值参数7.2 设置参数默认值7.3 使用参数表达式8、报表样式和格式8.1 设置报表样式8.1.1 标题样式8.1.2 表头样式8.1.3 页脚样式8.1.4 数据行样式 8.1.5 重复区域样式8.2 设置报表格式8.2.1 数字格式8.2.2 日期格式8.2.3 对齐方式8.2.4 条件格式化9、预览和输出报表9.1 预览报表9.2 导出报表9.2.1 导出为PDF9.2.2 导出为9.2.3 导出为Excel9.2.4 导出为Word9.2.5 导出为其他格式附件:2、数据库连接配置文件法律名词及注释:1、JDK:Java Development Kit,Java开发工具包,由Oracle 提供的用于开发Java应用程序的软件包。
JasperReport开发笔记

JasperReport开发笔记1.iReport2.安装1.下载,解压iReport 0.4.0 (推荐src版本)2.确认JDK是1.4以上3.把JDK /lib下的tools.jar拷贝到{ireport_home}/lib目录中3.运行1.对于下载的Binary版本,只能运行/bin/startup.bat2.对于下载的Src版本,可以通过ant iReport运行(先安装ant)3.如果运行startup.bat,出现ng.NoSuchMethodError错误,一般是JDK版本太低。
如果确认已安装了1.4或以上,检查path系统变量,看看有1.3的JRE是不是排在前面(比如安装了Oracle的客户端,往往有1.3的JRE),如果出现Class Not Found,检查classpath。
对于通过ant的方式运行,一般都没什么问题,所以推荐下载src版本4.JasperReport 常见问题1..jrxml vs .jasper▪如果在运行时载入.jrxml, 那么每次调用还得编译, 不如预先编译成.jasper.不过预先编译的jasper,必须用同样版本的JasperReport载入,而且灵活性差些. 不过对于大部分报表,还是预先编译成jasper方便2.如果批量编译jrxml▪用Ant很容易解决▪▪▪▪.....▪▪3.如何使用图片?▪很容易,用Image控件就可以了. 在Image Express 里面可以用String来表示图片的路径, 或者用InputStream, File对象.不过不管用File还是String对象, 都不得不用绝对路径, 这显然很不灵活. 解决办法是,穿入一个$P的参数,表示图片所在的目录,然后用$P和文件名拼接出完整的绝对路径. 更好的方法是用InputStream, 例如this.getClass().getResourceAsStream("logo.jpg") ,这时只要把图片放在当前.jasper所在的目录就可以了,不必考虑什么参数,什么路径了4.显示非数据库字段变量▪显示如运行日期等,可以直接在Text Field里面输入new java.util.Date(), 然后把Pattern设成如mm/dd/yyyy.5.动态控制某些Field是否显示▪每个Static Text, Text Field甚至整个Band的属性里面都有Print When Expression, 比如设成new Boolean(!$P{isDisplay}.equalsIgnoreCase("yes")), 那么只有当参数display的值为yes的时候才显示6.使用Sub Report, 如何使用相对路径▪见1.3, 和使用图片类似, 用InputStream或者传入参数7.Query里面如何使用参数▪$P!{xxx} 或者$P{xxx} 后者只能用于类似PreparedStatement参数绑定, 而前者可替换Sql的任意部分. 在需要动态排序的时候, 前者特别有用. 比如select a,b,c from t order by $P!{orderClause} 不管用$P还是$P!, SQL最终是以PreparedStatement方式执行的, 不必太担心性能问题注意:参数是不能嵌套的, 比如$P{a} =''$P{b}'' , $P{b}=''value'', 不要指望$P{a}能被替换成''value''8.如何使用图表(Graph)▪JasperReport本身没有图表功能, 只有显示Image 的功能(见4.3). iReport里有个Graph向导, 其实质是通过jFreeChart 生成Image. 更另外, 更直接的做法是放一个Image控件, Image Express Class设置成java.awt.Image, 在Image Expression里通过自定义的类返回java.awt.Image对象. 例如''GraphProvider.getImage($P{REPORT_DATASOURCE},title, subtitle.....)''. GraphProvider是自己的类, public static Image getImage(JRDataSource, ....)9.如果显示多个图表▪在一张报表上显示一个图表和显示多个图表是不同的. 假设Query是select name,price,qty from xxx, 第一张图显示name-price, 第二张图显示name-qty, 如果还是按3.8的方法, 第二张图根本显示不出来! 为什么因为传入的是JRDataSource, 而JRDataSource仅仅是对ResultSet的简单封装, 在第一张图处理完后, 游标已经到了eof位置了, 在开始处理第二张图的时候,就必然抛出游标耗尽的异常! 怎么办自己写个JRDataSourceAdapter, 把JRDataSource对象里面的值预先保存到一个Collection (相当于一个Offline的数据集), 然后把这个Collection传个getImage方法. 具体是, 建一个Variable mydate, 类型是java.util.Map, Calculation Type- System, Initial Value Expression是JRDataSourceAdapter.JRDataSource2Map($P{REPORT_DATA_SO URCE},new String[]{"NAME","PRICE","QTY"},new Class[]{ng.String.class,ng.Double.class,ng.Dou ble.class}), JRDataSource2Map是自己写的一个Adapter. 然后在Image的Expression里面换成如''GraphProvider.getImage(mydata,title, other params...), 当然得修改getImage方法5.Export到Excel的问题1.如何去掉报表头等▪直接把不需要的Band删除(把其高度设为0). 如果仅仅是export到Excel的时候不需要报表头, 而输出到PDF等仍然需要保留, 那么使用print when expression, 见4.42.如果让Excel看起来整齐▪不要有空白地方! 首先把所有的Field设成一样高, 对齐! 把所在Band的高度也设成和Field一样高, 让Field正好放入Band. 然后调整Field的宽度, 让每个Field都相邻,没有空隙. 最后,记得设置参数: exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMP TY_SPACE_BETWEEN_ROWS,▪Boolean.TRUE);3.如何保留GridLine▪首先, 设置参数exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_ BACKGROUND, Boolean.FALSE); 然后,把每个Field或者Static Text 框的''Transparent''属性都勾上4.如何使字段名只显示一次▪如果把字段名放在ColumnHead区域, 那么输出到Excel, 会每个Page都显示一遍. 在设计Report时候, 一般会设定Page 大小. 然而对于Excel, 这个Page设定仍然存在,而且往往很讨厌, 因为在Excel里, 通常希望得到连续的数据, 然而Jasper仍然会''自作多情''进行分页. 比如说, 设计JasperReport的时候, 设定page size为Letter, Portrait, 那么输出到Excel的时候每隔大约30行(具体取决于Field的高度), page header, column header, column foot, page foot 会被重复一次, 而且还附带一个高度为0的Excel Row, 表示Page Break的地方. 把字段名放在title band里, 可以解决字段名重复的问题, 当然page header也不要显示了. 如果需要, 可以把title band的print when expression设成只有输出Excel的时候才显示5.为什么Excel里面的数据是从第二行,第B列开始显示的▪因为第一行和第A列分别是用来表示page top margin 和 page left margin的. 对于Excel来说, 纯粹多余. 解决方法是把page margin 设成0. 不过如果这个report还需要以PDF等显示, 那么设成0就不好看了. 最好能动态的改变page margin. 当然,这个改变只能在外部(调用Report的地方) 进行, 在设计Report的时候是无能为力的. 不幸的是, JasperReport类居然没有setMargin的方法,只有getter. 折中的方法只能是reflect了. 代码示意如下: //use reflect to set the private field of JRBaseReport▪ng.reflect.Field margin = JRBaseReport.class.getDeclaredField(▪"leftMargin");▪margin.setAccessible(true);▪margin.setInt(myRpt, 0); margin = JRBaseReport.class.getDeclaredField("topMargin");▪margin.setAccessible(true);▪margin.setInt(myRpt, 0); margin = JRBaseReport.class.getDeclaredField("bottomMargin");▪margin.setAccessible(true);▪margin.setInt(myRpt, 0);6.如何去掉Excel中隐藏的行▪如前说述, 由于page break的关系, Excel中每隔几十行,就有一个高度为0的row, 即使把page botom margin设为0, 把page footer去掉都没有办法. 唯一的解决办法是把page height设为很大. 同5.5一样, 不得不使用reflect:▪ng.reflect.Field pageHeight = JRBaseReport.class.getDeclaredField(▪"pageHeight");▪pageHeight.setAccessible(true);▪pageHeight.setInt(myRpt,Integer.MAX_VALUE);6.文档1.哪里有文档▪JasperReport有份Ultimate Guide, 不过不是免费的, 和jFreeChart一个德行. 不过网上有流传, 写的还可以, 60多页, 不过也没详细到哪里去. 如果下载源代码版, 那么看看自带的Demo也不错. SF的论坛也是问问题的最好地方7.源代码仅供参考(reportProvider--一个Servlet, GraphProider, JRDataAdapter都是普通类)/***Title: ReportProviderServlet*Description: Servlet to generate Jasper reports*Copyright: Copyright (c) 2004*Company: ****** @author zephyr* @version 1.0*/package xyz;import net.sf.jasperreports.engine.*;import net.sf.jasperreports.engine.base.*;import net.sf.jasperreports.engine.export.*;import net.sf.jasperreports.engine.util.*;import org.apache.log4j.*;import java.io.*;import java.sql.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class ReportProviderServlet extends HttpServlet{private static Logger log = LogManager.getLogger(ReportProviderServlet.class);//Initialize: Setup DataSourceManagerpublic void init() throws javax.servlet.ServletException{String prefix = getServletContext().getRealPath("/");String file = getInitParameter("data-source-file");DataSourceManager.configure(prefix + file);("initialized successfully!");}//Process the HTTP requestpublic void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{String reportClass = request.getParameter("reportClass");log.debug("Running Report:" + reportClass);boolean isExcelFormat = false;if (reportClass == null){throw new IllegalArgumentException("Jasper Class Unspecified");}String reportFormat =request.getParameter("reportFormat");if (reportFormat == null){reportFormat = "jasperPrint";}try{JasperReport myRpt = JasperManager.loadReport(this.getClass().getResourceAsStream("/jasperReports/" +reportClass + ".jasper"));//set ReprintHeaderOnEachPage=false for Excel FormatisExcelFormat = reportFormat.equalsIgnoreCase("excel");if (isExcelFormat){//use reflect to set the private field of JRBaseReport//No margin for excel format, max pageHeightng.reflect.Field margin = JRBaseReport.class.getDeclaredField("leftMargin");margin.setAccessible(true);margin.setInt(myRpt, 0);margin = JRBaseReport.class.getDeclaredField("topMargin");margin.setAccessible(true);margin.setInt(myRpt, 0);margin = JRBaseReport.class.getDeclaredField("bottomMargin");margin.setAccessible(true);margin.setInt(myRpt, 0);ng.reflect.Field pageHeight =JRBaseReport.class.getDeclaredField("pageHeight");pageHeight.setAccessible(true);pageHeight.setInt(myRpt, Integer.MAX_VALUE);//Don't print group header on each pageif (null != myRpt.getGroups()){for (int i = 0; i < myRpt.getGroups().length; i++){myRpt.getGroups()[i].setReprintHeaderOnEachPage(false);}}}Map params = new HashMap(10);Enumeration enu = request.getParameterNames();while (enu.hasMoreElements()){String key = (String) enu.nextElement();params.put(key,request.getParameter(key).toUpperCase().replaceAll("'", "''"));log.debug(key + "=" + request.getParameter(key));}log.debug("Before Filling");OutputStream httpOut = response.getOutputStream();Connection conn = DataSourceManager.getConnection(request.getSession());JasperPrint rptPnt = JasperManager.fillReport(myRpt, params, conn);conn.close();if (reportFormat.equalsIgnoreCase("jasperPrint")){response.setContentType("application/octet-stream");JRSaver.saveObject(rptPnt, httpOut);}else if (reportFormat.equalsIgnoreCase("pdf")){response.setContentType("application/pdf");response.setHeader("Content-Disposition","attachment;filename=\"" + reportClass + ".PDF\"");JasperManager.printReportT oPdfStream(rptPnt, httpOut);}else if (reportFormat.equalsIgnoreCase("excel")){response.setContentType("application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename=\"" + reportClass + ".XLS\"");JRXlsExporter exporter = new JRXlsExporter();exporter.setParameter(JRExporterParameter.JASPER_PRINT, rptPnt);exporter.setParameter(JRExporterParameter.OUTPUT_STREA M, httpOut);exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_ EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAG E_PER_SHEET,Boolean.FALSE);exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PA GE_BACKGROUND,Boolean.FALSE);exporter.exportReport();}else if (reportFormat.equalsIgnoreCase("html")){JRHtmlExporter exporter = new JRHtmlExporter();response.setContentType("text/html");Map imagesMap = new HashMap();request.getSession().setAttribute("IMAGES_MAP", imagesMap);exporter.setParameter(JRHtmlExporterParameter.IMAGES_M AP,imagesMap);exporter.setParameter(JRHtmlExporterParameter.IMAGES_U RI,"image.jsp image=");exporter.setParameter(JRExporterParameter.JASPER_PRINT, rptPnt);exporter.setParameter(JRExporterParameter.OUTPUT_STREA M, httpOut);exporter.exportReport();}log.debug("Report Exported");}catch (Exception ex){log.error("Error Occured", ex);}}}/***Title: JRDataSourceAdapter*Description: Converting JRDataSource to Mapped ArrayList*Copyright: Copyright (c) 2004*Company: ****** @author zephyr* @version 1.0*/package xyz;import net.sf.jasperreports.engine.*;import net.sf.jasperreports.engine.design.*;import java.util.*;public class JRDataSourceAdapter{public static Map JRDataSource2Map(JRDataSource dataSource, String[] fieldNames,Class[] fieldClasses) throws JRException{HashMap result;if (fieldNames.length != fieldClasses.length)throw new JRException("Number of Field Name & Class unmatch");}JRDesignField[] fields = new JRDesignField[fieldNames.length];result = new HashMap(4);for (int i = 0; i < fieldNames.length; i++){fields[i] = new JRDesignField();fields[i].setName(fieldNames[i]);fields[i].setValueClass(fieldClasses[i]);result.put(fieldNames[i], new ArrayList());}do{for (int i = 0; i < fields.length; i++){Object value = dataSource.getFieldValue(fields[i]);((ArrayList) result.get(fields[i].getName())).add(value);}}while (dataSource.next());return result;}}/***Title: GraphProvider*Description: Generate JFreeChart Image*Copyright: Copyright (c) 2004*Company: ***** @author zephyr* @version 1.0*/package xyz;import net.sf.jasperreports.engine.*;import net.sf.jasperreports.engine.design.*;import net.sf.jasperreports.engine.export.*;import org.jfree.chart.*;import org.jfree.chart.axis.*;import org.jfree.chart.plot.*;import org.jfree.data.*;import java.awt.*;import java.awt.image.*;import java.io.*;import java.util.*;public class GraphProvider{public static Image getImage(Map dataSource, String fieldNameX, String fieldNameY,String chartName, String titleX, String titleY, boolean isBarChart, int imageWidth,int imageHeight) throws JRException{JRDesignField fieldX = new JRDesignField();fieldX.setName(fieldNameX);fieldX.setValueClass(ng.String.class);JRDesignField fieldY = new JRDesignField();fieldY.setName(fieldNameY);fieldY.setValueClass(ng.Double.class);ArrayList periods = (ArrayList) dataSource.get(fieldNameX);ArrayList values = (ArrayList) dataSource.get(fieldNameY);DefaultCategoryDataset categoryDs = new DefaultCategoryDataset();for (int i = 0; i < values.size(); i++){Object obj = values.get(i);double dataValue = 0;if (obj != null){dataValue = ((Double) obj).doubleValue();}categoryDs.addValue(dataValue, null, (String) periods.get(i));}JFreeChart c = null;if (isBarChart){c = ChartFactory.createBarChart(chartName, titleX, titleY, categoryDs,PlotOrientation.VERTICAL, false, false, false);}else{c = ChartFactory.createLineChart(chartName, titleX, titleY, categoryDs,PlotOrientation.VERTICAL, false, false, false);}c.getTitle().setFont(new Font("Arial", Font.BOLD, 16));NumberAxis axis = (NumberAxis) c.getCategoryPlot().getRangeAxis();axis.setAutoRange(true);TickUnitSource tickUnits = NumberAxis.createIntegerTickUnits();axis.setStandardTickUnits(tickUnits);return (c.createBufferedImage(imageWidth, imageHeight));}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.1. IREPORT 入门........................................................................................................................5 3.1.1. 常用工具.........................................................................................................................5 3.1.2. 设置数据源........................ห้องสมุดไป่ตู้............................................................................................7 3.1.3. 新建空报表.....................................................................................................................7 3.1.4. 设置查询 SQL ................................................................................................................7 3.1.5. 设计报表.........................................................................................................................8
2. 安装 .................................................................................................................................................3
4. 提高篇............................................................................................................................................13
4.1. 报表的结构 ...........................................................................................................................13 4.2. 变量、参数及字段 ...............................................................................................................14 4.3. 图形报表 ...............................................................................................................................16
1. 简介 JasperReport 是 Java 语言编写的报表引擎,它能解析.jasper 报表定义
文件,并最终产生面向最终用户的报表界面。 iReport 是一个可视化的报表模板设计工具,使用此工具能方便地对报表进
行可视化设计,设计结果保存成.jrxml 的 XML 文件,并能够把.jrxml 编译 成.jasper 二进制文件供 JasperReport 报表引擎解析、显示。
JasperReport+iReport 报表工具详细开发手册
(V 1.1)
2009-8-10
目录
1. 简介 .................................................................................................................................................3
2.1. IREPORT 安装........................................................................................................................3 2.2. JASPERREPORT 安装............................................................................................................4
5. 技巧篇............................................................................................................................................28
5.1. 在 WEB 中显示数据不分页显示 ........................................................................................28 5.2. 没有数据时仍然显示标题 ...................................................................................................28 5.3. 数字型字段值到字符的转换 ...............................................................................................28
本文档编写是基于以下版本: jasperreports-3.5.2 iReport-nb-3.5.2
4.3.1. 注意事项.......................................................................................................................16 4.3.2. 饼图(Pie) .....................................................................................................................16 4.3.3. 3D 饼图(3D Pie) ........................................................................................................17 4.3.4. 柱状图(Bar).................................................................................................................17 4.3.5. 3D 柱状图(3D Bar)....................................................................................................19 4.3.6. 堆栈柱状图(Stacked Bar)......................................................................................19 4.3.7. 曲线图(Line)...............................................................................................................19 4.3.8. 面积图(Area)..............................................................................................................20 4.3.9. 仪表盘(Meter) ...........................................................................................................20 4.3.10. 温度计(Thermometer)..........................................................................................21 4.3.11. 气泡图(Bubble).........................................................................................................22 4.4. 报表导出 ...............................................................................................................................23 4.4.1. PDF 格式导出 ..............................................................................................................23 4.4.2. EXCEL 格式导出.........................................................................................................24 4.5. 调用 JAVA 代码....................................................................................................................26