java引入自定義字體的方法

java項目中,有時我們需要引入一些外部的自定義的字體

先說下背景:最近接手別人項目的時候遇到了一個坑(>.<)

接手一個迭代過多次的項目(未正式提供給客戶使用,只給客戶試用了幾次)。在實現了新需求,眼瞅着可以再發一個迭代時,卻沒想到卻遇到了一個坑。自測進行批量生成pdf任務的時候,發現了一個bug。執行多個批量生成任務之後,竟然發現本機硬盤存儲空間所剩無幾了,之前可是還是100多個G的。

趕緊使用360進行磁盤清理,發現空間竟然被臨時文件佔掉了80多個G,打斷點仔細排查之後,終於定位到了問題:接手前的代碼中有對圖片進行操作,中間引入了自定義的字體,在引入字體的時候每次都會產生一個20M左右的.tmp臨時文件,然後就抓緊進行了處理。

下面有兩種方式:

第一種:可以避免產生.tmp臨時文件,避免大批量引入的時候吃掉硬盤的空間(個人推薦)

直接上代碼:

	//filepath字體文件的路徑
	private static java.awt.Font getSelfDefinedFont(String filepath){
        java.awt.Font font = null;
        File file = new File(filepath);
        try{
            font = java.awt.Font.createFont(java.awt.Font.TRUETYPE_FONT, file);
            font = font.deriveFont(java.awt.Font.PLAIN, 40);
        }catch (FontFormatException e){
            return null;
        }catch (FileNotFoundException e){
            return null;
        }catch (IOException e){
            return null;
        }
        return font;
    }

第二種方式:原先實現方法–需要注意會產生.tmp臨時文件,但是好像挺多人用這種方式(個人不推薦)

	private static java.awt.Font getSelfDefinedFont(String filepath){
        java.awt.Font font = null;
        File file = new File(filepath);
        try{
            FileInputStream fi = new FileInputStream(file);
            BufferedInputStream fb = new BufferedInputStream(fi);
            font = java.awt.Font.createFont(java.awt.Font.TRUETYPE_FONT, fb);
            font = font.deriveFont(java.awt.Font.PLAIN, 40);
        }catch (FontFormatException e){
            return null;
        }catch (FileNotFoundException e){
            return null;
        }catch (IOException e){
            return null;
        }
        return font;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章