JDK版本非1.8的使用jar包是 barcode4j-light.jar
下载地址:https://sourceforge.net/projects/barcode4j/files/barcode4j/Barcode4J%202.0/
百度网盘地址: https://pan.baidu.com/s/1limgwFzJ9W4LAuesC_YHfg?pwd=n1hp
提取码: n1hp
导入jar包就不做演示,自己百度一下怎么引入jar包到eclipse
注意点: 当前写法是BYD老项目的写法,返回方式、取值方式(记得改成自己项目的交互方式)
导入完成编写BarcodeUtil工具类控制层调用
package com.infoservice.dms.common.utils;
import org.apache.commons.lang.ObjectUtils;
import org.krysalis.barcode4j.HumanReadablePlacement;
import org.krysalis.barcode4j.impl.code128.Code128Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* @ClassName BarCodeUtils
* @Description TODO
* @Author huangxiongwei
* @Date 2022/4/25
* @Version 1.0
**/
public class BarCodeUtils {
/**
* 生成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();
}
}
控制层调用
/**
* 获取生成的code128条形码
*
* @param msg
* @return
*/
public void String getBarcode128() throws IOException,BizException {
//比亚迪获取前台参数方式
ActionContext act = ActionContext.getContext();
RequestWrapper request = act.getRequest();
//获取传递的值
String parameter = request.getParamValue("DELIVERY_NO");
//通过Code128公具类生成条形码的数据流
byte[] bytes = generateBarCode128(parameter, 10.0, 0.4, false, true);
//拿到条形码数据流
InputStream inputStream = new ByteArrayInputStream(bytes);
//丢到把条形码数据流转换为Base64方法中
String Base64String = getBase64FromInputStream(inputStream);
//返回结果去前台(比亚迪的方式)
act.setOutData("success",true);
act.setOutData("datalist",Base64String );
}
//把文件流转为Base64
public static String getBase64FromInputStream(InputStream in) throws BizException {
// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
byte[] data = null;
// 读取图片字节数组
try {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = in.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
data = swapStream.toByteArray();
} catch (IOException e) {
// LOGGER.error("InputStream转换成base64失败:{}", e);
throws new Bizexception("InputStream转换成base64失败:{}", e);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
// LOGGER.error("InputStream转换成base64失败:{}", e);
throws new Bizexception("InputStream转换成base64失败:{}", e);
}
}
}
//返回的字符串传到前台,添加到src属性中去,即可显示图片
return "data:image/jpeg;base64,"+ new String(Base64.encodeBase64(data));
}
注意:如果需要不需要显示条码值
前台获取参数再使用(云桌面无法CV 直接贴图)
结果如下:
总体参考博客有:
生成条形码工具类来自:
生成条形码 code39 和 code 128_xy途中的博客-CSDN博客_code39bean java
文件流转成Base64来自:
怎么才能将文件流或者图片转化为base64,传到前台展示 - 走看看
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)