Java生成条形码(亲测可通过扫码枪扫出)
秃秃爱健身
该博客介绍了如何在Java项目中通过barcode4j库生成Code128条形码,解决了条形码扫不出或美观度不足的问题。提供了相关代码示例,包括Maven依赖、工具类和生成条形码的方法,可以自定义条形码的高度、宽度、是否留白和隐藏文本。
摘要由CSDN通过智能技术生成
背景
项目上对接美国的外卖平台Uber(可以理解为国内的美团),需要在打印的小票上生成一个条形码,供Uber的骑手扫码取货。经过一顿百度发现,大佬们提供的条形码要么扫不出来,要么就很不美观(长宽比不合适),于是就自己摸索了一把。
代码
1、Maven依赖
<dependency><groupId>net.sf.barcode4j</groupId><artifactId>barcode4j-light</artifactId><version>2.0</version> </dependency>
2、工具类
/*** 生成条码工具类*/ public class BarcodeUtils {/*** 生成条形码文件** @param msg 条形码的文本内容* @param path 生成条形码的文件路径* @return*/public static File generateFile(String msg, String path) {File file = new File(path);OutputStream outputStream = null;try {outputStream = new FileOutputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();}try {generateBarCode128(msg, 10.0, 0.3, true, false, outputStream);} catch (Exception e) {throw new RuntimeException(e);}return file;}/*** 生成code128条形码** @param message 要生成的文本* @param height 条形码的高度* @param width 条形码的宽度* @param withQuietZone 是否两边留白* @param hideText 隐藏可读文本* @param outputStream 输出流*/public static void generateBarCode128(String message, Double height, Double width, boolean withQuietZone, boolean hideText, OutputStream outputStream) {Code128Bean bean = new Code128Bean();// 分辨率,越大条形码就越大int dpi = 150;// 设置两侧是否留白bean.doQuietZone(withQuietZone);// 设置条形码高度和宽度bean.setBarHeight(ObjectUtils.defaultIfNull(height, 9.0D));if (width != null) {bean.setModuleWidth(width);}// 设置文本位置(包括是否显示)if (hideText) {bean.setMsgPosition(HumanReadablePlacement.HRP_NONE);}// 设置图片类型String format = "image/png";BitmapCanvasProvider canvas = new BitmapCanvasProvider(outputStream, format, dpi,BufferedImage.TYPE_BYTE_BINARY, false, 0);// 生产条形码bean.generateBarcode(canvas, message);try {canvas.finish();} catch (IOException e) {//ByteArrayOutputStream won't happen}}public static void main(String[] args) {String msg = "TRO2022032300000400301";String path = "barcode2.png";generateFile(msg, path);}}
3、效果图
4、关于条形码的编码
上述工具类给出的条形码编码为:Code128;
如果向使用其他编码,只需要在generateBarCode128()方法中将Code128Bean换成需要的,比如:Code39Bean;
原文链接:https://blog.csdn.net/Saintmm/article/details/123691486