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

  • 相关阅读:
    PHP header函数设置http报文头示例详解
    在Windows下为PHP安装redis扩展
    CMD模拟http请求
    strstr使用
    memset使用
    QT修改应用程序图标
    纪念下自学QT 第十天 终于写成了串口调试助手
    QT设置textEdit光标到末尾
    QT设置TextEdit颜色
    QT设置QToolBar带有图标和文字
  • 原文地址:https://www.cnblogs.com/iyyy/p/9347006.html
Copyright © 2011-2022 走看看