商品条形码(JBarcode)Java版(二)
下午开了一个下午的会议,其实开会我听不进去,因为今天妖都特别冷,下班在公司等待小媳妇一个钟头,然后带着她去吃饭,吃完饭回到家。她做运动,我就开始慢慢整理我自己的小博客。
——题记
先说一下,写这篇文章的目的,是为了完善上一篇文章大家的疑问,虽然是一个简单的功能,但是上一次只是简单的做出来一个功能,而这一次是延续上一次功能的基础上面,做一些优化工作,给自己生活增添一些记录,提出来供大家学习,也是自己学习的一种方式。每次学完新的东西,就要梳理,也慢慢成为生活中的一部分,感觉这是一种的自我习惯。
这里用到一些Jar包,我就不多说了,下载地址满天飞
JBarcode下载地址,下载最新版本:jbarcode-0.2.8.jar,我基本上都是去官网去下载一些东西,一些你不知道的答案,在网络上基本上都有,所以还是建议大家都多去官网浏览。
下面开始展示成果代码,你自己下载这个Utils工具类就可以应用在自己的项目中。(备注:根据自己需求设定相应的参数即可)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | package com.kinya.liuyc.barcode; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.SimpleDateFormat; import java.util.Date; import org.jbarcode.JBarcode; import org.jbarcode.encode.EAN13Encoder; import org.jbarcode.encode.InvalidAtributeException; import org.jbarcode.paint.EAN13TextPainter; import org.jbarcode.paint.WidthCodedPainter; import org.jbarcode.util.ImageUtil; /** * 简易生成条形码(EN-13码) * * @============================================= * * @author : Liuyc * @create : 2015-4-8 下午06:19:21 * @update : * @bolg : http://www.cnblogs.com/yuchuan/ * @csdn : http://blog.csdn.net/l_lycos * @E-mail : 763999883@qq.com * @desc : * * @============================================= */ public class TestBarcode { /** * 生成商品条形码 * * @param filePath * 商品条形码图片存放路径:C://barcode//images// * * @param barCode * 商品条形码:13位 * @param imgFormat * 图片格式 * * @return 图片存放路径+图片名称+图片文件类型 */ public static String createBarCode(String savePath, String jbarCode, String imgFormat) { // 校验全部省略…… // if(StringUtils.isNotEmpty(savePath)){ // // return null; // } // if(StringUtils.isNotEmpty(jbarCode)){ // return null; // } // if(StringUtils.isNotEmpty // (imgFormat)){ // return null; // } // if( jbarCode.length()!=13){ // return null; // } try { BufferedImage bi = null ; int len = jbarCode.length(); // 实例化JBarcode // 这里三个参数,必要填写 JBarcode jbarcode13 = new JBarcode(EAN13Encoder.getInstance(), WidthCodedPainter.getInstance(), EAN13TextPainter.getInstance()); // 获取到前12位 String barCode = jbarCode.substring( 0 , len - 1 ); // 获取到校验位 String code = jbarCode.substring(len - 1 , len); String checkCode = jbarcode13.calcCheckSum(barCode); if (!code.equals(checkCode)) { return "EN-13 条形码最后一位校验码 不对,应该是: " + checkCode; } /* * 最重要的是这里的设置,如果明白了这里的设置就没有问题 如果是默认设置, * 那么设置就是生成一般的条形码 如果不是默认 * 设置,那么就可以根据自己需要设置 */ // 尺寸,面积,大小 jbarcode13.setXDimension(Double.valueOf( 0.8 ).doubleValue()); // 条形码高度 jbarcode13.setBarHeight(Double.valueOf( 30 ).doubleValue()); // 宽度率 jbarcode13.setWideRatio(Double.valueOf( 20 ).doubleValue()); // 是否校验最后一位,默认是false jbarcode13.setShowCheckDigit( true ); // 生成二维码 bi = jbarcode13.createBarcode(barCode); // 定义图片名称 SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddhhmmss" ); String imgName = sdf.format( new Date()) + "_" + jbarCode; // 保存二维码图片 FileOutputStream fileOutputStream = null ; String imgPath = savePath + imgName + "." + imgFormat; try { try { savePath = URLDecoder.decode(savePath, "UTF-8" ); } catch (UnsupportedEncodingException uee) { uee.printStackTrace(); savePath = "C://barcode//images//" ; } File dirFile = new File(savePath); if (!dirFile.exists()) { dirFile.mkdirs(); } fileOutputStream = new FileOutputStream(imgPath); } catch (Exception e) { e.printStackTrace(); return null ; } ImageUtil.encodeAndWrite(bi, imgFormat, fileOutputStream, 96 , 96 ); fileOutputStream.close(); // 返回路径 return imgPath; } catch (Exception e) { e.printStackTrace(); return null ; } } /** * @param args * @throws InvalidAtributeException */ public static void main(String[] args) throws InvalidAtributeException { String path = TestBarcode.createBarCode( "D://test//" , "6937748304340" , ImageUtil.JPEG); System.out.println(path); } } |
通过这一次的优化,让我知道源码的重要性,想要了解一些深入的东西,你需要了解到内部,用学习知识来武装自己,菜鸟学习,大鸟勿喷,只是记录而已,顺便写给那些不爱动脑筋的孩子们,如果您喜欢我这种方式,请点击右下角的 推荐,谢谢。!!!
睡了,小媳妇的运动也做完了。。。
附:上一篇链接地址:商品条形码(JBarcode)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接
原文链接:http://www.cnblogs.com/yuchuan/p/JBarcode2.html
如果您觉得本文不错,不妨推荐一下,让更多的读者得到收获。
如果您有什么其他见解,不妨留言,咱大伙一起讨论一下。三人行,必有我师。互相学习,互相进步!
如果本文有什么不妥或者错误的地方,请您一定要在评论中指出,以免误人子弟!非常感谢您的不吝赐教!
推广:
如何加入我们:QQ群 微信订阅号:


您的资助是我最大的动力!
金额随意,欢迎来赏!
欢迎大家关注我的个人博客 Lycos | 小站 !由于最近没时间处理,原域名http://www.liuyuchuan.com暂时停止使用
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 智能Agent如何改造传统工作流:从搜索到全能助手