使用pdfBox實現pdf轉圖片,解決中文方塊亂碼等問題

 1、引入依賴

<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>

 2、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"));

 3、PNG中文方塊亂碼

  查看linux服務器上的字體庫以下。linux

  

  轉換後的PNG以下。apache

   

  日誌中打印出相似這樣的日誌(例:Using fallback XXX for CID-keyed font STSong-Light),就說明系統沒有安裝STSong-Light字體,pdfbox使用XXX字體來替代了。若是出現方塊,就說明沒有這種字體,而且替代字體也沒有,日誌也有相應的其餘提示。緩存

 4、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以下。字體

  

相關文章
相關標籤/搜索