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

    xiaoxiao2023-10-06  181

    问题概述: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(); } } } }

     

    最新回复(0)