/**PageBeginHtml Block Begin **/ /***自定义返回顶部小火箭***/ /*生成博客目录的JS 开始*/ /*生成博客目录的JS 结束*/

Java生成条形码(亲测可通过扫码枪扫出)

* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* @author Alan
* @Email no008@foxmail.com

 

正文

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、效果图

image



4、关于条形码的编码


上述工具类给出的条形码编码为:Code128;
如果向使用其他编码,只需要在generateBarCode128()方法中将Code128Bean换成需要的,比如:Code39Bean;






                        
原文链接:https://blog.csdn.net/Saintmm/article/details/123691486

posted @   一品堂.技术学习笔记  阅读(195)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2023-10-08 win10系统解决自动黑屏和休眠的方法
点击右上角即可分享
微信分享提示

目录导航