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

news2024/11/17 8:34:07

这篇文章,主要介绍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.coloradmin.cn/o/956849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于MQTT协议的物联网关

随着工业领域的不断发展&#xff0c;数字化转型已经成为企业迈向未来的必由之路。在这个数字化浪潮中&#xff0c;HiWoo Box以其强大的功能和创新的设计&#xff0c;在工业物联网领域被越来越多的人所熟知。特别是其基于MQTT协议的物联网关能力&#xff0c;也为企业实现智能化数…

喷泉码浅谈

01、喷泉码简介 喷泉码&#xff08;Fountain Code&#xff09;是一种在无线通信、数据传输和网络编码领域中使用的错误纠正技术。它与传统的纠错码和编码方法有所不同&#xff0c;喷泉码被设计用于在不确定信道条件下的高效数据传输。传统的纠错码&#xff08;如海明码、RS码等…

无涯教程-Android - RadioButton函数

RadioButton有两种状态:选中或未选中,这允许用户从一组中选择一个选项。 Radio Button 示例 本示例将带您完成一些简单的步骤,以展示如何使用Linear Layout和RadioButton创建自己的Android应用程序。 以下是修改后的主要Activity文件 src/MainActivity.java 的内容。 packa…

【算法】函数渐近的界基础知识及定理

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Spring依赖注入(DI)

目录 构造器注入 set注入 拓展注入 bean的作用域 Singleton Prototype Dependency Injection 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 . 构造器注入 具体实现&#xff1a;SpringIOC创建对象的…

电力行业浪涌保护器应用方案

电力行业是一个涉及到高压、大电流、复杂环境的领域&#xff0c;对于电气设备的安全和可靠性有着极高的要求。在电力行业中&#xff0c;浪涌是一种常见的电力质量问题&#xff0c;它指的是在电气系统中出现的瞬时过电压或过电流&#xff0c;可能由雷击、开关操作、短路故障等因…

算法通关村——解析堆的应用

在数组中找第K大的元素 LeetCode21 Medium 我们要找第 K 大的元素&#xff0c;如果我们找使用大堆的话那么就会造成这个堆到底需要多大的&#xff0c;而且哪一个是第 K 的的元素我们不知道是哪一个索引&#xff0c;我们更想要的结果就是根节点就是我们要找的值&#xff0c;所以…

java之SpringBoot基础、前后端项目、MyBatisPlus、MySQL、vue、elementUi

文章目录 前言JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作&#xff08;一&#xff09;JC-1-2.SpringBoot入门程序制作&#xff08;二&#xff09;JC-1-3.SpringBoot入门程序制作&#xff08;三&#xff09;JC-1-4.SpringBoot入门程序制作&#xff08;四&#xff09;…

cocosCreator 之 微信小游戏打包

版本&#xff1a; v3.8.0 环境&#xff1a; Mac 介绍 cocosCreator 支持将游戏发布到多个小游戏平台&#xff0c;并提供了打包等流程处理。 本篇文章主要讲述下微信小游戏的发布流程相关。更多内容参考官方文档&#xff1a; 发布到小游戏平台 微信小游戏的发布相关&#xff…

2023-8-31 Floyd求最短路

题目链接&#xff1a;Floyd求最短路 #include <iostream> #include <algorithm> #include <cstring>using namespace std;const int N 210, INF 1e9;int n, m, Q;int d[N][N];void floyd() {for(int k 1; k < n; k)for(int i 1; i < n; i)for(int …

并发编程的故事——并发之共享模型

并发之共享模型 文章目录 并发之共享模型一、多线程带来的共享问题二、解决方案三、方法中的synchronize四、变量的线程安全分析五、习题六、Monitor七、synchronize优化八、wait和notify九、sleep和wait十、park和unpark十一、重新理解线程状态十二、多把锁十三、ReentrantLoc…

瓜分双十一10亿红包设计:在线分享教程?

在如今激烈的市场竞争中&#xff0c;瓜分红包营销活动成为了各大企业争相使用的一种营销手段。这种活动不仅能够吸引用户的关注和参与&#xff0c;还能够提高用户的粘性和忠诚度。那么&#xff0c;如何自建瓜分红包营销活动呢&#xff1f;下面将为大家详细解析。 首先&#xff…

振动智能监测与设备可靠性:无线技术的契机

在现代工业领域&#xff0c;设备的可靠性和稳定运行对于生产效率和安全性至关重要。然而&#xff0c;由于设备的频繁使用和各种环境影响&#xff0c;设备故障和突发停机仍然是不可避免的挑战。为了有效地应对这些挑战&#xff0c;振动智能监测技术结合无线传感器的应用正在成为…

FPGA可重配置原理及实现(1)——导论

一、概述 可重配置技术是Xilinx提供的用来高效利用FPGA设计资源实现FPGA资源可重复利用的最新的FPGA设计技术&#xff0c;这种技术的发展为FPGA应用提供了更加广阔的前景。 术语“重构”是指FPGA已经配置后的重新编程。FPGA的重构有两种类型&#xff1a;完全的和部分的。完全重…

【附安装包】Substance3D 2022安装教程

软件下载 软件&#xff1a;Substance3D版本&#xff1a;2022语言&#xff1a;简体中文大小&#xff1a;4.0G安装环境&#xff1a;Win11/Win10&#xff08;1809版本以上&#xff09;硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff0c;不支持7代以下CPU&#xff09;下载通…

即时通讯开发应用中的实时消息推送技术

即时通讯开发领域正以前所未有的速度蓬勃发展&#xff0c;实时消息推送技术成为促进即时通讯应用体验的关键要素。本文将深入探讨即时通讯应用中的实时消息推送技术&#xff0c;为读者呈现这一领域的全貌。 2. 实时消息推送的重要性 在当今数字化时代&#xff0c;人们日益需要…

git 提交错误,回滚到某一个版本

git log 查看版本号 commit 后面跟的就是版本号git reset --hard 版本号 &#xff08;就可以回滚到你要去的版本&#xff09;git push -f &#xff08;因为本地回滚了&#xff0c;所以和远程会差几个版本。所以这时候只有强制推送&#xff0c;覆盖远程才可以&#xff09;

实力认证!OceanBase获“鼎信杯”优秀技术支撑奖

6 月 30 日&#xff0c;2023 “鼎信杯”信息技术发展论坛在京隆重举办第二届“鼎信杯”大赛颁奖典礼。OceanBase 凭借完全自主研发的原生分布式数据库&#xff0c;以及丰富的核心系统国产数据库升级案例&#xff0c;斩获“优秀技术支撑奖”。 论坛上&#xff0c;国内首个基于在…

JavaScript基础03

JavaScript 基础 文章目录 JavaScript 基础for 语句for语句的基本使用循环嵌套倒三角九九乘法表 数组数组是什么&#xff1f;数组的基本使用定义数组和数组单元访问数组和数组索引数据单元值类型数组长度属性 操作数组 if 多分支语句和 switch的区别&#xff1a; 共同点 都能实…

C语言如何判断闰年?

首先需要了解闰年的判断规则&#xff0c;以下是百度百科的介绍&#xff1a; 1.普通年份能被4整除&#xff0c;且不能被100整除的&#xff0c;是闰年。&#xff08;如2004年就是闰年&#xff09; 2.世纪年份能被400整除的是闰年。&#xff08;如2000年是闰年&#xff0c;1900年不…