ireport的使用

雨燕双飞 提交于 2020-01-10 04:16:39

ireport的使用

什么是JasperReports和iReport?

  • JasperReport本身是开发报表的一个格式非常复杂的XML文件,并且真实中项目的需求是千变万化的,不可能完全写Java代码去开发它;事实上,如果不使用可视化工具的话,根本就无法开发它。所以JasperReport为我们提供了一个可视化的辅助工具,即iReport。
  • iReport是为JasperReports设计的强大的,直观的,易于使用的可视化报表设计器,采用纯Java开发。

一,简单创建PDF模板

1.1 安装ireport

iReport-Designer for JasperReports下载地址: https://sourceforge.net/projects/ireport/

注意:

  • iReport-Designer不支持Java8的环境,所以只能使用jdk1.7

问题:

  1. iReport-Designer下载完打不开

    找到目录下 /ireport/etc/ireport.conf 文件,找到被注释的#jdkhome=“XXX/jdk”, 删除注释,修改为自己的jdk路径

    # ${HOME} will be replaced by user home directory according to platform
    default_userdir="${HOME}/.${APPNAME}/5.6.0"
    default_mac_userdir="${HOME}/Library/Application Support/${APPNAME}/5.6.0"
    
    # options used by the launcher by default, can be overridden by explicit
    # command line switches
    default_options="-J-Xms256m -J-Xmx512m -J-Dorg.netbeans.ProxyClassLoader.level=1000 -J-XX:MaxPermSize=512m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dnetbeans.exception.report.min.level=99999 "
    # for development purposes you may wish to append: -J-Dnetbeans.logger.console=true -J-ea
    
    # default location of JDK/JRE, can be overridden by using --jdkhome <dir> switch
    jdkhome="D:\Program Files\Java\jdk1.7"
    
    # clusters' paths separated by path.separator (semicolon on Windows, colon on Unices)
    #extra_clusters=
    
    

1.2 定义报表

  1. 鼠标移至【New EDSP】,选择【报表定义文件】

    在这里插入图片描述

  • 主处理数据项:指报表中需要遍历显示的数据集合类型,可以是表或复合类型。

  • 辅助数据项:指一些辅助的数据,也可以是表或复合类型。

  • 报表模板:指要生成的报表模板名称(包括路径),默认直接在父目录下,如果父目录下还有子目录,模板配置为:子目录/生成模板名称。

  • 自定义文件名:生成PDF的文件名。

    注意:在报表的接口中一定要勾上【生成类时是否有对应的类】,否则生成的Java文件会报错:获取不到输入参数。
    在这里插入图片描述

点击ID,就会跳转到页面处理类中:
在这里插入图片描述
实现该处理类中的主数据集合getMainDataQueryExecuter(input)和辅助数据getAssistentData(input)方法

1.3 配置交易和数据库

创建报表交易的步骤跟创建联机的一样,只不过在流程中不是创建【服务】,而是【报表】。
在这里插入图片描述
配置数据库

--报表视图交易
select * from app_transaction
-- 报表控制表
select * from app_report 

交易表:
在这里插入图片描述
报表控制表:
在这里插入图片描述

1.4 生成报表模板

右键刚创建的报表文件,选择【生成报表模板】,就会生成一个 .jrxml 的文件,我们要做的PDF就是由这个jrxml生成的。
在这里插入图片描述

1.5 Eclipse关联ireport

首先,在IDEA工具栏找到【Window】->【Preferences】:
在这里插入图片描述

其次,找到【General】->【File Associations】
在这里插入图片描述

再关联打开*.jrxml文件的软件,即ireport
在这里插入图片描述

点击 .jrxml 文件,就会在ireport中打开以下页面:
在这里插入图片描述

1.6 报表页面结构

  • Title:报表的标题,只在整个报表的第一页的最上面部分显示,除了第一页外,不管报表中有多少个页面也不会出现title中的内容。
  • pageHeader:每页的头部,在每页都会显示一次,显示在页面的上部(如果是报表的第一页,将显示在title下面;否则在所有其他页面的最上端)
  • pageFooter:每页的底部,在每页都会显示一次。
  • Detail:数据明细,在这个band中设计报表中需要重复出现的内容,Detail段中的内容每页都会出现。
  • columnHeader:每列的头部,一般的情况下,我们将表头设置在这里。
  • ColumnFooter:每列的底部,一般的情况下,将整个数据明细汇总信息显示在这里。
  • Summary:表格的合计段,出现在整个报表最后一页中的Detail的后面,一般用来统计报表中某一个或某几个字段的合计值。

