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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM