iReport使用教程(示例教程)

在使用ireport的过程中,因为各种功能都要百度,但是大家使用的例子又千差万别让人很苦恼,所以用一个简单例子贯穿的展示一下ireport的常见功能。

iReport简介

说到iReport不得不先介绍Jasperreport,Jasperreport是一个报表制作程序,用户需要按照它制定的规则编写 一个XML文件,然后得到用户需要输出的格式文件。它支持输出的文件格式包括PDF,HTML,XML,XLS,CVS等等。而iReport就是一个制 作Jasperreport的XML文件的可视化开发工具。只是一个UI。

我使用的是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生成pdf打印的实例代码

    先下载ireport版本 ,我下载的是 iReport-5.0.4  编辑模板  employees_identity_print_templet @RequestMapping("printEmpPdf") @ResponseBody public Result printEmpPdf(HttpServletRequest request,HttpServletResponse response, Parameter parameter){ Result result=Result.

  • 关于解决iReport4.1.1无法正常启动或者闪退或者JDK8不兼容的问题

    公司里面再用iReport的时候,我也安装使用了. 但是面临一个问题 我的iReport始终不能打开,困绕了老半天  但是是软件问题不方便问大佬自己研究了老大一会儿 加载之后就闪退了!!! 最后还是老大还是跟我说了需要JDK1.7才可以,我的电脑安装了两个jdk 一个是1.7的一个是1.8的   平时用的1.8  所以我开发的时候一直都是1.8  突然换成1.7的很麻烦 所以经过这两天的研究 我更改了配置文件,使得它单独强制的去使用jdk1.7来启动 1.我们打开\iReport-4.1.1\e

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

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

  • PHP邮箱验证示例教程

    在用户注册中最常见的安全验证之一就是邮箱验证.根据行业的一般做法,进行邮箱验证是避免潜在的安全隐患一种非常重要的做法,现在就让我们来讨论一下这些最佳实践,来看看如何在PHP中创建一个邮箱验证. 让我们先从一个注册表单开始: <form method="post" action="http://mydomain.com/registration/"> <fieldset class="form-group"> <lab

  • Python Flask基础教程示例代码

    本文研究的主要是Python Flask基础教程,具体介绍如下. 安装:pip install flask即可 一个简单的Flask from flask import Flask #导入Flask app = Flask(__name__) #创建一个Flask实例 #设置路由,即url @app.route('/') #url对应的函数 def hello_world(): #返回的页面 return 'Hello World!' #这个不是作为模块导入的时候运行,比如这个文件为aa.py,

  • 详解Java 10 var关键字和示例教程

    关键要点 Java 10引入了一个闪亮的新功能:局部变量类型推断.对于局部变量,现在可以使用特殊的保留类型名称"var"代替实际类型. 提供这个特性是为了增强Java语言,并将类型推断扩展到局部变量的声明上.这样可以减少板代码,同时仍然保留Java的编译时类型检查. 由于编译器需要通过检查赋值等式右侧(RHS)来推断var的实际类型,因此在某些情况下,这个特性具有局限性,例如在初始化Array和Stream的时候. 如何使用新的"var"来减少样板代码. 在本文中,

  • 部署Django到阿里云服务器教程示例

    基于Ubuntu16.04 + Python3 + nginx + mysql + Django 接下来先安装这些必要的环境,这些操作都是在你已经购买了阿里云服务器.并且在本地你已经搭建好了Django博客.现在我们所做的就是把本地的环境在阿里云的服务器上重新搭一遍. 这里先简单的说一下阿里云服务器,我自己买的是云服务器ESC,需要配置一下安全组规则,就是端口,按下图配置即可,最重要的是22和88端口. 然后就是我们的服务器在实例里,我的是Ubuntu16.04,要部署到阿里云上点击远程连接,第

  • C# 多进程打开PPT的示例教程

    1.背景 PPT文件打开和操作是在一个进程中进行的,如果对多个PPT进行操作,PowerPoint进程默认会以阻塞的方式依次进行,如果打开的PPT特别大(比如超过1GB)很容易造成PPT无响应,这样几乎所有的PPT操作都无法进行. 解决PPT无响应的一种方式是定时检测PPT进程(POWERPNT.exe)是否无响应,如果无响应就将POWERPNT.exe进程Kill掉,重新打开PPT.这种方式并不能解决需要多个PPT操作的问题,如果多个PPT文件都很大,操作多个PPT会频繁出现PPT无响应的情况

  • C语言编程动态内存开辟实现升级版通讯录教程示例

    目录 前言 一.存放联系人信息 二.通讯录初始化 三.增加联系人 四.销毁通讯录 后记 前言 所谓动态内存开辟的通讯录,就是我需要多少联系人,就给多少联系人,防止给定一个联系人上限,需要增加联系人无法扩容,而联系人没有上限那么多又会造成内存浪费. 本文继之前的静态通讯录作出改进,有兴趣的同学可以看看之前的文章:C语言实现静态通讯录 一.存放联系人信息 这里是用struct PeoInfodata结构体指针指向通讯录,而不再直接 struct PeoInfo data[Max] 用结构体数组定义通

  • MySql数据类型教程示例详解

    目录 1.简要概述 2. MySQL数据类型详解 1) 字符串类型 2) 整数类型 3)浮点数类型 4)日期/时间类型 1.简要概述 为什么要开通MySQL这个学习板块呢?因为这是一名数据分析师必要的一项技能.分析数据什么最重要?当然是数据,既然如此!在数据呈现爆发式增长的年代,怎么能够不学学数据库呢?其实这也是很多读者朋友希望看到的,也是他们建议我写的. 难者不会,会者不难!其实网上很多MySQL的总结文章,不可否认,知识点写的都很全,但是呢!这个只是会使用MySQL数据库的朋友的一个查询手册

  • java开发SpringBoot参数校验过程示例教程

    目录 为什么需要参数校验 SpringBoot中集成参数校验 第一步,引入依赖 第二步,定义要参数校验的实体类 常见的约束注解如下: 第三步,定义校验类进行测试 第四步,体验效果 自定义参数校验 第一步,创建自定义注解 第二步,自定义校验逻辑 第三步,在字段上增加注解 第四步,体验效果 分组校验 第一步:定义分组接口 第二步,在模型中给参数分配分组 第三步,给需要参数校验的方法指定分组 第四步,体验效果 小结 大家好,我是飘渺. 前几天写了一篇SpringBoot如何统一后端返回格式?老鸟们都是

  • python创建模板文件及使用教程示例

    目录 写作思路 1.模板的定义 2.如何利用模板生成多个文件 运行结果 写作思路 1.模板的定义 2.如何利用模板生成多个文件 在很多情况下,我们会创建出很多样式相似甚至是相同的类文件,比如在Android文件创建的时候(由于Android Studio已经被我删除很久了,就没法实体展示).Visual Studio创建继承自虚方法的时候,创建出来的文件都已经自带了一些基础格式和基础方法 基于上述需求,有了利用模板类创建文件的功能 1.模板的定义 """ create in

  • PyQt5使用mimeData实现拖拽事件教程示例解析下

    目录 实现思路 1.简要介绍QMimeData 2.QMimeData的用例1 在QT实现外部文件拖拽并展示 3.QMimeData的用例2 两个QListWidget之间的item交换 系列文章: PyQt5使用mimeData实现拖拽事件教程示例解析上 实现思路 1.简要介绍QMimeData 2.QMimeData的用例1:在QT实现外部文件拖拽并展示 3.QMimeData的用例2:两个QListWidget之间的item交换 两个用例的实现效果如下: 1.简要介绍QMimeData 关

随机推荐