Java引用外部字體(路徑引用)的一些坑

一 緣由

後端負責字體...哎,咱們公司的前端真的任性啊...前端

而後,一路踩了jvm關於字體的坑,重點是,java的報錯很隨意,甚至不報錯,建議直接看最後面.java

 

二 代碼

正常要windows裝一次字體,linux裝一次字體,這樣的話系統就能直接拿到了。linux

可是這樣一點都不兼容,加個字體,還要裝個兩次,反程序員啊。(後面你會發現更加反程序員)程序員

那麼,只能把字體放到哦靜態文件裏面,而後引用外部字體了。web

 

private static Font definedFont;
private static final String basePath = System.getProperty("user.dir") + File.separator + "web" + File.separator + "src" + File.separator + "main" + File.separator + "resources"
+ File.separator + "static" + File.separator + "backToSchool";
/**
* 引用外部字體
*/
public static void setFont() {
String fontUrl = basePath + File.separator + "fonts" + File.separator + "SourceHanSans-Bold.ttf";
logger.info(".setFont.fontUrl={}", fontUrl);
try {
Font font = Font.createFont(Font.TRUETYPE_FONT, new File(fontUrl));
//設置字體大小,float型
setDefinedFont(font.deriveFont(FONT_SIZE));
} catch (Exception e) {
logger.error(".setFont.e={}", e.getMessage(), e);
throw new ActivityBusinessException(BtsErrorCode.SET_FONT_ERROR);
}
}
 
 
public static Font getDefinedFont() {
return definedFont;
}

public static void setDefinedFont(Font font) {
definedFont = font;
}
 

 

三 坑

其實代碼很簡單,難點在於字體文件。windows

 

坑一

一開始,需求給的otf字體我在開發機和測試機(windows/linux)都安裝了,而後一跑,正常,美滋滋。後端

可是這樣一點都不程序員,我還要在正式環境裝一次字體,特傻。jvm

 

因而,只能引用外部字體。學習

 

坑二

前頭說了,是otf文件,用正確的代碼跑一下,很好一個報錯都沒有!(此處應有掌聲!)測試

可是,就是不顯示字體,甚至不用默認字體,什麼都沒有輸出,我心想,java居然沒有報錯????

 

好吧百度,1個小時以後。

嗯,我只能說這個引用外部的otf在百度上,根本沒有任何解決方法。

甚至問這個問題的人,答案也是叫咱們在操做系統安裝,本地引用。

 

而後,谷歌,stackflow。

大神直接fxxk了一下java的awt,大意就是java說支持引用otf,可是,不支持外部引用otf,最後說了一句awt寫的就是一坨翔。

小數幾個直接爆粗口的答案啊,感受這哥們也和我那樣浪費一大堆時間,在這傻逼問題上。

 

因而,只能叫需求給ttf格式的字體。

 

坑三

很好使用ttf外部引用,謝天謝地,終於報錯了。

FONT NAME ERROR xxxxxx

什麼?字體名字不正確的?

大哥,我是根據路徑引用的哦,不是根據字體名字去系統那裏取的哦?

是的,這個就是我說的java的報錯很隨意

 

那麼只能排除了,用個系統的內部字體試一下,正常無報錯。

我那個糾結啊,也就是說外部引用,路徑引用代碼沒錯,並且看了源碼,外部引用也就是路徑引用。

 

也就是說需求給的ttf有問題,反映一下問題,需求說你想要怎樣的ttf呢?

鬼子知道啊?我也想知道啊!

 

因而,我只能裝個設計字體的軟件來找一下,兩個ttf文件的不一樣!

 

坑四

設計字體的軟件怎麼操做,我不想說,太反程序員了,我擔憂說出來,會害了大家。

 

說個大體思路。

用windows打開後,會發現正常的有個數字簽名。

也就是用設計字體的文件加個數字簽名就行了!

 

其實我是倒由於果,再改以前我都不知道有數字簽名這玩意

直接把一個正常的ttf的非必要屬性,直接覆蓋了不正常的ttf的非必要屬性。而後,改字體名稱什麼的,你會發現上圖,基本沒幾個屬性同樣....(夠反程序員了吧?)

 

至此,功能徹底已經實現。

 

坑五

大家真覺得這樣就結束了?

我實現了這個功能以後,還要寫點字進去,而後居中動態靠右。

可是,這個網頁在手機上的,也就是說要搞手機適配!

而後,和先後端的老大說了下,這個需求要實現後端機型適配,獲取長寬來寫字。

 

最終,兩方大佬逼迫前端學習技術去了,也就是說我搞了這麼久,一點用都沒有....

 

四 結論

字體仍是給前端作吧...

相關文章
相關標籤/搜索