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 标签:条形码,扫码,outputStream,Java,String,param,生成,bean,扫出 From: https://www.cnblogs.com/ios9/p/18451495