商品条形码(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 : [email protected]
 * @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群          微信订阅号:

           

  

时间: 2024-10-01 01:51:43

商品条形码(JBarcode)Java版(二)的相关文章

微博地址url(id)与mid的相互转换 Java版

原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分(蓝色)为一串貌似随机的字符串. 如果通过方法能计算出蓝色字串与返回的数组里的对应关系则好解决多了. 首先分组蓝色字串 ,从后往前4个字符一组,得到以下三组字符:z8ElgBLeQ 将它们分别转换成62进制的数值则为 35, 2061702, 8999724  将它们组合起来就是一串 3520617

微信公众平台深度开发JAVA版第二季视频教程

微信公众平台深度开发JAVA版第二季(九宝饭店微信点餐系统)视频教程下载密码:qa4a     联系QQ:1026270010 微信作为当前流行的通信社交软件有了上亿的用户量,几乎每一个只能手机都要安装微信.但是,市场上对于JAVA开发微信公众平台的资料却少之又少,多数的资料一般是其他语言的.因此,主讲老师经过潜心研究.认真准备,录制了这套针对JAVA开发语言的微信公众平台开发教程. 1.课程研发环境 开发语言:JAVA WEBServer:TOMAT DATABASE:MySQL 开发工具:m

微信公众平台深度开发JAVA版

课程讲师:翟东平 课程分类:Java 适合人群:高级 课时数量:18(30小节)课时 用到技术:微信公众平台,微信,java涉及项目:九宝饭店微信点餐系统 咨询QQ:1609173918 下载链接:http://pan.baidu.com/s/1dDB4ax7 密码:ebaw 1.课程研发环境 开发语言:JAVA WEBServer:TOMAT DATABASE:MySQL 开发工具:myeclipse.MySQL-Front等 其他:在手机应用中的CSS3+div布局.DWR.mybatis.

【养孩子这么贵,还是生一个算了吧】设计模式之单例模式Java版

定义 单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点.所以在需要保证让一个类只有一个实例时,可以参考采用单例模式.通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.唯一的办法就是,让类自身负责保存它的唯一实例.这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法. 方法一 其一,不让其他类去实例化自己类的实例,那我们很容易想到可以通过定义一个private的构造函数.这是因为如果我们自定义了一个private的构造函数,那么系统默认的

第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 本次的内容: 实现:分享到朋友圈,qq,qq空间,微信朋友的功能. 基础接口 判断当前客户端版本是否支持指定JS接口 wx.checkJsApi({ jsApiList: ['chooseImage'], // 需要检测的JS接

微博URL短网址生成算法原理及(java版、php版实现实例)

短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接. 例如:http://t.cn/SzjPjA 短网址服务,可能很多朋友都已经不再陌生,现在大部分微博.手机邮件提醒等地方已经有很多应用模式了,并占据了一定的市场.估计很多朋友现在也正在使用. 看过新浪的短连接服务,发现后面主要有6个字符串组成,于是第一个

Selenium2(webdirver)入门之环境搭建(Java版)

Selenium2(webdirver)入门之环境搭建(Java版) 一.开发环境: 1.JDK1.6 2.Eclipse:Version: Kepler Service Release 1,下载地址:http://www.eclipse.org/downloads/ 3.Selenium:selenium-java-2.52.0.zip,下载地址:http://docs.seleniumhq.org/download/ 解压selenium-java包,这个包里面包含四部分,如下图: 二.新建

家用环境下部署wifidog认证服务器(java版)

本文所讲的是基于一个java版wifidog认证服务器的开源项目在windows环境下搭建wifidog认证服务器,并实现用户名密码的认证. 大致步骤如下: 一,准备 1.搭建硬件及网络环境 a.需要普通路由器1个,刷了apfree固件的路由器一个,Windows电脑一台,网线若干,宽带网络. b.按照下图的拓扑结构进行搭建. 2.获取软件及工具并安装 a.获取并安装jdk6 b.获取并安装MySQL c.安装MyEclipse d.获取java版wifidog认证服务器源码(https://g

经典排序算法(Java版)

经典排序算法(Java版)  转载 1.冒泡排序 Bubble Sort最简单的排序方法是冒泡排序方法.这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮.在冒泡排序算法中我们要对这个“气泡”序列处理若干遍.所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确.如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置.显然,处理一遍之后,“最轻”的元素就浮到了最高位置:处理二遍之后,“次轻”的元素就浮到了次高位

webservice的Axis2入门教程java版

本文转自百度文库 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring.JSON等技术.这些都将在后面的系列教程中讲解.在本文中主要介绍了如何使用Axis2开发一个不需要任何配置文件的WebService,并在客户端使用Java和C#调用这个WebService. 一.Axis2的下载和安装 读者可以从如下的网址下载Axis2的最新版本: