为java程序添加字库
發(fā)現(xiàn)問題:
寫了一個小Web程序,程序很簡單,從網(wǎng)上獲取天氣數(shù)據(jù),并將這些數(shù)據(jù)繪制在圖片中發(fā)到新浪微博上。在本地Tomcat上測試,不錯,完美輸出想要的效果如下圖:
但是把這個程序放在新浪云服務(wù)器上的時候,程序就抽風(fēng)了,輸出的數(shù)據(jù)信息都為一個個小方格子。第一反應(yīng)是悲劇,亂碼了。然后各種尋找解決亂碼的辦法啊,查源頭是不是獲取天氣數(shù)據(jù)的時候就已經(jīng)亂碼了,代碼的編碼格式。折騰半天還是不行。
最終在新浪云論壇中找到了答案,由于新浪云服務(wù)器上沒有帶相應(yīng)的字庫,而我在繪制圖片的時候使用Graphics的setFont(new Font("宋體", Font.PLAIN, 22));使用drawString()繪制的字符串為宋體,而服務(wù)器中無法找到該字體庫(新浪云服務(wù)中無中文字體庫),可以使用以下代碼查看當(dāng)前計(jì)算機(jī)支持的字體庫:
//獲取系統(tǒng)中可用的字體的名字 GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fontName = e.getAvailableFontFamilyNames(); for(int i = 0; i<fontName.length ; i++) { System.out.println(fontName[i]); }解決問題:
找到原因就好辦,既然沒有字體庫那就使用咱們自己的字體庫就行了。既然沒有字體庫,那就找一個字體庫吧,網(wǎng)上一搜一大堆,不愿意上網(wǎng)找直接在本地計(jì)算機(jī)中也能找到,在C:\Windows\Fonts路徑下面也有一大堆,找一個支持中文的字體庫。
接下來就需要將這個字體庫放入項(xiàng)目中,這里我將FZHTJT.TTF(方正黑體簡體)字體庫放在了源碼下weibo4j.examples文件夾下。然后使用代碼加載字體庫就得到了Font的實(shí)例,代碼很簡單:
1、String pathString = RandImgnumUtil.class.getClassLoader().getResource("weibo4j/examples/FZHTJT.TTF").getFile(); //獲取到字體庫路徑
2、Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(pathString));//通過Font的createFont方法創(chuàng)建Font對象
3、dynamicFont = dynamicFont.deriveFont(size);//設(shè)置字體的大小
這樣就完成了自定義字體庫的加載,在程序中使用getFont方法就能夠隨意使用自己的字體庫了。
實(shí)例代碼:
Graphics g = image.getGraphics(); g.setColor(Color.WHITE); g.setFont(this.getFont(30.0f)); g.drawString("晴", 50, 180);總結(jié)
以上是生活随笔為你收集整理的为java程序添加字库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 35岁前,应该做好的十件事
- 下一篇: rt-thread nano stm32