zoukankan      html  css  js  c++  java
  • java生成条形码

    第一种:有缺点:在条形码下面不能加上汉字
    转载:https://blog.csdn.net/qq_36410795/article/details/79052956
    <!--条形码-->
    <dependency>
       <groupId>net.sf.barcode4j</groupId>
       <artifactId>barcode4j-light</artifactId>
       <version>2.0</version>
    </dependency>
    

      

    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import org.krysalis.barcode4j.impl.code39.Code39Bean;
    import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
    import org.krysalis.barcode4j.tools.UnitConv;
    import org.springframework.util.StringUtils;
     
    /**
     * 条形码工具类
     *
     * @author tangzz
     * @createDate 2015年9月17日
     *
     */
    public class BarcodeUtil {
     
        /**
         * 生成文件
         *
         * @param msg
         * @param path
         * @return
         */
        public static File generateFile(String msg, String path) {
            File file = new File(path);
            try {
                generate(msg, new FileOutputStream(file));
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            }
            return file;
        }
     
        /**
         * 生成字节
         *
         * @param msg
         * @return
         */
        public static byte[] generate(String msg) {
            ByteArrayOutputStream ous = new ByteArrayOutputStream();
            generate(msg, ous);
            return ous.toByteArray();
        }
     
        /**
         * 生成到流
         *
         * @param msg
         * @param ous
         */
        public static void generate(String msg, OutputStream ous) {
            if (StringUtils.isEmpty(msg) || ous == null) {
                return;
            }
     
            Code39Bean bean = new Code39Bean();
     
            // 精细度
            final int dpi = 150;
            // module宽度
            final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
     
            // 配置对象
            bean.setModuleWidth(moduleWidth);
            bean.setWideFactor(3);
            bean.doQuietZone(false);
     
            String format = "image/png";
            try {
     
                // 输出到流
                BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi,
                        BufferedImage.TYPE_BYTE_BINARY, false, 0);
     
                // 生成条形码
                bean.generateBarcode(canvas, msg);
     
                // 结束绘制
                canvas.finish();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
     
        public static void main(String[] args) {
            String msg = "123456789";
    //        String path = "barcode.png";
            String path = "G:/Image/barcode.png";
            generateFile(msg, path);
            System.out.println("条形码生成=="+generateFile(msg, path));
        }
    }
    

      第二种:可以在条形码下方加上汉字:

    https://blog.csdn.net/fxbin123/article/details/83515803
    1、添加maven依赖
            <dependency>
                <groupId>com.google.zxing</groupId>
                <artifactId>core</artifactId>
                <version>3.3.3</version>
            </dependency>
    

      

    package com.shengquan.holywater.modules.moju.utils;
    import com.baomidou.mybatisplus.toolkit.StringUtils;
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.WriterException;
    
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.oned.Code128Writer;
    
    
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @description: 谷歌条形码打印
     * @author: Administrator
     * @date: 2019-03-07 14:46
     */
    public class GoogleBarCodeUtils {
        /** 条形码宽度 */
        private static final int WIDTH = 300;
    
        /** 条形码高度 */
        private static final int HEIGHT = 50;
    
        /** 加文字 条形码 */
        private static final int WORDHEIGHT = 75;
        /**
         * 设置 条形码参数
         */
        private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {
            private static final long serialVersionUID = 1L;
            {
                // 设置编码方式
                put(EncodeHintType.CHARACTER_SET, "utf-8");
            }
        };
        /**
         * 生成 图片缓冲
         * @author fxbin
         * @param vaNumber  VA 码
         * @return 返回BufferedImage
         */
        public static BufferedImage getBarCode(String vaNumber){
            try {
                Code128Writer writer = new Code128Writer();
                // 编码内容, 编码类型, 宽度, 高度, 设置参数
                BitMatrix bitMatrix = writer.encode(vaNumber, BarcodeFormat.CODE_128, WIDTH, HEIGHT, hints);
                return MatrixToImageWriter.toBufferedImage(bitMatrix);
            } catch (WriterException e) {
                e.printStackTrace();
            }
            return null;
        }
        /**
         * 把带logo的二维码下面加上文字
         * @author fxbin
         * @param image  条形码图片
         * @param words  文字
         * @return 返回BufferedImage
         */
        public static BufferedImage insertWords(BufferedImage image, String words){
            // 新的图片,把带logo的二维码下面加上文字
            if (StringUtils.isNotEmpty(words)) {
    
                BufferedImage outImage = new BufferedImage(WIDTH, WORDHEIGHT, BufferedImage.TYPE_INT_RGB);
    
                Graphics2D g2d = outImage.createGraphics();
    
                // 抗锯齿
                setGraphics2D(g2d);
                // 设置白色
                setColorWhite(g2d);
    
                // 画条形码到新的面板
                g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
                // 画文字到新的面板
                Color color=new Color(0, 0, 0);
                g2d.setColor(color);
                // 字体、字型、字号
                g2d.setFont(new Font("微软雅黑", Font.PLAIN, 18));
                //文字长度
                int strWidth = g2d.getFontMetrics().stringWidth(words);
                //总长度减去文字长度的一半  (居中显示)
                int wordStartX=(WIDTH - strWidth) / 2;
                //height + (outImage.getHeight() - height) / 2 + 12
                int wordStartY=HEIGHT+20;
    
                // 画文字
                g2d.drawString(words, wordStartX, wordStartY);
                g2d.dispose();
                outImage.flush();
                return outImage;
            }
            return null;
        }
    
        /**
         * 设置 Graphics2D 属性  (抗锯齿)
         * @param g2d  Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制
         */
        private static void setGraphics2D(Graphics2D g2d){
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
            Stroke s = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
            g2d.setStroke(s);
        }
    
        /**
         * 设置背景为白色
         * @param g2d Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制
         */
        private static void setColorWhite(Graphics2D g2d){
            g2d.setColor(Color.WHITE);
            //填充整个屏幕
            g2d.fillRect(0,0,600,600);
            //设置笔刷
            g2d.setColor(Color.BLACK);
        }
        public static void main(String[] args) throws IOException {
    //        BufferedImage image = insertWords(getBarCode("123456789"), "123456789");
    //        A80/90R8A(8A侧通孔)
            BufferedImage image = insertWords(getBarCode("A80/90R8A8A"), "A80/90R8A(8A侧通孔)");
            ImageIO.write(image, "jpg", new File("G:/Images/barcode.png"));
        }
    
    
    }
    3.程序包com.google.zxing.client.j2se不存在
    4.com.google.zxing.client.j2se包下载地址:
    
    https://pan.baidu.com/s/1K60wSnLmbch63QyUbimHfA
    
     提取码:junh
    

      

  • 相关阅读:
    英语初级学习系列-00-Name-介绍自己
    Solidworks实例学习
    数学——泰勒公式
    SolidWorks知识积累系列-01
    彻底弄懂HTTP缓存机制及原理
    基于 Pymsql 数据库连接池
    WEB框架之Flask
    Django使用消息提示简单的弹出个对话框
    代码的调试、运行
    微信公众号本地测试环境搭建(附带内网穿透工具使用)
  • 原文地址:https://www.cnblogs.com/xianz666/p/14779391.html
Copyright © 2011-2022 走看看