Jaspersoft 报表:PDF中文不显示问题分析

java哥 阅读:231 2021-03-31 18:09:45 评论:0

问题概述:PDF中文不显示问题主要是Jasperreports提供的font包不提供中文格式支持,所以我们需要自定义一个font包,用于支持。

第一步:在Jaspersoft Studio中添加中文字体

1、下载微软雅黑字体文件:*.ttf,字体文件下载地址:

2、在Jaspersoft Studio中设置Font,步骤: Window -> Preferences -> Jaspersoft Studio -> Fonts

3、添加字体文件:

添加完成后,可以在选择字体栏发现添加的字体

然后把所有的parameter字体都换成“微软雅黑”。保存从新生成report1.jasper文件。

第二步:在Jaspersoft Studio 打包字体文件Font.jar包

 1、Jaspersoft Studio中打包Font.jar,步骤如下: Window -> Preferences -> Jaspersoft Studio -> Fonts->Export

2、将打包的font.jar 文件安装至本地Maven 仓库中,执行如下指令:

mvn install:install-file -Dfile=C:/font/jar/font.jar -DgroupId=com.zzg.report -DartifactId=font -Dversion=1.0.0 -Dpackaging=jar 

 

3、报表项目添加对font.jar 依赖:

<!-- 报表系统:JasperReports --> 
		<dependency> 
			<groupId>net.sf.jasperreports</groupId> 
			<artifactId>jasperreports</artifactId> 
			<version>6.6.0</version> 
		</dependency> 
<!--字体文件依赖--> 
		<dependency> 
			<groupId>com.zzg.report</groupId> 
			<artifactId>font</artifactId> 
			<version>1.0.0</version> 
		</dependency>

4、重新启动项目,重新访问指定报表:

5、重点代码:

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", "参数"); 
		parameters.put("date", "2019-05-23"); 
		parameters.put("name", "强人"); 
		parameters.put("age", "28"); 
		parameters.put("dept", " 研发中心"); 
		parameters.put("gender", "码农"); 
		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(); 
			} 
		} 
 
	} 
 
} 

 

声明

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

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号