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

问题概述: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包

扫描二维码关注公众号,回复: 6539653 查看本文章

 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();
			}
		}

	}

}

猜你喜欢

转载自blog.csdn.net/zhouzhiwengang/article/details/90544340