商品条形码(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群 微信订阅号:
商品条形码(JBarcode)Java版(二)的更多相关文章
- java版gRPC实战之二:服务发布和调用
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- ArcGIS Server 10 Java 版的Rest服务手动配置方法
Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...
- 微博地址url(id)与mid的相互转换 Java版
原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...
- 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容
第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...
- 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单
我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...
- 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理
温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众 ...
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
- 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发
第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...
随机推荐
- 【JAVA】Calendar
Calendar是JDK 1.1增加的类 最近使用了下Calendar发现几个很让人抓狂的问题 源码: public final static int SUNDAY = 1; public final ...
- DB2数据库参数建议(Linux)
内核参数配置: kernel.shmall=<物理内存的90%,以页为单位> kernel.shmax=<实际的物理内存> kernel.shmmni= kernel.msgm ...
- Ubuntu install Docker
首先需要说明的是,根据Docker的官方文档,Docker的安装必须在64位的机子上.这里只说明Ubuntu 14.04与16.04,我成功安装成功过Ubuntu 14.04,16.04还没有测试过, ...
- log4j日志文件 log4j.xml log4j.properties配置
1,导入log4j jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...
- <二>JDBC_通过ResultSet执行查询操作
一.ResultSet: 结果集. 封装了使用 JDBC 进行查询的结果. 1. 调用 Statement 对象的 executeQuery(sql) 可以得到结果集. 2. ResultSet 返 ...
- python: DOM 小实例
一.全选 全部取消 反选 全选:选择指定的所有项目. 全部取消: 取消所有选定的项目. 反选: 选择未选定的,之前已选定的则取消. <!DOCTYPE html> <html la ...
- linux系统安装(下)
Grub引导装载程序 目录简单介绍 /dev存放了设备文件 /dev/sad硬盘文件 root/install.log安装日志 root/kickstart包含这次安装信息,下次若需要相同安装可 ...
- PHP 使用 curl_* 系列函数和 curl_multi_* 系列函数进行多接口调用时的性能对比
在页面中调用的服务较多时,使用并行方式,即使用 curl_multi_* 系列函数耗时要小于 curl_* 系列函数. 测试环境 操作系统:Windows x64 Server:Apache PHP: ...
- 去除DataTable中的重复数据
有时需要从DataTable中抽取Distinct数据,遍历比较费劲,C#.NET中其实有更易用的方法,如下: string[] columnArray = { "columnName1&q ...
- apache2.2 做后端,增加真实ip到日志中
apache2.2使用mod_remoteip模块 一.安装 wget https://github.com/ttkzw/mod_remoteip-httpd22/raw/master/mod_rem ...