第一步:设计报表模板
在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
效果如下截图: