【JasperReports笔记01】Jasper Studio报表开发工具的安装以及使用Java填充模板文件内容

这篇文章,主要介绍如何安装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填充模板文件内容。

猜你喜欢

转载自blog.csdn.net/qq_39826207/article/details/132198182