传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(四)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)

6.3.6 动态数据填充

上面我们在PDF文件中展示的都是一些静态数据,那么如果需要动态展示一些数据应该如何实现呢?我们可以使用Outline面板中的Parameters和Fields来实现。


b39e94663b5a1f58614d044e8fef9d40.png


Parameters通常用来展示单个数据,Fields通常用来展示需要循环的列表数据。


Parameters

在Parameters上点击右键,创建一个Parameter参数:


9a04b614d58a6f27626bd7dfd3096e76.png


可以在右侧的Properties面板中修改刚才创建的参数名称:


e88626ea71e177a2bd902657f5ab7d8e.png


将刚才创建的Parameter参数拖动到面板中:


d2212815fc1ebb72fa574f994fde8a6b.png


进入预览视图,查看效果:


bb41764021cd8b29b0383c6c0ee12b2a.png


由于模板中我们使用了Parameter动态元素,所以在预览之前需要为其动态赋值:


ec7228b455178e22da3bd375e744cbf1.png


注意:由于我们是在Jaspersoft Studio软件中进行预览,所以需要通过上面的输入框动态为Parameter赋值,在后期项目使用时,需要我们在Java程序中动态为Parameter赋值进行数据填充。


Fields

使用Fields方式进行数据填充,既可以使用jdbc数据源方式也可以使用JavaBean数据源方式。


jdbc数据源数据填充

第一步:在Repository Explorer面板中,在Data Adapters点击右键,创建一个数据适配器


e64d1d4bf16209eb40461276164b0d7e.png


第二步:选择Database JDBC Connection


1c4f77cec2d6bee40fc25689914d7d57.png


第三步:选择mysql数据库,并完善jdbc连接信息


de4796c842040d7ec4134ba1a2a6447d.png


为了能够在Jaspersoft Studio中预览到数据库中的数据,需要加入MySQL的驱动包


813e63059d17fc5ad99aa412fba94782.png


第四步:在Outline视图中,右键点击工程名,选择Database and Query菜单


724c957c37935f845fdc204b5cc6bd2a.png


第五步:在弹出的对话框中选择刚刚创建的JDBC数据库连接选项


1ef207520b9d1be0e23ee1826e2ffa5d.png


第六步:在弹出对话框中Language选择sql,在右侧区域输入SQL语句并点击Read Fields按钮


29d98e146adcfdd735a7ad96856c7fc6.png


可以看到通过点击上面的Read Fields按钮,已经读取到了t_setmeal表中的所有字段信息并展示在了下面,这些字段可以根据需要进行删除或者调整位置


第七步:在Outline视图中的Fields下可以看到t_setmeal表中相关字段信息,拖动某个字段到设计区的Detail区域并调整位置


8a1a5fdf971915f201430c5ca1f3b586.png


可以看到,在拖动Fields到设计区时,同时会产生两个元素,一个是静态文本,一个是动态元素。静态文本相当于表格的表头,可以根据需要修改文本内容。最终设计完的效果如下:


4927271b16e6702a3a28927158566211.png


第八步:使用Preview预览视图进行预览


be68f393326f22804178393d7ce537d2.png


通过上图可以看到,虽然列表数据展示出来了,但是展示的还存在问题。在每条数据遍历时表头也跟着遍历了一遍。这是怎么回事呢?这是由于我们设计的表头和动态Fields都在Detail区域。为了能够解决上面的问题,需要将表头放在Column Header区域,将动态Fields放在Detail区域。具体操作如下:


1、在Outline视图的Column Header点击右键创建出一个区域


ec253987cb752153931c4db64e659dcb.png


2、将Detail下的静态文本拖动到Column Header下


4ca53dd06ba4c62f1cfc0e17155d8705.png


拖动完成后如下:


3a15e85612a116fc4ce7054f94edea7a.png


3、调整静态文本在Column Header区域的位置,最终效果如下


ca13fcc452e2610864f9de3985a9ab52.png


4、预览查看效果


eb473451006c61d0e9c8d6b53dd0239f.png


JavaBean数据源数据填充

第一步:复制上面的demo1.jrxml文件,名称改为demo2.jrxml


ee70f6bdb6f58c072666fdd9dd29e873.png


修改Report Name:


f3c2b217564010d4630a2c200e8e5d76.png


