适用读者:用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之后没问题了。