【JasperReports笔记06】JasperReport报表开发之常见的组件元素(Table、Subreport、Barcode等)

这篇文章,主要介绍JasperReport报表开发之常见的组件元素(Table、Subreport、Barcode等)。

目录

一、基础组件元素

1.1、StaticText

1.2、TextField

1.3、Image

1.4、Break分页

1.5、Rectangle矩形区域

1.6、Ellipse椭圆区域

1.7、Line斜线

1.8、Generic组件(TODO)

1.9、Frame组件(TODO)

1.10、Subreport组件

1.11、Barcode条码组件

1.12、List列表组件

1.13、Chart图表(TODO)

1.14、Crosstab组件(TODO)

1.15、Table表格组件

1.16、Map组件(TODO)

1.17、SpiderChart组件(TODO)

二、复合元素

2.1、PageNumber

2.2、TotalPages

2.3、CurrentDate

2.4、Time


一、基础组件元素

1.1、StaticText

StaticText是Jasper中的一个基础组件,用于表示静态文本内容,它表示的内容在程序运行过程中是不可以改变的,在制作模板文件的时候,就已经固定了文本内容。

1.2、TextField

TextField是一个基础组件,它表示的是一个文本域,可以设置一个表达式对象,例如:Parameters、Fields等,也就是说,TextField文本域组件可以在程序运行过程中,动态的显示文本内容。

1.3、Image

Image是一个图片组件,可以添加多种来源的图片,有下面几种来源:

  • 工作空间中的资源:在工作空间中的元素。
  • 文件系统中的绝对路径:只是快速测试,实际报表中不会使用。
  • URL资源:一个远程的图片URL地址。
  • 从Jasper服务器中选择的图片。
  • 自定义表达式:使用表达式。
  • 没有图片,只是创建一个图片元素,之后在修改表达式。

显示图片的Base64字符串:

在Java中可以将图片转换成字节输入流,然后将其传入到Jasper模板文件里面。制作图片模板文件,创建一个名称叫做【imageBase64】的Parameters参数,接着添加一个Image组件,设置它的表达式为字节输入流,如下所示:

new ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($P{imageBase64}.getBytes()))

模板文件设置:

制作的图片模板文件如下所示:

在Java代码中将图片转换成Base64字符串存入到Parameters参数里面。

