在linux環境下使用icepdf或pdfbox將pdf轉化成圖片是出現亂碼,網上查發下是itextpdf生成pdf引用"STSong-Light"字體而linux環境下沒有這個字體形成的。linux
全部要從根源解決問題,就是在生成pdf的時候就給它指定系統存在的字體,這樣pdf轉化成圖片就沒問題了。字體
pdfbox生成pdf時候默認用的字體爲"STSong-Light",可是STSong-Light字體在全網搜索有點坑,都沒找到,若是pdf不轉換成圖片的時候則沒問題,若是業務須要,將pdf轉化成圖片時候,在Windows環境下沒問題,放到linux就亂碼,經過網上的資料發現,能夠引用系統的字體。這樣生成的圖片就沒問題,下面介紹下引用系統的字體的方法(前提是系統存在這些字體,linux下裝字體請自行百度,這裏再也不累述)spa
修改itextpdf字體代碼以下:code
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); }