zoukankan      html  css  js  c++  java
  • 商品条形码(JBarcode)Java版(二)

      下午开了一个下午的会议,其实开会我听不进去,因为今天妖都特别冷,下班在公司等待小媳妇一个钟头,然后带着她去吃饭,吃完饭回到家。她做运动,我就开始慢慢整理我自己的小博客。

    ——题记

       

      先说一下,写这篇文章的目的,是为了完善上一篇文章大家的疑问,虽然是一个简单的功能,但是上一次只是简单的做出来一个功能,而这一次是延续上一次功能的基础上面,做一些优化工作,给自己生活增添一些记录,提出来供大家学习,也是自己学习的一种方式。每次学完新的东西,就要梳理,也慢慢成为生活中的一部分,感觉这是一种的自我习惯。

     

      这里用到一些Jar包,我就不多说了,下载地址满天飞

      JBarcode下载地址,下载最新版本:jbarcode-0.2.8.jar,我基本上都是去官网去下载一些东西,一些你不知道的答案,在网络上基本上都有,所以还是建议大家都多去官网浏览。

     

      

      下面开始展示成果代码,你自己下载这个Utils工具类就可以应用在自己的项目中。(备注:根据自己需求设定相应的参数即可

      

     

      

     

    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群          微信订阅号:

               

     

     

      

  • 相关阅读:
    非重复随机序列生成算法
    IE浏览器整页截屏程序
    地铁线路图的设计与实现
    拓扑排序算法的一个应用
    洛谷 P4450 双亲数
    洛谷 P2183 [国家集训队]礼物
    洛谷 P4159 [SCOI2009]迷路
    CF86D Powerful array
    Catalan数
    SP3266 KQUERY Kquery
  • 原文地址:https://www.cnblogs.com/yuchuan/p/JBarcode2.html
Copyright © 2011-2022 走看看