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

    package tiaoMa;
    
    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 net.coobird.thumbnailator.Thumbnails;
    import net.coobird.thumbnailator.geometry.Positions;
    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 (!"".equals(words) && null!=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);
        }
        
        
        
        /**
         * 
         * @param image 用imageio读取的图片
         * @param width 缩略图的目标宽度
         * @param height 缩略图的目标高度
         * @param save_file 保存图片的路径
         * @return 无返回 
         */
        public static void thumbnail(BufferedImage image, int width, int height, String save_file) {
            try {
                Thumbnails.of(image)
                    .crop(Positions.CENTER)//从图片中心截取缩略图
                    .size(width, height)
                    .toFile(save_file);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
      
        
        
        public static void main(String[] args) throws IOException {
        	File file=new File("D:/Images/barcode.png");
        	System.out.println("file======"+file);
           BufferedImage image = insertWords(getBarCode("123456789"), "123456789");
    //        A80/90R8A(8A侧通孔)
        
            //BufferedImage image = insertWords(getBarCode("A80/90R8A8A"), "A80/90R8A(8A侧通孔)");
            System.out.println("image====="+image);
            ImageIO.write(image, "png", new File("D:/Images/barcode.png"));
        }
    
    
    }
    

      2.下方不带文字

    package tiaoMa;
    /**
     * 下方不加文字
     * @author Pei
     *
     */
    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;
     
    /**
     * 条形码工具类
     *
     * @author tangzz
     * @createDate 2015年9月17日
     *
     */
    public class BarcodeUtilno {
     
        /**
         * 生成文件
         *
         * @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 (("".equals(msg)||null==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 = "D:/Image666/barcode.png";
            generateFile(msg, path);
            System.out.println("条形码生成=="+generateFile(msg, path));
        }
    }
    

      // pom.xml文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.cn</groupId>
      <artifactId>tiaoXingMa</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      <dependencies>
          <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>core</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
        <version>3.3.0</version>
    </dependency>
    <!--条形码-->
    <dependency>
       <groupId>net.sf.barcode4j</groupId>
       <artifactId>barcode4j-light</artifactId>
       <version>2.0</version>
    </dependency>
    <!-- 压缩图片 -->
    <dependency>
      <groupId>net.coobird</groupId>
      <artifactId>thumbnailator</artifactId>
      <version>[0.4, 0.5)</version>
    </dependency>
    
    
      </dependencies>
    </project>
    

      

  • 相关阅读:
    poj 1014||hdu 1059 dividing(多重背包 二进制优化)
    Java多线程循环打印ABC的5种实现方法
    java资料搜索网站
    idea 离线安装 lombok插件
    解决TIME_WAIT过多造成的问题
    JAVA线程池详解
    linux vmstat命令
    Mysql慢查询
    sql中强制使用索引
    JAVA 利用 jmc或jvisualvm 监控 本地或者远程JVM
  • 原文地址:https://www.cnblogs.com/xianz666/p/14779402.html
Copyright © 2011-2022 走看看