概念
条形码是由一定的字符,数字及符号组成,用以表达一组信息的图形标识符。
它可以标出物品的商品名称、生产日期、图书分类号,邮件起止地点等。
场景
因而在商品流通、图书管理、邮政管理等许多领域得以广泛的应用。
方案
jbarcode、barcode4j、zxing
本案例以 barcode4j 为例
barcode4j开源Java条形码生成库。支持多种编码格式,比如:code-39,code-128等
网盘链接 提取码: 7664
代码
package com.yc.util;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.krysalis.barcode4j.HumanReadablePlacement;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;
/**
* 条形码工具类 二维码推荐Zxing
* @author 38929
* @date 2021年1月5日 下午3:17:10
*/
public class BarcodeUtil {
/**
* 生成文件到本地磁盘
*
* @param msg 条形码信息
* @param path 存储路径
* @return
*/
public static File generateFile(String msg, String path) {
File file = new File(path);
try {
generate(msg, new FileOutputStream(file));
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
return file;
}
/**
* 生成字节
*
* @param msg
* @return
*/
public static byte[] generate(String msg) {
ByteArrayOutputStream ous = new ByteArrayOutputStream();
generate(msg, ous);
return ous.toByteArray();
}
/**
* 生成到流
*
* @param msg
* @param ous
*/
public static void generate(String msg, OutputStream ous) {
if ("".equals(msg) || ous == null) {
return;
}
//Code39条形码多用于物流跟踪、生产线流程等方面,也是最常用的条形码类型之一
Code39Bean bean = new Code39Bean();
// 精细度
final int dpi = 150;
// module宽度
final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
// 配置对象
bean.setModuleWidth(moduleWidth);
bean.setWideFactor(3);
bean.doQuietZone(false);
bean.setMsgPosition(HumanReadablePlacement.HRP_NONE);
String format = "image/png";
try {
// 输出到流 绘制图片类
BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi,
BufferedImage.TYPE_BYTE_BINARY, false, 0);
// 生成条形码
bean.generateBarcode(canvas, msg);
// 结束绘制
canvas.finish();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
//测试
public static void main(String[] args) {
String msg = "yc001";
StringBuffer path = new StringBuffer();
path.append("src/com/yc/Barcode/barcode");
path.append( 1 );
path.append(".jpg");
//String path2 = "src/com/yc/Barcode/barcode1.jpg";
generateFile(msg, path.toString());
}
}
``
**扩展**
Zing生成二维码