1.7 绑定数据

  1. 右键点击Parameters/Fields添加新节点
    在这里插入图片描述

  2. 给新节点设置Java的class类型
    在这里插入图片描述

注意:对于新建Parameters和Fields的自定义类型全称,最后一个.要改成$,Java中已存在的就不需要(String,Integer,List......)
在这里插入图片描述

1.8 数据展示

对于被渲染的数据,需要通过【组件面板】组建一个【Text Field】,然后对其进行编辑
对于静态文本,则需要通过【组件面板】组建一个【Static Text】,写什么就显示什么

  • 参数定义Parameters:$P{节点名称}.xxx
  • 数据集合Fields:$F{节点名称}.xxx
  • 变量定义Variables:$V{节点名称}.xxx

模板:
在这里插入图片描述

注意:【Detail】是数据遍历中会重复出现的内容,数据有多少条,【Detail】的内容就会打印多少遍。

举例:
在这里插入图片描述

1.9 无法显示中文

默认情况下,中文是不会显示在导出的报表中的,此时需要对要显示中文的【Text Field】或【Static Text】中修改属性:

  • pdfFontName:STSong-Light
  • pdfEncoding:UNIGB-UCS2-H
  • isPdfEmbedded:true

导入依赖 iTextAsian:

<!--JasperReports-->
<dependency>
	<groupId></groupId>
    <artifactId></artifactId>
</dependency>
<!--ireport中文字体相关依赖-->
<dependency>
	<groupId></groupId>
    <artifactId></artifactId>
</dependency>

二,展示多数据列表

由于EDSP平台的报表处理类中只接收一个主处理数据项和一个辅助数据项,因此对于多个数据集合,要封装到辅助数据项中。

例如以下需求:
在这里插入图片描述

2.1 新建一个复合类型

新建复合类型(将存放在辅助数据项中)
在这里插入图片描述

2.2 编辑报表模板

在这里插入图片描述

2.3 新建数据集Dataset

右键项目,新建数据集Dataset,对上面每一个数据表格都对于创建一个Dataset
在这里插入图片描述

选择【Create en empty dataset】,设置为创建空数据集
在这里插入图片描述

根据自身需要创建parameter
在这里插入图片描述

再将每一个parameter都设置为List类型
在这里插入图片描述

2.4 将辅助数据项的值传到Dataset

右键表格,选择Edit table datasource
在这里插入图片描述

在【Sub dataset】中选择指定子数据集dataset
在这里插入图片描述

默认datasource expression:

new net.sf.jasperreports.engine.JREmptyDataSource(1)

代表表格只显示一条空记录
应改为:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{head}.getXxx().xxx)

可以简单认为该集合有多少条记录,报表中表格就输出多少行

在Dataset中将我们刚刚创建的Parameter节点跟辅助数据项的数据绑定起来,以便可以传到数据绑定到表格中。
在这里插入图片描述

2.5 定义变量

由于对于java.util.List,获取第index个数据时是使用 .get( index ),因此还需要定义一个自增变量index来作为get()方法的参数,此时就需要用到变量了。
在这里插入图片描述

2.6 在Table中渲染数据

直接渲染:
在这里插入图片描述

数据加工(三目运算符):
在这里插入图片描述

2.7 无数据时问题

注意:当无数据时,默认都不会显示表头信息
在这里插入图片描述

此时需要在ireport中修改表格属性【When no data type】(默认为【blank】,要改为【All sections, no detail】)
在这里插入图片描述

修改后展示结果:
在这里插入图片描述

三,整合前台

前端js代码跟文件下载的js代码基本一致:
在这里插入图片描述

在输出接口中也是返回文件名称:
在这里插入图片描述

由于报表的接口没有返回文件名的方法,因此需要在交易中定义一个方法,设置返回的文件名。
在这里插入图片描述

获取文件的路径名称,再写入到输出的output中。
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!