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