package com.gitcode.demo.web;import com.gitcode.demo.util.JasperReportsUtil;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import sun.misc.BASE64Encoder;import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;/*** @version 1.0.0* @Date: 2023/8/28 21:47* @Author ZhuYouBin* @Description: 图片组件*/
@RestController
@RequestMapping("/api/report")
public class ImageController {@GetMapping("/image")public String imageDemo() throws Exception {ClassPathResource resource = new ClassPathResource("jasper/ImageDemo.jasper");String templatePath = resource.getPath();String fileName = "图片模板文件";// 设置 parameters 参数Map<String, Object> parameters = new HashMap<>();// TODO 读取图片ClassPathResource imageResource = new ClassPathResource("image/demo.jpg");InputStream is = imageResource.getInputStream();byte[] data = null;try {data = new byte[is.available()];is.read(data);is.close();} catch (Exception e) {e.printStackTrace();}// 对字节数组Base64编码BASE64Encoder encoder = new BASE64Encoder();String base64 = encoder.encode(data);parameters.put("imageBase64", base64);// 执行导出操作return JasperReportsUtil.generateReport(templatePath, fileName, "pdf", parameters);}
}

运行结果:

JasperReport中图片的大小固定之后,填充的图片宽度、高度会自动缩放来适应模板文件中图片的宽度和高度。

1.4、Break分页

Break是一个分页组件,它必须放在Detail区域里面,它的作用就是让内容分成两页显示,如下所示:

预览的效果如下所示:

1.5、Rectangle矩形区域

Rectangle是一个矩形区域元素组件,它没有内容,只是一个矩形区域,可以设置背景颜色、边框等样式,如下所示:

运行效果:

1.6、Ellipse椭圆区域

Ellipse是一个椭圆区域,和Rectangle矩形区域类型,都不能设置显示的内容,仅仅是表示一块区域。

运行效果:

1.7、Line斜线

Line是表示的线条元素,线条只有两个方向,分别是:从左上到右下的方向、从左下到右上的方向。

如果你想要一个水平的线条,那么你可以使用StaticText静态文本组件代替,只要设置StaticText组件的高度等于1px,这样从视觉上也就实现了水平线条的效果拉。

1.8、Generic组件(TODO)

TODO,目前我还不了解这个组件。

1.9、Frame组件(TODO)

TODO,目前我还不了解这个组件。

1.10、Subreport组件

Subreport是子报表组件,它可以在一张报表中嵌入另一个报表,从而实现父子报表的功能,父子报表我在之前的文章中有介绍了,可以看下这篇文章【【JasperReports笔记04】如何使用Jasper Studio制作父子报表,并且通过Java + Parameters参数填充模板文件】。

1.11、Barcode条码组件

Barcode是一个条码组件,条码的类型有很多种可以选择:

条码组件是可以使用某种设备,扫描对应的条码就可以读取到条码中保存的数据内容,例如:二维码。Barcode可以设置一个Code Expression代码表达式,这个就是条码所表示的信息内容。

当我们使用微信扫描对应的条码之后,就可以获取到条码中保存的数据信息。

1.12、List列表组件

List是一个列表组件,顾名思义,List是可以显示很多个的一个组件,List组件最外层是一个列表项区域,然后再每一项中可以定义具体的内容,可以放置其他的组件元素,从而制作出复杂的模板文件,如下所示:

双击List组件,此时会进入到列表项的编辑区域,如下:

Java代码中渲染List组件,代码如下:

package com.gitcode.demo.web;import com.gitcode.demo.util.JasperReportsUtil;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @version 1.0.0* @Date: 2023/8/29 22:08* @Author ZhuYouBin* @Description: JasperReport 中的 List 组件*/
@RestController
@RequestMapping("/api/report")
public class ListDemoController {@GetMapping("/list")public String listDemo() throws Exception {ClassPathResource resource = new ClassPathResource("jasper/ListDemo.jasper");String templatePath = resource.getPath();String fileName = "List列表模板文件";// 设置 parameters 参数Map<String, Object> parameters = new HashMap<>();// TODO 模拟数据List<Map<String, Object>> list = this.getData(10);parameters.put("list_data", list);// 执行导出操作return JasperReportsUtil.generateReport(templatePath, fileName, "pdf", parameters);}private List<Map<String, Object>> getData(int num) {List<Map<String, Object>> ansMap = new ArrayList<>();for (int i = 0; i < num; i++) {Map<String, Object> main = new HashMap<>();main.put("name", "名称_00" + i);main.put("type", "类型_00" + i);ansMap.add(main);}return ansMap;}
}

运行效果:

列表项可以自定义,根据实际需求来搞呗!!!

1.13、Chart图表(TODO)

TODO,目前我还不了解这个组件。

1.14、Crosstab组件(TODO)

TODO,目前我还不了解这个组件。

1.15、Table表格组件

Table是一个表格组件,如下所示:

拖拽Table表格到Detail区域之后,设置一下表格的样式,双击选中的表格组件,此时会跳转到Table编辑区域,如下:

表格模板文件制作如下:

创建一个parameters参数,并且设置类型是【net.sf.jasperreports.engine.data.JRBeanCollectionDataSource】集合,如下:

修改Table表格的数据源为表达式,如下。

在Java代码中通过进行数据源的传递。

package com.gitcode.demo.web;import com.gitcode.demo.util.JasperReportsUtil;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @version 1.0.0* @Date: 2023/8/30 22:12* @Author ZhuYouBin* @Description:*/
@RestController
@RequestMapping("/api/report")
public class TableDemoController {@GetMapping("/table-demo")public String exportFile(String format) throws Exception {ClassPathResource resource = new ClassPathResource("jasper/TableDemo.jasper");String templatePath = resource.getPath();String fileName = "Table表格模板文件";// 表格数据集是 JRBeanCollectionDataSource 类型的,也就是 JavaBean 实体类类型List<Map<String, String>> data = this.getData(100);JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(data);// 执行导出操作return JasperReportsUtil.generateReport(templatePath, fileName, format, new HashMap<>(), dataSource);}private List<Map<String, String>> getData(int num) {List<Map<String, String>> ansMap = new ArrayList<>();for (int i = 0; i < num; i++) {Map<String, String> map = new HashMap<>();// 这里的 key 必须和模板文件中的 Field 字段的名称相同map.put("name", "name" + i);map.put("sex", i % 2 == 0 ? "male" : "female");map.put("age", (i + 20) + "");ansMap.add(map);}return ansMap;}
}

运行效果:

1.16、Map组件(TODO)

TODO,目前我还不了解这个组件。

1.17、SpiderChart组件(TODO)

TODO,目前我还不了解这个组件。

二、复合元素

2.1、PageNumber

PageNumber表示的是当前页码,从1开始,依次递增。

运行效果:

2.2、TotalPages

Total Pages表示的总页码,也就是对应的报表总页数。

运行效果:

2.3、CurrentDate

Current Date表示的是当前时间(年月日),对应Java中的java.util.Date,可以指定显示的日期格式。

2.4、Time

Time表示的是当前时间(时分),对应Java中的java.util.Date,可以指定显示的日期格式。

运行效果:

到此,JasperReports报表中的基础组件元素就介绍完啦,还是要在实际的需求中去使用,才能够明白这些组件应该使用在哪些场景下。

综上,这篇文章结束了,主要介绍JasperReport报表开发之常见的组件元素(Table、Subreport、Barcode等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/113746.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis中 list.size() = 1 但显示 All elements are null

一、Bug展示 二、原因分析 2.1.情形一&#xff1a;Mybatis的XML中返回类型映射错误 <select id"selectByDesc" parameterType"com.task.bean.OrderInfo"resultType"com.task.bean.OrderInfo">select MER_ID,SETTLE_DATE,ICE_NAME,ORDER_S…

探索未来世界,解密区块链奥秘!

你是否曾好奇&#xff0c;区块链是如何影响着我们的生活与未来&#xff1f;想要轻松了解这个引领着技术革命的概念吗&#xff1f;那么这本令人着迷的新书《区块链导论》绝对值得你拥有&#xff01; 内容丰富多彩&#xff0c;让你轻松掌握&#xff1a; **1章&#xff1a;区块链…

文件传输协议

文章目录 一、FTP1. 定义2. 端口3. 数据传输方式主动方式被动方式 二、TFTP三、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、FTP 1. 定义 文件传输协议&#xff08;FTP&#xff09;是一种用于在客户端和服务器之间进行文件传输的标准网络协…

使用yarn build 打包vue项目时静态文件或图片未打包成功

解决Vue项目使用yarn build打包时静态文件或图片未打包成功的问题 1. 检查vue.config.js文件 首先&#xff0c;我们需要检查项目根目录下的vue.config.js文件&#xff0c;该文件用于配置Vue项目的打包和构建选项。在这个文件中&#xff0c;我们需要确认是否正确地配置了打包输…

openCV实战-系列教程13:文档扫描OCR识别下(图像轮廓/模版匹配)项目实战、源码解读

&#x1f9e1;&#x1f49b;&#x1f49a;&#x1f499;&#x1f49c;OpenCV实战系列总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 上篇内容&#xff1a; openCV实战-系列教程11&#xff1a;文档扫描OCR识别上&am…

【Linux】0基础从获取docker,一步一步到部署PaddleSpeech

一、利用VMware安装ubuntu 1.安装VMware 具体操作详细安装VMware的方式 另外附部分VMware密匙 4A4RR-813DK-M81A9-4U35H-06KND NZ4RR-FTK5H-H81C1-Q30QH-1V2LA JU090-6039P-08409-8J0QH-2YR7F 4Y09U-AJK97-089Z0-A3054-83KLA 4C21U-2KK9Q-M8130-4V2QH-CF810 MC60H-DWH…

jvm与锁

今天是《面霸的自我修养》的第二弹&#xff0c;内容是Java并发编程中关于Java内存模型&#xff08;Java Memory Model&#xff09;和锁的基础理论相关的问题。这两块内容的八股文倒是不多&#xff0c;但是难度较大&#xff0c;接下来我们就一起一探究竟吧。 数据来源&#xff…

HCIP-HCS华为私有云的使用

1、概述 华为公有云&#xff08;HC&#xff09;、华为私有云&#xff08;HCS&#xff09;华为混合云&#xff08;HCSO&#xff09;。6.3 之前叫FusionSphere OpenStack&#xff0c;6.3.1 版本开始叫FusionCloud&#xff0c;6.5.1 版本开始叫Huawei Cloud Stack (HCS)华为私有云…

算法通关村第9关【黄金】| 两道有挑战的问题

1. 将有序数组转换为二叉搜索树 思路&#xff1a;二分法&#xff0c;这个算法保证了每次选择的中间元素都能保持左右子树的高度差不超过 1&#xff0c;从而构建一个高度平衡的二叉搜索树。这个过程类似于分治法&#xff0c;通过递归不断将大问题分解成小问题并解决。 找到数组…

链路聚合原理

文章目录 一、定义二、功能三、负载分担四、分类五、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、定义 在网络中&#xff0c;端口聚合是一种将连接到同一台交换机的多个物理端口捆绑在一起&#xff0c;形成一个逻辑端口的技术。通过端口聚合&…

Redis 主从复制和哨兵模式

一、概念 主从复制&#xff0c;是指将一台 Redis 服务器的数据&#xff0c;复制到其他的 Redis 服务器。前者称为主节点&#xff08;master/leader&#xff09;&#xff0c;后者称为从节点&#xff08;slave/follower&#xff09;。数据的复制是单向的&#xff0c;只能由主节点…

学习JAVA打卡第四十五天

StringBuffer类 StringBuffer对象 String对象的字符序列是不可修改的&#xff0c;也就是说&#xff0c;String对象的字符序列的字符不能被修改、删除&#xff0c;即String对象的实体是不可以再发生变化&#xff0c;例如&#xff1a;对于 StringBuffer有三个构造方法&#xff…

JPA在不写sql的情况下实现模糊查询

本文已收录于专栏 《Java》 目录 背景介绍概念说明单字段模糊匹配&#xff1a;多字段模糊匹配&#xff1a; 实现过程代码实现1.写一个实体类去实现Specification接口&#xff0c;重写toPredicate方法2.定义一个接口去继承JpaRepository接口&#xff0c;并指定返回的类型和参数类…

家宽用户家庭网的主要质量问题是什么?原因有哪些

1 引言 截至2020年底&#xff0c;我国家庭宽带&#xff08;以下简称“家宽”&#xff09;普及率已达到96%。经过一年多的发展&#xff0c;当前&#xff0c;家庭宽带的市场空间已经饱和。运营商在家宽市场的竞争也随之从新增用户数的竞争转移到家宽品质的竞争。 早期运营商的家…

多张图片转为pdf怎么弄?

多张图片转为pdf怎么弄&#xff1f;在网络传输过程中&#xff0c;为了避免图片格式文件出现差错&#xff0c;并确保图片的清晰度和色彩不因不同设备而有所改变&#xff0c;常见的做法是将图片转换为PDF格式。然而&#xff0c;当涉及到多张图片时&#xff0c;逐一转换将会变得相…

IP基本原理(上)

文章目录 一、IP的定义二、IP的作用1.标识节点和链路2.寻址和转发3.适应各种数据链路 三、IP头部封装格式四、MTU五、IP地址1.定义2.格式2.1 点分十进制和二进制关系与转换2.2 由网络位主机位组成2.3 网络位长度决定网段 3.分类3.1 A类3.2 B类3.3 C类3.4 D类3.5 E类 4.特殊地址…

职场中的团队建设:超越任务,铸就默契

团队建设在职场中的重要性日益凸显。无论是初创公司还是大型企业&#xff0c;都需要一个高效、和谐且有创新能力的团队来推动业务发展。本文将深入探讨团队建设的活动和策略&#xff0c;帮助您构建一个卓越的团队。 1. 团队建设的重要性 提高团队凝聚力 团队凝聚力不仅仅是团…

手写数字识别之网络结构

目录 手写数字识别之网络结构 数据处理 经典的全连接神经网络 卷积神经网络 手写数字识别之网络结构 无论是牛顿第二定律任务&#xff0c;还是房价预测任务&#xff0c;输入特征和输出预测值之间的关系均可以使用“直线”刻画&#xff08;使用线性方程来表达&#xff09…

SSM - Springboot - MyBatis-Plus 全栈体系(三)

第二章 SpringFramework 一、技术体系架构 1. 总体技术体系 1.1 单一架构 一个项目&#xff0c;一个工程&#xff0c;导出为一个war包&#xff0c;在一个Tomcat上运行。也叫all in one。 单一架构&#xff0c;项目主要应用技术框架为&#xff1a;Spring , SpringMVC , Myba…

基于Jenkins构建生产CICD环境(第三篇)

目录 基于Jenkins自动打包并部署docker环境 1、安装docker-ce 2、阿里云镜像加速器 3、构建tomcat 基础镜像 4、构建一个Maven项目 基于Jenkins自动化部署PHP环境 基于rsync部署 基于Jenkins自动打包并部署docker环境 1、安装docker-ce 在192.168.2.123 机器上&#x…