Jaspersoft 报表:基于Parameters属性传入Map数据源填充报表

    xiaoxiao2022-07-16  136

    第一步:设计报表模板

                     在Jaspersoft Studio中新建一个报表模板(report2),移除不需要的Band(段落),Column Header,ColumnFooter,Summary在outline界面中选中要删除Band(段落),右键-> delete,即可删除。

    如下截图所示:

    第二步:在outline面板中找到Parameters,右键 -> Create Parameter,新建一个Parameter(生成一个Paramerter1)

    右键 Paramete1 -> Show Properties. 设置Name为title、Class为java.lang.String.

    用同样的方法生成,date,name,age,dept,gender的parameter项,属性全为java.lang.String

    report2设计报表模板如下:

    保存模板,并Preview(预览效果)

    二、通过SpringBoot程序,使用Map作为数据源生成报表

    整体项目结构如下所示:

    boot-report 的pom.xml 文件依赖:

    <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.zzg</groupId> <artifactId>boot-report</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> </parent> <!--springboot 项目基础依赖 --> <dependencies> <!--web 模块依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!--移除自带json 工具包 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> </exclusion> </exclusions> </dependency> <!--web 热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <!--web 单元测试 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--common-lang 常用工具包 --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <!--commons-codec 加密工具包 --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> </dependencies> <modules> <module>boot-report-controller</module> </modules> </project>

    boot-report-controller的pom.xml 文件依赖:

    <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> <parent> <groupId>com.zzg</groupId> <artifactId>boot-report</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>boot-report-controller</artifactId> <dependencies> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.6.0</version> <exclusions> <!-- 排除com.lowagie.itext的依赖 --> <exclusion> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> </dependencies> </project>

    核心代码:

    package com.zzg.report; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import net.sf.jasperreports.engine.JREmptyDataSource; import net.sf.jasperreports.engine.JasperRunManager; @Controller @RequestMapping("/api/report") public class ReportController { @RequestMapping("/{reportName}") public void getReportByParam(@PathVariable("reportName") final String reportName, HttpServletResponse response) { // try{ // 参数填充 Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("title", "parame"); parameters.put("date", "2019-05-23"); parameters.put("name", "zzg"); parameters.put("age", "28"); parameters.put("dept", " develop center"); parameters.put("gender", "developer"); ServletOutputStream sosRef = null; try { // 获取文件流 ClassPathResource resource = new ClassPathResource("jaspers" + File.separator + reportName + ".jasper"); InputStream jasperStream = resource.getInputStream(); sosRef = response.getOutputStream(); JasperRunManager.runReportToPdfStream(jasperStream, sosRef, parameters, new JREmptyDataSource()); response.setContentType("application/pdf"); } catch (Exception e) { e.printStackTrace(); } finally { try { sosRef.flush(); sosRef.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

    parametes作为数据源在程序中是一个Map集合。对应模板中Paramters,并且map的key与模板中Parameters属性的名字一致,map的value的数据类型与模板Parameters属性设置的数据类型保持一致。所以,在设计模板时要注意,Parameters命名不能重复,且设置数据类型时也要留心。

    .jsaper文件:由JRXML模板编译生成的二进制文件,用于代码填充数据

    在studio中找到.jrxml文件右键 -> Compile Report ,即可生成.Jasper文件,

    将生成的人eport2.jasper文件放入resource下新建的jasper文件夹中。

    报表的生成流程

    程序入口代码:

    package com.zzg; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { // TODO Auto-generated method stub SpringApplication.run(Application.class, args); } }

    google 浏览器输入如下地址:http://localhost:8080/api/report/report2

    效果如下截图:

    最新回复(0)