zoukankan      html  css  js  c++  java
  • 在linux环境下使用icepdf或pdfbox将pdf转化成图片是乱码解决

       在linux环境下使用icepdf或pdfbox将pdf转化成图片是出现乱码,网上查发下是itextpdf生成pdf引用"STSong-Light"字体而linux环境下没有这个字体造成的。

    所有要从根源解决问题,就是在生成pdf的时候就给它指定系统存在的字体,这样pdf转化成图片就没问题了。

          pdfbox生成pdf时候默认用的字体为"STSong-Light",但是STSong-Light字体在全网搜索有点坑,都没找到,如果pdf不转换成图片的时候则没问题,如果业务需要,将pdf转化成图片时候,在Windows环境下没问题,放到linux就乱码,通过网上的资料发现,可以引用系统的字体。这样生成的图片就没问题,下面介绍下引用系统的字体的方法(前提是系统存在这些字体,linux下装字体请自行百度,这里不再累述)

         修改itextpdf字体代码如下:

    public Font chineseFont(int size) throws Exception {
             // 设置中文
            //BaseFont b = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); //默认的字体调用
            //获取系统字体的路径
            String prefixFont = "";
            String os = System.getProperties().getProperty("os.name");//获取系统类型
            if (os.startsWith("win") || os.startsWith("Win")) {//win下获取字体的路径
                prefixFont = "C:\Windows\Fonts" + File.separator + "STSONG.TTF";
            } else {
                prefixFont = "/usr/share/fonts" + File.separator + "STSONG.TTF"; {//linux下获取字体的路径,注意该目录下如果没有需额外安装,如我用的是STSONG字体
            }
            logger.info("获取到的系统的字体路径为:"+prefixFont);
            BaseFont b = null;
            try {
                b = BaseFont.createFont(prefixFont, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                logger.info("使用系统的宋体字体生成pdf!");
            } catch (Exception e) {
                //如果发生异常执行默认的字体
                b = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                logger.info("没有获取系统的STSONG字体,使用pdf默认体字生成pdf!");
            }
            
            return new Font(b, size, Font.NORMAL, BaseColor.BLACK);
        }

  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/iyyy/p/9347006.html
Copyright © 2011-2022 走看看