Jasperreport6 导出pdf中文不显示问题终极大法

传统解决思路

这个问题传统的解决思路:

  1. Ireport软件中设置字体


    Ireport字体设置
  2. 项目中导入jar包: itext-asian, 因为jasper本身不支持中文.

    itext-asian

这样, 生成模板字体部分类似这样:

....

...

以上思路, 基本可以解决问题. 但是在笔者这里失效了, 原因未知, 可能是因为maven仓库中jar有问题, 没有下载全或是其他. 导致一直报: 加载字体失败.


1515314352.png

即使不报错, 同样会有个严重的问题: 模板中中文字体
辣么多, 难道要...挨个设置上文中的那3项?
(请赐我一刀)

终极大法

回想一下, 使用office时, 肯定有过这样的经历: "系统自带字体不够用, 太low..."(尤其是写PPT的时候).
这时, 是不是下载自己中意的很多漂亮字体, 类似什么华康少女之类的.
同样, 在使用Jasperreport时也一样, 何不定制一个自己的字体包, 里面含有丰富的好看的字体?(当然作为程序猿, 能显示中文就OK了!).

步骤[1]

  1. 引入itext 4.2.1(替换掉2.1.7)

 

  com.lowagie
  itext
  4.2.1


>

  com.itextpdf
  itextpdf
  5.5.10
 
  1. 放弃itext-asian

  2. 引入jasperreport

  • 排除itext是为了用上文中配置的itext(?是否可选?)
  • 是否要排除font, 待测试.

        
            net.sf.jasperreports
            jasperreports
            6.3.1
            
                
                    com.lowagie
                    itext
                
                
                
                    net.sf.jasperreports
                    jasperreports-fonts
                
            
        
  1. 定制fontsjar包(关键)
1、官网下载jasperreports-6.1.1-project.zip  
2、解压缩,查看demo的fonts,D:\jasperreports-6.1.1-project\jasperreports-6.1.1\demo\fonts\net\sf\jasperreports\fonts\dejavu目录下增加simsun.ttf(不能用windows的ttc文件直接修改后缀名的文件)  
3、修改D:\jasperreports-6.1.1-project\jasperreports-6.1.1\demo\fonts\net\sf\jasperreports\fonts目录下的fonts.xml 增加如下配置:  
  
        net/sf/jasperreports/fonts/dejavu/simsun.ttf  
        net/sf/jasperreports/fonts/dejavu/simsun.ttf  
        net/sf/jasperreports/fonts/dejavu/simsun.ttf  
        net/sf/jasperreports/fonts/dejavu/simsun.ttf  
        Identity-H  
        true  
          
            '宋体', Arial, Helvetica, sans-serif  
            '宋体', Arial, Helvetica, sans-serif  
               
      
4、D:\jasperreports-6.1.1-project\jasperreports-6.1.1\demo\fonts目录下mvn package打包  
5、把打好的jar包放到工程中即可  

同样的方法, 可以配置很多自己想要的字体.

实现代码

package com.sykd.x02jasperreports;

import net.sf.jasperreports.engine.*;

import java.util.HashMap;
import java.util.Map;


/**
 * @version:
 * @author: Nisus-Liu
 * @email: [email protected]
 * @date: 2018-01-07-19:26
 */
public class JasperCreatePdf {

    public static void main(String[] args) throws JRException {
        // 编译模板文件
        String jrxml = "D:\\Work\\JAVA\\workspace\\sykd\\sykd-parent\\bos-management\\bos-management-web\\src\\main\\webapp\\template\\report1.jrxml";
        JasperReport report = JasperCompileManager.compileReport(jrxml);
        
        // 准备需要数据
        Map parameters = new HashMap();
        parameters.put("company", "xyz");

        // 第三个参数: 必须有, 但可以是空数据源
        JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource());
        // 设置目标文件输出的路径
        String desFilePath = "C:\\Users\\Nisus\\Desktop\\TMP\\test.pdf";
        // 输出文档
        JasperExportManager.exportReportToPdfFile(jasperPrint, desFilePath);

    }

}


附:

  1. 引入坐标无法正常下载到jar包怎么办?
    笔者的解决方案是, 手动下载离线jar包, 然后install到本地仓库.
// 示例:
 mvn install:install-file -Dfile="jar包路径" -DgroupI d=net.sf.jasperreports -DartifactId=jasperreports-fonts -Dversion=6.3.1 -Dpackaging=jar
  1. 怎么用maven命令打包?(jar命令打包也可以)
    ./fonts目录下有pom.xml等文件, 所以可以用mvn package命令打成jar包. (注意确认打成的jar里的fonts.xml中是否确实添加了你的配置, 笔者第一次就是由于打好的jar包里没有我的配置, 浪费好久!)
    image.png

    image.png

参考资料:


  1. jasperreport6 导出pdf中文不显示问题解决方式 ↩

你可能感兴趣的:(Jasperreport6 导出pdf中文不显示问题终极大法)