首页 > 编程语言 >Java生成条形码(亲测可通过扫码枪扫出)

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

时间:2024-10-08 13:48:49浏览次数:1  
标签:条形码 扫码 outputStream Java String param 生成 bean 扫出

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

标签:条形码,扫码,outputStream,Java,String,param,生成,bean,扫出
From: https://www.cnblogs.com/ios9/p/18451495

相关文章

  • PTA 作业一 两分钟学会JAVA语言 7-4 Java程序设计-基本程序-计算两点之间的距离 提示
    7-4Java程序设计-基本程序-计算两点之间的距离分数10全屏浏览切换布局作者 万静单位 北京化工大学这是一个编程题模板。编写程序,提示用户输入两个点(x1,y1)和(x2,y2),然后显示两点间的距离。计算两点之间距离的公式是:注意可以使用Math.pow(a,0,5)计算。输入格式......
  • PTA 作业一 两分钟学会JAVA语言 7-3 Java程序设计-基本程序-摄氏温度转换为华氏温度
    7-3Java程序设计-基本程序-摄氏温度转换为华氏温度分数10全屏浏览切换布局作者 万静单位 北京化工大学这是一个编程题模板。编写程序,从控制台读入double型的摄氏温度值,然后转换为华氏温度,并且显示结果。转换公式如下:华氏温度=(9/5)*摄氏温度+32。输入格式:输入摄......
  • 白骑士的JavaScript教学JavaScript语法基础篇之运算符与表达式 2.2.4 逻辑运算符
            逻辑运算符是用于布尔逻辑运算的符号,它们常用于控制流程和条件判断,帮助程序员编写更复杂和更动态的条件语句。在JavaScript中,主要的逻辑运算符包括逻辑与(‘&&‘)、逻辑或(‘||‘)、逻辑非(‘!‘)以及一些其他特定场景的运算符。逻辑运算符用于将多个布尔值或表达式......
  • 白骑士的JavaScript教学JavaScript语法基础篇之运算符与表达式 2.2.5 条件运算符(三元
            条件运算符,也称为三元运算符,是JavaScript中唯一的三目运算符,它提供了一种简洁的方式来编写条件判断和赋值语句。通过使用条件运算符,你可以在一行代码中实现简单的条件判断,从而让代码更加紧凑和易读。条件运算符        条件运算符由三个部分组成:条件......
  • java基于springboot的社区医院管理系统(源码+vue+部署文档+前后端分离等)
    收藏关注不迷路!!......
  • Java 指针与引用全解析
    (一)Java的发展与指针引用概念Java作为一种广泛应用的编程语言,在发展过程中借鉴了许多其他语言的特性,同时也进行了创新和改进。其中,与C++的关系尤为密切。虽然Java没有像C++那样明确的指针定义,但在底层逻辑上,Java的引用实际上与C++的指针有着相似之处。Java的设......
  • 如何提高 Java Stream 遍历集合效率
    在Java8之前,对于大数据量的集合,传统的遍历方式主要是通过for循环或者Iterator迭代。然而,这种方式在处理大数据量集合时效率并不理想。以电商系统中的订单表为例,通常使用用户ID的Hash值来实现分表分库,以减少单个表的数据量,提高用户查询订单的速度。但当后台管理员审核订......
  • java_day10_Object、Scanner、String
    1、Object类java中所有的类默认都有一个共同的父类:Object==比较:1、比较的是两个基本数据类型的话,比较两个数值是否相等2、比较的是两个引用数据类型的话,比较的是两个对象的地址值是否相等成员方法:inthashCode()返回对象的哈希码值。可以看作地址值的另外......
  • java计算机毕业设计宠物商城网站(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人们生活水平的提高,宠物已成为许多家庭的重要成员。宠物市场的繁荣带动了宠物相关产业的发展,其中宠物商城网站作为线上购物的......
  • Java基础语法
    一入Java情几许?大家好,我是深山夕照深秋雨。本文主要介绍Java的基础语法第二部分变量,类型转换和运算符。一、变量详解变量里的数据在计算机中的底层原理1、数据在计算机底层都是采用二进制:使用0、1,按照逢2进1的规则表示数据来存储。2、算出一个数据的二进制形式:除二取余法......