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

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

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 前端开发 数据库
美多商城前三天重点内容大盘点
美多商城前三天重点内容大盘点
|
6月前
|
JavaScript 小程序 Java
基于Java+SpringBoot+Vue的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文件、统计图展示)
基于Java+SpringBoot+Vue的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文件、统计图展示)
319 0
基于Java+SpringBoot+Vue的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文件、统计图展示)
|
6月前
|
监控 安全 BI
宜搭报表中,如何实现将报表定时下载并推送到群里
宜搭报表中,如何实现将报表定时下载并推送到群里
|
6月前
|
Java 关系型数据库 MySQL
期未作业|基于SSM实现游戏调查统计小作业
期未作业|基于SSM实现游戏调查统计小作业
|
JSON 监控 API
php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)
php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)
306 0
|
XML 存储 开发框架
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(三)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(三)
|
存储 Java BI
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(一)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(一)
|
存储 Web App开发 JavaScript
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(二)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)
传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)(二)
|
小程序 前端开发 Java
代小程序实现业务开发,99%还原公众号后台对服务类目管理的功能
关于微信开放平台上的代小程序实现业务,之前就写了相关模块的代码,包括快速注册小程序、代码上传、提交审核、发布小程序等主要功能。
122 0
代小程序实现业务开发,99%还原公众号后台对服务类目管理的功能
|
JSON 关系型数据库 大数据
电商项目之用户行为日志字段分析|学习笔记
快速学习电商项目之用户行为日志字段分析