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