生成条形码 code39 和 code 128

依赖

      
			net.sf.barcode4j
			barcode4j-light
			2.0
      

工具类

package com.hxlwl.logistics.utils;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;

import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.krysalis.barcode4j.HumanReadablePlacement;
import org.krysalis.barcode4j.impl.code128.Code128Bean;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;


public class BarcodeUtil {
	// 阿里云API的bucket名称
	public static final String BACKET_NAME = "hxl-upload";
	// 阿里云API的文件夹名称
	public static final String FOLDER = "code/";
	// 图片访问地址
	public static final String URL = "https://hxl-upload.oss-cn-hangzhou.aliyuncs.com/";

	/**
	 * 生成文件
	 *
	 * @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
	 * @return
	 */
	public static InputStream generate(String msg) {
		ByteArrayOutputStream ous = new ByteArrayOutputStream();
		generate(msg, ous);
		InputStream inputStream = new ByteArrayInputStream(ous.toByteArray());
		return inputStream;
	}

	/**
	 * 生成到流
	 *
	 * @param msg
	 * @param ous
	 */
	public static void generate(String msg, OutputStream ous) {
		if (StringUtils.isEmpty(msg) || ous == null) {
			return;
		}

		Code39Bean bean = new Code39Bean();
//设计方案 : 140 , 1.5

		// 精细度 每英寸所打印的点数或线数,用来表示打印机打印分辨率。
		final int dpi = 140;
		// module宽度
		final double moduleWidth = UnitConv.in2mm(1.5f / 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);
		}
	}

	/**
	 * 生成code128条形码
	 *
	 * @param height        条形码的高度
	 * @param width         条形码的宽度
	 * @param message       要生成的文本
	 * @param withQuietZone 是否两边留白
	 * @param hideText      隐藏可读文本
	 * @return 图片对应的字节码
	 */
	public static byte[] generateBarCode128(String message, Double height, Double width, boolean withQuietZone,
			boolean hideText) {
		Code128Bean bean = new Code128Bean();
		// 分辨率
		int dpi = 300;
		// 设置两侧是否留白
		bean.doQuietZone(withQuietZone);

		// 设置条形码高度和宽度
		bean.setBarHeight((double) ObjectUtils.defaultIfNull(height, 9.0D));
		if (width != null) {
			bean.setModuleWidth(width);
		}
		// 设置文本位置(包括是否显示)
		if (hideText) {
			bean.setMsgPosition(HumanReadablePlacement.HRP_NONE);
		}
		// 设置图片类型
		String format = "image/png";

		ByteArrayOutputStream ous = new ByteArrayOutputStream();
		BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi, BufferedImage.TYPE_BYTE_BINARY, false,
				0);

		// 生产条形码
		bean.generateBarcode(canvas, message);
		try {
			canvas.finish();
		} catch (IOException e) {
			// ByteArrayOutputStream won't happen
		}

		return ous.toByteArray();
	}

	/**
	 * 获取code39条形码
	 * 
	 * @param msg
	 * @return
	 */
	public static String getBarcode(String msg) {
		Calendar calendar = Calendar.getInstance();
		String fileName = calendar.getTimeInMillis() + ".png";// 生成随机文件名
		InputStream inputStream = generate(msg);
		AliyunOSSClientUtil.uploadFile2OSS(inputStream, fileName, FOLDER);
		return URL + FOLDER + fileName;
	}

	/**
	 * 获取code128条形码
	 * 
	 * @param msg
	 * @return
	 */
	public static String getBarcode128(String msg) {
		byte[] bytes = generateBarCode128(msg, 10.0, 0.4, false, true);
		// ByteArrayInputStream bin = new ByteArrayInputStream(bytes);
		Calendar calendar = Calendar.getInstance();
		String fileName = calendar.getTimeInMillis() + ".png";// 生成随机文件名
		InputStream inputStream = new ByteArrayInputStream(bytes);
		AliyunOSSClientUtil.uploadFile2OSS(inputStream, fileName, FOLDER);
		return URL + FOLDER + fileName;
	}
//
//	public static void main(String[] args) {
//		String msg = "70255403";
//		Calendar calendar = Calendar.getInstance();
//		String fileName = calendar.getTimeInMillis() + ".jpg";// 生成随机文件名
//		String path = URL + FOLDER + fileName;
//		generateFile(msg, path);
//	}
}

 

你可能感兴趣的:(生成条形码 code39 和 code 128)