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

不点 阅读:600 2021-03-31 18:10:13 评论:0

第一步:设计报表模板

                 在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

效果如下截图:

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号