iReport使用指南及常见功能示例详解

目录
  • 报表结构
  • 数据源
  • 示例
    • 3.1 简单示例
    • 3.2 分组示例
    • 3.3 子表方式分组查看
    • 3.4 图表示例
      • 3.4.1 饼图
      • 3.4.2 柱状图
    • 3.5交叉报表

在使用ireport的过程中,因为各种功能都要百度,但是大家使用的例子又千差万别让人很苦恼,所以用一个简单例子贯穿的展示一下ireport的常见功能。
我使用的是iReport 3.5.1,使用的示例数据表如图:
sales表:(人名、大致结构来自帆软电子文档,如有雷同,无意冒犯)


sellers表:


下面开始介绍:

报表结构

左边是view区,联系着主设计区中的各个band区域的数据,以及参数、变量等。中间是主设计区,通过拖拽控件面板可以在此区域进行设计,有三种模式:设计(Designer)、源码(Xml)、预览(Preview),设计模式是可视的,源码方式可以直接在上修改,预览是对设计好的报表样式进行预览,也是一个编译的过程;右边是控件面板和属性面板,可以在此使用控件和设置属性。
JasperReport有三个方式来保持数据:Field、Paramrter、Variables。
一般情况下,Field是用作保存从数据源取出来的数据,用法是

Parameter是用来占位—我们在设计时往往不知道具体的值,那么用一个参数来占住它们的位置,在执行时,从程序或者数据库中传递对应的参数过来,从而实现一个动态的过程,用法是

Variables是变量,可以将变量用于TextFild表达式中,也可以设置它的属性,使它具有一些功能,如求和,求平均数等,用法是

数据源

ireport提供很多种数据源的连接方式,
点上方的数据库标识就可以设置数据库,下方的数据标识用来写SQL语句获取数据。

我们这里选择jdbc数据连接,mysql连接语句,数据库名称是test

test一下是否连通,输入数据库密码以后,如果成功会出现提示:

示例

3.1 简单示例

首先连接数据库表sales:

点击ok,这时左侧view窗口的field区域就得到了取到的数据:

这时,在主设计区域拖拽静态文本控件:

在column header区域添加列名,然后拖动左侧的field字段到detail域相应的列名下:


3.2 分组示例

有时候我们需要分组来观察数据,这时就需要group,我们以区域id来分组,需要注意的是,如果使用group分组,需要在一开始的sql语句中加上order by语句,否则ireport是不会自动分组的。

右键添加一个分组:

接下来会有一个向导,我们根据向导一步步操作:

然后下一步,完成。

3.3 子表方式分组查看

如果不想在sql语句中增加order by语句,那么可以使用子表的方式进行分组查看,例如我想在父报表master.jasper中查看子报表sub_report.jasper的信息,需要用到销售情况表sales和员工情况表sellers以及子报表控件和一个参数 area_id。
首先建立子表员工信息表sub_report.jasper,新建一个参数,作为连接两个表的桥梁:area_id,参数的属性设置如图

主要是要把parameter class设置成与数据库表中同样的类型以防出错。

然后为sub_report绑定数据库表,此时需要注意SQL语句中需要包含我们设定的参数 $P{area_id}

接下来,我们preview一下,这时需要给一个参数测试,假使我们给定1,结果如图:

这说明分组已经成功,我们下一步需要把子表与父表连接起来。
同样需要新建一个报表文件master.jasper,为方便查看,将区域名称拖入detail区域备用。

拖拽子表控件,根据向导完成子表属性设置
(1)选择已有子表,注意是选择编译后的文件,sub_report.jasper,而非sub_report.jrxml。如果先建父表,在这里选择创建子表,按照向导创建子表,流程如上。

(2)使用内建连接参数表达式

(3)设定参数值为本报表中已存在的field域中的$F{area_id}

(4)存储子表表达式,事实上,我将子表和父表已经放在同一个文件夹中所以不必使用绝对路径法,只需存储一个路径名称即可

完成,运行一下:


3.4 图表示例

3.4.1 饼图

针对 Pie图表类型,有三个表达式需要我们输入:Key,Value 和 Label。表达式 Key 允许你标识 Pie 图里的一块。如果 Key 的值出现重复, 那么 Label 和 Value的值会关联起来用来覆盖 Key 的值。一个 Key 值不能为 null。Value 的表达式值指定这个Key 的数字值。Label 表达式的值允许你为并图中每一块指定一个标签。这个表达式的值是可选的,同时默认值为 key=value
首先拖动图表控件,ireport支持多种图表,因为示例的数据比较简单,我们就只说饼图和柱状图。


放好饼图以后,右键chart data,设置图表属性

这里需要注意的是,value是用来表述你划分饼图关键词的值,本例中,我们根据售货员来销售的苹果汁来划分饼图,那么key就是售货员,他的“值”,也就是苹果销售量就是value,value一般要求是数字类型。

如果我们将label表达式换成$F{apple},就会是如下效果:

个人认为还是后者比较直观。

3.4.2 柱状图

过程和饼状图一样,效果如下:

显然更复杂的数据比较能体现到他的用处。

3.5交叉报表

有时候我们不仅需要纵向比较数据,也需要同时横向进行比较,这就用到了交叉报表。
交叉报表需要用到空间crosstab
我们新建一个报表文件CrosstabTest,统计一下不同区域苹果汁的销售情况,绑好数据表后,拖拽交叉报表控件,根据向导设置:
首先选择主报表数据集:

然后,设定行参数,我们选择区域id作为分组依据,group2暂时不用。

接下来是列参数,选择销售人员作为分组依据。

然后是主区数据,我们主要是看不同区域不同销售人员苹果汁的销售情况所以选择apple,由于是计数,fuction选择count即可。

最后是布局,crosstab控件会自动带行总数列总数,可自选。

完成:

不在该销售区域的会被标记为0.

此外,iReport还有获取当前时间,获取页数等小工具可供使用,这些工具都是基于TextField可以更改表达式进行定义。当模板文件编译后,可放至程序中使用,并进行参数传递。

这是我这一段对ireport的摸索,因为数据简单,很多问题还没有发掘出来,有错误和不足的地方欢迎一起讨论改正。

(0)

相关推荐

  • ireport数据表格报表的简单使用

    如果出现ireport打不开的问题正常都是因为JDK版本太高了,百度下如何简单,很容易的 首先:文件->new,选择Blank A4,Open this template 2.取个名字,选择下保存的位置,点击完成 3.此时新模板已经打开,下面我们开始介绍下模板的各部分是什么 4.设置连接驱动 第一步:选择new 第二部:选的Datebase JDBC Connection 第三步: 好了就点击save,会自动选中你刚建的数据源,下面编写SQL语句获取数据库的数据 5.编写sql语句 6.报表页面

  • iReport简单使用方法图文教程

    iReport是一个能够创建复杂报表的开源项目,它100%使用Java语言编写,是目前全球最为流行的开源报表设计器,由于它丰富的图形界面,你能够很快的创建出任何一种你想要的报表. iReport 是为JasperReports Library和JasperReports Server设计的报表可视化设计器. iReport的遵循AGPL自由开源协议,在SourceForge.net开源社区发布 . 根据iReport和Jasper Studio的维护公告,自iReport版本5.5.0之后,终止

  • Ireport的安装与使用教程

    Ireport的安装及使用 一. 安装ireport 1.点击安装包,可以一直点击下一步,安装完成. 2.安装完成后,要在如下安装目录下添加ojdbc14.jar. 3.数据源的添加和修改 (1)进入ireport,点击如下位置,可以添加数据源. (2)选择JDBC数据连接方式.选择第一个,点击下一步. (3)在如下界面中,编辑所要连接的数据库.在填写password时,右侧的save password要勾选上,这样你在以后每次需要连接数据库时,不用每次都要输入数据库密码了. **(注意)**在

  • iReport使用教程(示例教程)

    在使用ireport的过程中,因为各种功能都要百度,但是大家使用的例子又千差万别让人很苦恼,所以用一个简单例子贯穿的展示一下ireport的常见功能. iReport简介 说到iReport不得不先介绍Jasperreport,Jasperreport是一个报表制作程序,用户需要按照它制定的规则编写 一个XML文件,然后得到用户需要输出的格式文件.它支持输出的文件格式包括PDF,HTML,XML,XLS,CVS等等.而iReport就是一个制 作Jasperreport的XML文件的可视化开发工

  • 非常全面的IReport的使用教程

    目录 简介 安装环境 版本 注意事项 百度云下载地址 基本操作 新建 页面布局 style样式 中文支持必备 比较常用的属性 基础控件 Break:分页符 Ellipse.Round Rectangle.Line.Rectangle:图形 Static Text:静态文本 Text Field:文本域 Image:图片 Barcode:条形码 连接数据库-使用table与subreport 导入驱动 创建连接 编辑sql语句 主查询 子查询(较难) 子模板subreport 简介 iReport

  • iReport使用指南及常见功能示例详解

    目录 报表结构 数据源 示例 3.1 简单示例 3.2 分组示例 3.3 子表方式分组查看 3.4 图表示例 3.4.1 饼图 3.4.2 柱状图 3.5交叉报表 在使用ireport的过程中,因为各种功能都要百度,但是大家使用的例子又千差万别让人很苦恼,所以用一个简单例子贯穿的展示一下ireport的常见功能. 我使用的是iReport 3.5.1,使用的示例数据表如图: sales表:(人名.大致结构来自帆软电子文档,如有雷同,无意冒犯) sellers表: 下面开始介绍: 报表结构 左边是

  • RocketMQ实现随缘分BUG小功能示例详解

    目录 正文 实现过程 生产者: 正文 以前公司的产品已经上线20多年了,主要是维护,也就是改bug.每周我们Team会从Jira上拿我们可以改的bug,因为每个团队负责的业务范围不一样,我们团队只能改我们自己业务范围的.这样每周大概有20个左右的新bug,假如团队一共10个人,那么均分就是每人两个,改完下班. 但是这BUG肯定有难有简单,大家肯定都愿意改简单的,在家办公,任务量完了不就等于放假么.开始是自己给自己抢,就忒卷,是欧美项目,所以客服晚上报出来的bug多.有的哥们早上5点起来看有没有新

  • vue3使用自定义指令实现el dialog拖拽功能示例详解

    目录 实现el-dialog的拖拽功能 通过自定义指令实现拖拽功能 实现拖拽功能 使用方式 实现el-dialog的拖拽功能 这里指的是 element-plus 的el-dialog组件,一开始该组件并没有实现拖拽的功能,当然现在可以通过设置属性的方式实现拖拽. 自带的拖拽功能非常严谨,拖拽时判断是否拖拽出窗口,如果出去了会阻止拖拽. 如果自带的拖拽功能可以满足需求的话,可以跳过本文. 通过自定义指令实现拖拽功能 因为要自己操作dom(设置事件),所以感觉还是使用自定义指令更直接一些,而且对原

  • 使用纯JavaScript封装一个消息提示条功能示例详解

    目录 介绍 思路&布局 操作逻辑 完整代码 介绍 一个类似Element UI.Ant-Design UI等 UI 框架的消息提示功能,方便在任何网页环境中直接调用函数使用:区别在不依赖 js 及 css 引用,而是使用纯 js 进行封装实现,代码更精简,同时保持和 UI 框架一样的视觉效果(可自行修改成自己喜欢的样式) 代码仓库 在线预览效果(点击[登录].[点击复制]按钮时触发提示效果) 思路&布局 先来写单个提示条,并实现想要的过渡效果,最后再用逻辑操作输出节点即可:这里不需要父节点

  • react echarts tree树图搜索展开功能示例详解

    目录 前言 最终效果 版本信息 核心功能: 关键思路: 附上代码 数据data.js 功能: TreeUtils 总结: 前言 umi+antd-admin 框架中使用类组件+antd结合echarts完成树图数据展示和搜索展开功能 最终效果 版本信息 "antd": "3.24.2", "umi": "^2.7.7", "echarts": "^4.4.0", "echart

  • 实现shallowReadonly和isProxy功能示例详解

    目录 一.实现shallowReadonly (一)单元测试 (二)代码实现 (三)额外的单测 二.实现isProxy (一)单元测试 (二)代码实现 一.实现shallowReadonly (一)单元测试 // src/reactivity/tests/shallowReadonly.spec.ts import { isReadonly, shallowReadonly } from '../reactive'; describe('shallowReadonly', () => { it(

  • Springboot Vue实现单点登陆功能示例详解

    目录 正文 简单上个图 先分析下登陆要做啥 怎么落实? 上代码 接口: token生成部分 刷新token 验证token 正文 登陆是系统最基础的功能之一.这么长时间了,一直在写业务,这个基础功能反而没怎么好好研究,都忘差不多了.今天没事儿就来撸一下. 以目前在接触和学习的一个开源系统为例,来分析一下登陆该怎么做.代码的话我就直接CV了. 简单上个图 (有水印.因为穷所以没开会员) 先分析下登陆要做啥 首先,搞清楚要做什么. 登陆了,系统就知道这是谁,他有什么权限,可以给他开放些什么业务功能,

  • laravel如何开启跨域功能示例详解

    前言 本文主要给大家介绍了关于laravel开启跨域功能的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 跨域的请求 出于安全性的原因,浏览器会限制 Script 中的跨域请求.由于 XMLHttpRequest 遵循同源策略,所有使用 XMLHttpRequest 构造 HTTP 请求的应用只能访问自己的域名,如果需要构造跨域的请求,那么开发者需要配合浏览器做出一些允许跨域的配置. W3C 应用工作组推荐了一种跨资源共享的机制,这种机制让 Web 应用服务器能支持跨

  • SQL Server中row_number函数的常见用法示例详解

    一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是ROW_NUMBER()函数的语法实例: select *,row_number() over(partition by column1 order by column2) as n from tablename 在上面语法中: PARTITION BY子句将结果集划分为分区. ROW_NUMBER()函

  • vue+element实现下拉菜单并带本地搜索功能示例详解

    需求: 后台返回数组对像,前端组合成数组,根据name组合成一个个数组并把后台返回的值当成一个children推入数组,在数组中自定义属性备份数据防止搜索的时候改变原数组使得数组无法回退 这里是用的vuex存储,因为多个页面使用同一个接口;所以没必要重复请请求 src\store\module\metadata.js /* * @Author: your name * @Date: 2021-09-02 15:46:45 * @LastEditTime: 2021-09-16 17:39:53

随机推荐