• 生成二维码


    现在办事情扫二维码很方便也很普及,java代码生成二维码:

    引用对应的Service层的action层(业务管理层):

    // 引入生成二维码实现工具类的后台
    import
    com.xxx.xxx.xxx.service.QRCodeUtil;
    // 创造对象实例
    private QRCodeUtil QRCodeUtil = new QRCodeUtil();
    // 扫描二维码之后所要跳转的页面地址 String urlcontent
    ="http://service.xxx.com/xxx/weixin/Pages/Service/xxxxDetail.html?ProjectGuid="+Project.getRowguid()+"&userGuid=admin&EditM=0";
    // 调用
    QRCodeUtil中的generateQRCodeStream生成二维码字节数组
    byte[] codebyte = QRCodeUtil.generateQRCodeStream(urlcontent, 100, 100);

    //
    调用QRCodeUtil中的insertImage将生成二维码图片放在固定的位置
    QRCodeUtil.insertImage(codebyte, doc, "projectdetailtag");
    Service层(业务逻辑层/实施层)其中所调用的二维码实现工具类的后台如下:
    package com.xxx.xxxx.xxx.service;
    
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Hashtable;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    
    import com.aspose.words.Document;
    import com.aspose.words.DocumentBuilder;
    import com.xxx.xxxx.BaseService;
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.WriterException;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.QRCodeWriter;
    import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    
    @SuppressWarnings("serial")
    public class QRCodeUtil extends BaseService {
        
    //    public QRCodeUtil() {
    //        super();
    //    }
    //
    //    public QRCodeUtil(DataSourceConfig dataSource) {
    //        super(dataSource);
    //    }
        private static final String CHARSET = "utf-8";
        private static final String FORMAT_NAME = "JPG";
        private static final int QRCODE_SIZE = 300; // 二维码尺寸,宽度和高度均是300
        private static final int WIDTH = 80;  //LOGO宽度
        private static final int HEIGHT = 80; //LOGO高度
       
        
        /**
         *  生成二维码字节数组(字节流)
         *  @param contents
         *  @param width
         *  @param height
         *  @return
         *  @throws WriterException
         *  @throws FileNotFoundException
         *  @throws IOException    
         * @exception/throws [违例类型] [违例说明]
         * @see [类、类#方法、类#成员]
         */
        public byte[] generateQRCodeStream(String contents, int width, int height) throws WriterException, 
            FileNotFoundException, IOException{
            QRCodeWriter writer = new QRCodeWriter();
            BitMatrix matrix = writer.encode(contents, BarcodeFormat.QR_CODE, width, height);
            ByteArrayOutputStream imageStream = new ByteArrayOutputStream();
            MatrixToImageWriter.writeToStream(matrix, "PNG", imageStream);
            byte[] taginfo = imageStream.toByteArray();
            return taginfo;
        }
        
        /**
         *  word标签中插入二维码图片
         *  @param imageByteStream
         *  @param doc
         *  @param tag 标签名称
         */
        public void insertImage(byte[] imageByteStream, Document doc, String tag) throws IOException, Exception {
            DocumentBuilder build = new DocumentBuilder(doc);
            build.moveToBookmark(tag);
            build.insertImage(imageByteStream);
        }
        
        
        /**
         * 生成二维码的方法
         * @param content 目标url
         * @param imgPath logo图片地址
         * @param needCompress 是否压缩logo
         * @return 二维码图片
         * @throws Exception
         */
        public static BufferedImage createImage(String content, String imgPath,boolean needCompress) throws Exception {
            Hashtable hints = new Hashtable();
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//指定二维码的纠错等级为高级
            hints.put(EncodeHintType.CHARACTER_SET, CHARSET);//指定字符编码为“utf-8”
            //hints.put(EncodeHintType.MARGIN, 1); //设置图片的边距
            //参数1:内容,目标url,参数2:固定写法,参数3:二维码的宽度,参数4:二维码的高度,参数5:二维码属性设置
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);
            int width = bitMatrix.getWidth();//二维码的宽度
            int height = bitMatrix.getHeight();//二维码的高度
            BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);//生成的二维码image
            for (int x = 0; x < width; x++) {
                for (int y = 0; y < height; y++) {
                    image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000: 0xFFFFFFFF);
                }
            }
            if (imgPath == null || "".equals(imgPath)) {//logo图片地址为null或空时
                return image; //只返回二维码图片,无中间的logo
            }
            // 插入logo图片  参数1:二维码图片,参数2:logo图片地址,参数3:压缩图片
            //QRCodeUtil.insertImage(image, imgPath, needCompress);
            return image;
        }
    
        /**
         * 生成二维码(内嵌LOGO)
         * @param content  内容
         * @param imgPath  logo地址
         * @param destPath 存放目录
         * @param needCompress 是否压缩logo
         * @throws Exception 
         */
        public static void encode(String content, String imgPath, String destPath, boolean needCompress) throws Exception {
            BufferedImage image = QRCodeUtil.createImage(content, imgPath,needCompress); //生成二维码
            mkdirs(destPath);
            String file = new Random().nextInt(99999) + ".jpg";
            ImageIO.write(image, FORMAT_NAME, new File(destPath + "/" + file));
        }
        /**
         * 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)
         * @param destPath 存放目录
         */
        public static void mkdirs(String destPath) {
            File file = new File(destPath);
            if (!file.exists() && !file.isDirectory()) {
                file.mkdirs();
            }
        }
        
    }
  • 相关阅读:
    Spark 基本概念及入门
    Cron 表达式详解
    VmWare 网络模式
    微信、支付宝各种支付退款
    Spring Security OAuth2 SSO 单点登录
    Git 入门详解
    基于Spring Boot 2.x 的 Spring Cloud Admin 实践
    Git 提交规范
    Linux 安装 Mysql8.0
    Docker入门
  • 原文地址:https://www.cnblogs.com/wmqiang/p/10496083.html
Copyright © 2020-2023  润新知