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包
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.作者投稿可能会经我们编辑修改或补充。