这篇文章,主要介绍如何安装Jasper Studio报表开发工具以及使用Java填充模板文件内容。
目录
一、安装Jasper Studio工具
1.1、下载报表开发工具
1.2、工具界面介绍
(1)启动工具
(2)创建项目
二、制作Jasper模板文件
2.1、Jasper文件组成区域介绍
2.2、制作模板文件
三、使用Java填充数据
3.1、引入依赖
3.2、创建JasperReportsUtil工具类
3.3、测试控制器类
3.4、放置Jasper模板文件
3.5、运行测试
一、安装Jasper Studio工具
1.1、下载报表开发工具
JasperReport提供了一个专门用于制作报表模板文件的开发工具,叫做:Jasper Studio,官方下载地址是:https://community.jaspersoft.com/community-download,进入下载界面,如下所示:
点击下载按钮,此时会弹出提示框,点击继续就会跳转到下载详情界面:https://community.jaspersoft.com/project/jaspersoft-studio/releases,如下所示:
在下载详情界面中,可以有多种格式的下载文件,例如:exe、zip、tgz等,这里我选择了zip文件,点击下载就可以啦。需要注意的是下载时候,会提示让你注册JasperReports的社区账号,我们用自己邮箱注册一个就可以啦。将下载完成的zip压缩包解压到你的工作目录下,解压之后,会得到一个jaspersoftstudio目录,如下所示:
这个目录下有一个Jaspersoft Studio.exe文件,双击这个文件就可以启动 JasperReports 报表工具啦。
1.2、工具界面介绍
(1)启动工具
双击Jaspersoft Studio.exe文件,启动JasperReports报表工具,如下图所示:
上图就是启动之后的欢迎界面,看着有点像eclipse开发工具对吧!没错,Jasper Studio就是基于Eclipse进行开发的,它可以单独使用,也可以作为Eclipse的插件添加到Eclipse开发工具中使用。
(2)创建项目
左上角选择【File-->New-->Jasper Report】创建一个报表项目,如下所示:
在弹出框中,选择自己需要的模板文件就可以啦,一般来说都是选择A4空白模板,或者是水平方向的A4空白模板,剩下的就是自己设计模板文件啦。
输入项目名称,选择数据源之类的,这里可以省略,直接傻瓜式的点击next就行啦,最后点击Finish即可。
项目创建成功之后,此时就会进入到Jasper Studio的工作区域,Jasper工作区域大致分为下面这几个部分:
到这里,Jasper Studio工具安装好了,并且基本的工作区域也知道了,那就可以开始制作自己的模板文件啦。
二、制作Jasper模板文件
2.1、Jasper文件组成区域介绍
可以看到在Jasper Studio的主报表区域有很多的组成部分,如下图所示:
Jasper将模板文件划分为上面几个组成部分,每一个组成部分表示的含义不同,其中每一个部分的作用如下所示:
- Title区域:这个区域只会在模板文件的第一页中显示,从第二页开始就不会显示,主要定义文件的标题内容。
- Page Header区域:这个区域是从第二页开始,每一页都会显示的页头信息,显示在每一页的最顶部。
- Column Header区域:当我们使用了Table组件的时候,Column Header区域才会生效,它表示的表格的列头,会在每一页显示。
- Detail区域:这个区域就是真正显示内容的区域,可以有多个Detail区域。
- Column Footer区域:当我们使用了Table组件的时候,Column Footer区域才会生效,它表示的表格的列尾,会在每一页显示。
- Page Footer区域:这个区域是从第二页开始,每一页都会显示的页脚信息,显示在每一页的最底部。
- Summary区域:这个区域是表示合计区域,只会显示在最后一页的末尾区域。
现在不知道这些东西不要紧,后面的文章中,我会通过制作一些模板文件,来演示一下每一个区域的作用。这里就先做一个简单的模板文件,用于演示一下如何通过Java向模板文件中填充数据。
2.2、制作模板文件
首先删除文件中不需要的区域,选择需要删除的元素,右键点击Delete就行啦:
只保留Title和Detail两个区域,删除之后的效果如下所示:
从右侧组件元素栏里面,选择【Text Field】组件,将其拖到Title区域中,如下:
选中刚刚添加的组件,可以编辑它的样式,例如:字体、字体大小、对齐方式等、颜色等属性。在【outline】区域中的【Paramater】,右键创建一个参数,如下所示:
接着在右下角区域的【Properties】中,输入参数名称以及参数对应的Java数据类型,如下:
参数创建完成之后,就可以再次选择我们的之前拖到Title区域的【Text Field】组件,在右下角【Properties】属性区域,设置组件使用的参数值名称。
这里使用的Parameters参数,之后可以通过Java代码直接传递一个Map对象进行数据填充替换,按照这个方式,可以多创建几个测试参数,最终制作的简单模板如下所示:
既然模板文件制作好了,那就可以使用Java语言将需要填充的数据写入到模板文件里面啦。
三、使用Java填充数据
3.1、引入依赖
在实际开发中,一般都是Web工程项目,所以这里是采用SpringBoot工程搭建的一个项目环境,需要引入JasperReports相关的依赖,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gitcode.demo</groupId>
<artifactId>jasper-demo</artifactId>
<version>1.0.0</version>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.3.5.RELEASE</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JasperReports 报表开发所需依赖 START -->
<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.20.0</version>
<exclusions>
<!--
排除自带的itext依赖,因为自带的itext版本是 2.1.7.js10
这个版本在中央仓库里面没有,无法下载
-->
<exclusion>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入itext依赖,因为JasperReports中使用了itext操作PDF -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<!-- JasperReports 报表开发所需依赖 END -->
<!--
引入 poi 依赖,因为 jasper 底层操作excel使用的是poi组件
-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies>
</project>
3.2、创建JasperReportsUtil工具类
为了方便操作Jasper报表,这里在统一的类里面进行报表的处理,代码如下所示:
package com.gitcode.demo.util;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.export.*;
import org.springframework.core.io.ClassPathResource;
import java.io.InputStream;
import java.util.Map;
import java.util.Objects;
/**
* @version 1.0.0
* @Date: 2023/8/7 14:14
* @Author ZhuYouBin
* @Description: JasperReports 工具类
*/
public class JasperReportsUtil {
/**
* 使用 JasperReports 生成报表文件
* @param templatePath 模板文件路径及名称
* @param fileName 生成的文件名称
* @param fileType 生成的文件类型,例如: pdf、html、xls 等
* @param parameters 传递到 jrxml 模板文件中的数据参数
* @return 返回生成的报表文件路径
*/
public static String generateReport(String templatePath, String fileName, String fileType, Map<String, Object> parameters) throws Exception {
// 1、获取 jasper 模板文件【采用流的方式读取】
ClassPathResource resource = new ClassPathResource(templatePath);
InputStream in = resource.getInputStream();
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(in);
// 2、将 parameters 数据参数填充到模板文件中
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
// 3、按照指定的 fileType 文件类型导出报表文件
if (Objects.equals("pdf", fileType)) {
JasperExportManager.exportReportToPdfFile(jasperPrint, fileName + ".pdf");
} else if (Objects.equals("xls", fileType)) { // 导出 xls 表格
JRXlsExporter exporter = new JRXlsExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); // 设置导出的输入源
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(fileName + ".xls")); // 设置导出的输出源
// 配置信息
SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
configuration.setOnePagePerSheet(true); // 每一页一个sheet表格
exporter.setConfiguration(configuration); // 设置配置对象
exporter.exportReport(); // 执行导出
} else if (Objects.equals("xlsx", fileType)) { // 导出 xlsx 表格
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); // 设置导出的输入源
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(fileName + ".xlsx")); // 设置导出的输出源
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setOnePagePerSheet(true); // 每一页一个sheet表格
exporter.setConfiguration(configuration);
exporter.exportReport(); // 执行导出
} else if (Objects.equals("html", fileType)) {
JasperExportManager.exportReportToHtmlFile(jasperPrint, fileName + ".html");
}
return null;
}
}
3.3、测试控制器类
编写一个TestController测试控制器,然后在代码中添加需要填充的模板数据,如下:
package com.gitcode.demo.web;
import com.gitcode.demo.util.JasperReportsUtil;
import net.sf.jasperreports.engine.util.JRResourcesUtil;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.ResourcePatternUtils;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* @version 1.0.0
* @Date: 2023/8/10 21:13
* @Author ZhuYouBin
* @Description:
*/
@RestController
@RequestMapping("/api/report")
public class TestController {
@GetMapping("/export")
public String exportFile(String format) throws Exception {
ClassPathResource resource = new ClassPathResource("MyFirstReport.jasper");
String templatePath = resource.getPath();
String fileName = "Jasper导出文件";
/*
创建传递到 Jasper 模板文件中的数据参数。
注意:参数的 key 必须和 Jasper Studio 中创建的 Parameters 参数名称相同,否则匹配不上,无法填充数据。
*/
Map<String, Object> parameters = new HashMap<>();
parameters.put("titleName", "This is a title.");
parameters.put("userName", "Tom");
parameters.put("sex", "man");
parameters.put("age", "20");
parameters.put("address", "everywhere.");
// 执行导出操作
return JasperReportsUtil.generateReport(templatePath, fileName, format, parameters);
}
}
3.4、放置Jasper模板文件
将之前制作好的Jasper模板文件编译,编译之后会生成一个【.jasper】后缀的文件,这个文件就是我们要的模板文件,要把这个文件放到工程的【src/main/resources】资源目录里面,如下所示:
3.5、运行测试
启动工程,打开浏览器访问http://localhost:8080/api/report/export?format=pdf地址,此时会在工程目录下,生成对应的文件:
打开文件查看内容,如下所示:
到此,Jasper Studio报表工具的安装、制作简单模板以及使用Java填充模板文件数据就介绍完啦。
综上,这篇文章结束了,主要介绍如何安装Jasper Studio报表开发工具以及使用Java填充模板文件内容。