条形码
条形码,barcode,将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。
世界上常用的码制有:
EAN条形码、UPC条形码、25条形码、交叉25条形码、库德巴条形码、Code 39条形码和Code 128条形码等。
EAN条形码:
国际通用的符号体系,是一种长度固定、无含意的条形码,所表达的信息全部为数字,主要应用于商品标识 。
Code 39条形码和Code 128条形码:
目前国内企业内部的自定义码制,可以根据需要确定条形码的长度和信息,它编码的信息可以是数字,也可以包含字母,主要应用于工业生产线领域、图书管理等,如表示产品序列号、图书、文档编号等 [7] 。
代码案例
代码输出效果:
pom.xml
<!-- 条形码 -->
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j</artifactId>
<version>2.1</version>
</dependency>
输出代码:
package com.what21.utils.code;
import org.apache.commons.lang.StringUtils;
import org.krysalis.barcode4j.impl.code128.EAN128Bean;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.impl.upcean.EAN13Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;
import java.awt.image.BufferedImage;
import java.io.*;
public class BarcodeUtils {
/**
* 生成到流(Code39)
*
* @param message
* @param output
*/
public static void generateWithCode39(String message, OutputStream output) {
if (StringUtils.isEmpty(message) || output == null) {
return;
}
Code39Bean bean = new Code39Bean();
// 精细度
final int dpi = 150;
// module宽度
final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
// 配置对象
bean.setModuleWidth(moduleWidth);
bean.setWideFactor(3);
bean.setBarHeight(5);
// 白边显示
bean.doQuietZone(false);
String format = "image/png";
try {
// 输出到流
BitmapCanvasProvider canvas = new BitmapCanvasProvider(output, format, dpi,
BufferedImage.TYPE_BYTE_BINARY, false, 0);
// 生成条形码
bean.generateBarcode(canvas, message);
// 结束绘制
canvas.finish();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 生成字节(Code39)
*
* @param message
* @return
*/
public static byte[] generateWithCode39(String message) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
generateWithCode39(message, output);
return output.toByteArray();
}
/**
* 生成到流(Code128)
*
* @param message
* @param output
*/
public static void generateWithCode128(String message, OutputStream output) {
if (StringUtils.isEmpty(message) || output == null) {
return;
}
EAN128Bean bean = new EAN128Bean();
// 精细度
final int dpi = 150;
// module宽度
final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
// 配置对象
bean.setModuleWidth(moduleWidth);
bean.setCodeset(7);
// 高度
bean.setBarHeight(5);
// 白边显示
bean.doQuietZone(true);
String format = "image/png";
try {
// 输出到流
BitmapCanvasProvider canvas = new BitmapCanvasProvider(output, format, dpi,
BufferedImage.TYPE_BYTE_BINARY, false, 0);
// 生成条形码
bean.generateBarcode(canvas, message);
// 结束绘制
canvas.finish();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 生成到流(EAN13)
*
* @param message
* @param output
*/
public static void generateWithEAN13(String message, OutputStream output) {
if (StringUtils.isEmpty(message) || output == null) {
return;
}
EAN13Bean bean = new EAN13Bean();
// 精细度
final int dpi = 150;
// module宽度
final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
// 配置对象
bean.setModuleWidth(moduleWidth);
// 高度
bean.setBarHeight(5);
// 白边显示
bean.doQuietZone(true);
String format = "image/png";
try {
// 输出到流
BitmapCanvasProvider canvas = new BitmapCanvasProvider(output, format, dpi,
BufferedImage.TYPE_BYTE_BINARY, false, 0);
// 生成条形码
bean.generateBarcode(canvas, message);
// 结束绘制
canvas.finish();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
try {
String msg1 = "123456789012345";
String path1 = "d://barcode1.png";
generateWithCode39(msg1, new FileOutputStream(new File(path1)));
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
try {
String msg2 = "123456789012345";
String path2 = "d://barcode2.png";
generateWithCode128(msg2, new FileOutputStream(new File(path2)));
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
try {
String msg3 = "123456789012";
String path3 = "d://barcode3.png";
// Message must be 12 or 13 characters long
generateWithEAN13(msg3, new FileOutputStream(new File(path3)));
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)