第二步:打开demo2.jrxml文件,将detail区域中的动态Fields元素删除


e3c6aa788eb88ef5608b3061136737ab.png


第三步:将Outline面板中Fields下的字段全部删除


f7bb68936c13c1fd04a4be861d44a742.png


第四步:清除JDBC数据源和相关SQL语句


d4f8e6e42de5250ad106aabba398d805.png

09e612ba341b5a047a889a2978b49a03.png

第五步:在Fields处点击右键创建新的Field


dd40d365f9866fcaac034c2f83629cda.png


创建完成后在Properties属性面板中修改Field的名称


736a8b0d97f098fa1ae6ed95ce86bfbc.png

43aad9083a060d75afc0a0b21ec96ac6.png



第六步:将创建的Fields拖动到Detail区域并调整好位置


15c41c9e6924a6144440149146f19c40.png


注意:使用此种JavaBean数据源数据填充方式,无法正常进行预览,因为这些动态Fields需要在Java程序中动态进行数据填充。


6.4 结合JasperReports输出报表


前面我们已经使用Jaspersoft Studio设计了两个模板文件:demo1.jrxml和demo2.jrxml。其中demo1.jrxml的动态列表数据是基于JDBC数据源方式进行数据填充,demo2.jrxml的动态列表数据是基于JavaBean数据源方式进行数据填充。本小节我们就结合JasperReports的Java API来完成pdf报表输出。


6.4.1 JDBC数据源方式填充数据

第一步:创建maven工程,导入相关maven坐标

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.8.0</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

第二步:将设计好的demo1.jrxml文件复制到当前工程的resources目录下

108ee93043a77d2f9c370ad499e80d91.png

第三步:编写单元测试

@Test
public void testReport_JDBC() throws Exception{
    Class.forName("com.mysql.jdbc.Driver");
    Connection connection = 
        DriverManager.getConnection("jdbc:mysql://localhost:3306/health", 
                                    "root", 
                                    "root");
    String jrxmlPath = "D:\\ideaProjects\\projects111\\jasperreports_test\\src\\main\\resources\\demo1.jrxml";
    String jasperPath = "D:\\ideaProjects\\projects111\\jasperreports_test\\src\\main\\resources\\demo1.jasper";
    //编译模板
    JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
    //构造数据
    Map paramters = new HashMap();
    paramters.put("company","传智播客");
    //填充数据---使用JDBC数据源方式填充
    JasperPrint jasperPrint = 
        JasperFillManager.fillReport(jasperPath, 
                                    paramters, 
                                    connection);
    //输出文件
    String pdfPath = "D:\\test.pdf";
    JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
}

通过上面的操作步骤可以输出pdf文件,但是中文的地方无法正常显示。这是因为JasperReports默认情况下对中文支持并不友好,需要我们自己进行修复。具体操作步骤如下:


1、在Jaspersoft Studio中打开demo1.jrxml文件,选中中文相关元素,统一将字体设置为“华文宋体”并将修改后的demo1.jrxml重新复制到maven工程中


2、将本章资源/解决中文无法显示问题目录下的文件复制到maven工程的resources目录中


611d6d5695ad7ec94dc01e1bc42befc7.png


按照上面步骤操作后重新执行单元测试导出PDF文件:


58d0cc01be9441088a04eb54af85e588.png


6.4.2 JavaBean数据源方式填充数据


第一步:为了能够避免中文无法显示问题,首先需要将demo2.jrxml文件相关元素字体改为“华文宋体”并将demo2.jrxml文件复制到maven工程的resources目录下


23616c9e25a5402434366a3a8323070c.png


第二步:编写单元测试方法输出PDF文件

@Test
public void testReport_JavaBean() throws Exception{
    String jrxmlPath = "D:\\ideaProjects\\projects111\\jasperreports_test\\src\\main\\resources\\demo2.jrxml";
    String jasperPath = "D:\\ideaProjects\\projects111\\jasperreports_test\\src\\main\\resources\\demo2.jasper";
    //编译模板
    JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
    //构造数据
    Map paramters = new HashMap();
    paramters.put("company","传智播客");
    List<Map> list = new ArrayList();
    Map map1 = new HashMap();
    map1.put("tName","入职体检套餐");
    map1.put("tCode","RZTJ");
    map1.put("tAge","18-60");
    map1.put("tPrice","500");
    Map map2 = new HashMap();
    map2.put("tName","阳光爸妈老年健康体检");
    map2.put("tCode","YGBM");
    map2.put("tAge","55-60");
    map2.put("tPrice","500");
    list.add(map1);
    list.add(map2);
    //填充数据---使用JavaBean数据源方式填充
    JasperPrint jasperPrint = 
        JasperFillManager.fillReport(jasperPath, 
                                     paramters, 
                                     new JRBeanCollectionDataSource(list));
    //输出文件
    String pdfPath = "D:\\test.pdf";
    JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
}

