適用讀者:用barcode4j生成自定義字體(非系統自帶的字體)的條形碼; java生成圖片 java
需求的產生: ide
生成條形碼圖片的時候 生成的字體有指定的標準的 必須使用OCR-B 10 BT.ttf字符集 字體
可是ocr-b不是系統自帶字體 因此軟件中要手動加載字體 spa
方案: 指針
我如今的作法是修改barcode4j的源碼 加載本身的字體 關鍵代碼以下: code
修改類org.krysalis.barcode4j.output.java2d.Java2DCanvasProvider#deviceText: 圖片
Font font = null; if("OCR-B".equalsIgnoreCase(fontName)) { try { String path = Java2DCanvasProvider.class.getResource("OCR-B 10 BT.ttf").toURI().getPath(); font = Font.createFont(Font.TRUETYPE_FONT, new File(path)); font = font.deriveFont(Font.BOLD, (int)Math.round(fontSize)); // 粗體比Font.PLAIN清晰 } catch (Exception e) { e.printStackTrace(); } } else { font = new Font(fontName, Font.PLAIN, (int)Math.round(fontSize)); } //Font font = new Font(fontName, Font.PLAIN, (int)Math.round(fontSize)); // 以前的代碼
注意:字體資源文件OCR-B 10 BT.ttf在同級目錄下; fontName爲生成圖片傳的參數。生成條形碼的時候能夠指定fontName。 資源
寫的比較馬虎 這裏僅僅是一個思路吧 get
------------------- 源碼
2013-02-04 修改
String path = Java2DCanvasProvider.class.getResource("OCR-B 10 BT.ttf").toURI().getPath();
font = Font.createFont(Font.TRUETYPE_FONT, new File(path));
若是須要從新打jar包,這個代碼會報錯滴。若是是直接把源碼放在項目裏沒問題。
報錯是因了path是指向了jar裏面的字體資源文件。最後獲得的物理路徑找不到。new File(path)的時候會報空指針異常。
這地方能夠改寫成
InputStream is = Java2DCanvasProvider.class.getResourceAsStream("OCR-B 10 BT.ttf");
font = Font.createFont(Font.TRUETYPE_FONT, is);
這樣打成jar之後沒問題了。