zoukankan      html  css  js  c++  java
  • 使用PdfBox实现pdf转图片,解决中文方块乱码等问题

     一、引入依赖
    <dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>fontbox</artifactId>
    <version>2.0.13</version>
    </dependency>
    <dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.13</version>
    </dependency>
     二、PDF转PNG代码
    String pdfBase64 = "XXXXX";
    PDDocument pdDocument = PDDocument.load(Base64Utils.decodeFromString(pdfBase64));
    PDFRenderer renderer = new PDFRenderer(pdDocument);
    BufferedImage bufferedImage = renderer.renderImage(0);
    ImageIO.write(bufferedImage, "png", new File("xxx.png"));
     三、PNG中文方块乱码
      查看linux服务器上的字体库如下。

      

      转换后的PNG如下。

       

      日志中打印出类似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light字体,pdfbox使用XXX字体来替代了。如果出现方块,就说明没有这种字体,并且替代字体也没有,日志也有相应的其他提示。

     四、linux添加字体库
      可以选择STSong-Light字体,而我这里选择simsun.ttf字体。

    #cd /usr/share/fonts/ // 进入系统自带的字体目录
    #mkdir myfonts // myfonts 是你自己随便取得文件夹名字,一定要有这一步
    #将字体文件拷贝到这个文件夹下,在cd /usr/share/fonts/目录下执行以下命令
    #mkfontscale
    #mkfontdir
    #fc-cache -fv //更新字体缓存
    #fc-list // 查看系统中所有得字体,可用于测试是否安装字体成功

    如果 /usr/share/fonts/ 目录当前用户没有权限,可以在 ~/.fonts/ 目录下新增字体库,操作步骤和上面一样。
    注意:一定要创建字体对应的文件夹,如果字体直接放在fonts目录,不会生效。

      新增字体之后,可以看到字体库列表中有如下 宋体 的字样了。

      

      最终转换后正常的PNG如下。

      
    ————————————————
    版权声明:本文为CSDN博主「胡峻峥」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_22845447/article/details/88386443

  • 相关阅读:
    [转]实现财务自由的6大步骤
    [转] js 实现table每列可左右拖动改变列宽度
    [转]在Excel中使用SQL语句实现精确查询
    [书目20150727]有效沟通-余世维
    [书目20150727]选择重于一切(扎克伯格给年轻人的37个人生忠告)
    [转]把汉字写“绝”了
    [转]《间架结构92法》
    深圳社保转入
    广州社保转出
    [转]利用telnet进行SMTP的验证
  • 原文地址:https://www.cnblogs.com/ning-xiaowo/p/12096214.html
Copyright © 2011-2022 走看看