查看输出效果:


327f069e9b92a6de3fff1063e966d934.png

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
监控 BI 定位技术
直播程序源码开发建设:洞察全局,数据统计与分析功能
数据统计与分析功能不管是对直播程序源码平台的主播或运营者都会有极大的帮助,是了解观众需求、优化用户体验成为直播平台发展的关键功能,这也是开发搭建直播程序源码平台的必备功能之一。
直播程序源码开发建设:洞察全局,数据统计与分析功能
|
存储 前端开发 Java
媒资管理-项目易错分析1
模块整体认识 媒资管理模块主要负责以下几件事情: 上传图片 上传视频 处理视频 对需要转码处理的视频系统会自动对其处理,处理后生成视频的URL 处理视频没有用户界面,完全是后台自动执行 审核媒资 分为自动审核和人工审核 可调用第三方鉴别接口协助审核 绑定媒资 课程计划创建好后需要绑定媒资文件,比如:如果课程计划绑定了视频文件,进入课程在线学习界面后点课程计划名称则在线播放视频。 架构问题分析 当前要开发的是媒资管理服务,目前为止共三个微服务:内容管理、系统管理、媒资管理,如下图: 后期还会添加更多的微服务,当前这种由前端直接请求微服务的方式存在弊端,如果在前端对每个请求地址都配置绝对路径
86 0
|
编解码 前端开发 调度
媒资管理-项目易错分析2
视频处理 视频编码和文件格式 什么是视频编码? 同时我们还要知道我们为什么要对视频进行编码,如果我们不编码我们的视频文件会变得非常庞大,而通过视频编码可以将我们的视频文件大小缩小为原来的十分之一、百分之一,亦或是千分之一。 首先我们要分清文件格式和编码格式: 文件格式:是指.mp4、.avi、.rmvb等 这些不同扩展名的视频文件的文件格式 ,视频文件的内容主要包括视频和音频,其文件格式是按照一 定的编码格式去编码,并且按照该文件所规定的封装格式将视频、音频、字幕等信息封装在一起,播放器会根据它们的封装格式去提取出编码,然后由播放器解码,最终播放音视频。 音视频编码格式:通过音视频的压
47 0
|
JSON 监控 API
php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)
php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)
326 0
宜搭无代码实现物料数字仓库和自动采购系统展示
物料库存台账是企业数字化的一个核心需求,市面上常见的各种进销存和金蝶用友财务管理软件皆是围绕着仓库货物的销售、采购、入库、出库等物料流转流程设计的。但大部分软件依靠人工去计算库存空余和采购需求数量的计算,然后在将进出数据手工录入系统,进销存软件仅仅体现出一个数字记账功能。就是一个流水账!
543 1
宜搭无代码实现物料数字仓库和自动采购系统展示
|
XML 存储 开发框架
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(三)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(三)
|
存储 Web App开发 JavaScript
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(二)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(二)
|
存储 Java BI
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(一)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(一)
|
小程序 前端开发 Java
代小程序实现业务开发,99%还原公众号后台对服务类目管理的功能
关于微信开放平台上的代小程序实现业务,之前就写了相关模块的代码,包括快速注册小程序、代码上传、提交审核、发布小程序等主要功能。
133 0
代小程序实现业务开发,99%还原公众号后台对服务类目管理的功能
|
数据可视化 安全 数据管理
【新模板推荐】放下表格——开箱即用的新冠疫苗接种统计模板来了!
钉钉宜搭模板市场上线一款全新模板:新冠疫苗接种统计,支持组织内成员在线填报接种信息、可视化呈现统计结果,还能配置消息,实现自动提醒。
784 0
【新模板推荐】放下表格——开箱即用的新冠疫苗接种统计模板来了!