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