商品條形碼(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群          微信訂閱號:

           

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM