java+layui使用zxing生成二维码

1.pom.xml导入zxing包

        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.2.1</version>
        </dependency>

2.按钮单击后生成二维码弹框

<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="qrcode">查看二维码</a>

3.layui代码

   /**
    * 点击查看二维码
    *
    * @param data 点击按钮时候的行数据
    */
    xx.openQrcode = function (data) {
        func.open({
            title: '查看二维码',
            content: Feng.ctxPath + '/xx/qrcode?pjid=' + data.id,
            tableId: xx.tableId
        });
    };

4.java代码返回html

 /**
     * 二维码弹框
     *
     * @author linan
     * @Date 2020-03-09
     */
    @RequestMapping("/qrcode")
    public String qrcode(String pjid, Model model) {
        model.addAttribute("item",pjid);
        return PREFIX + "/qrcode.html";
    }

5.qrcode.html

@layout("/common/_container.html",{js:["/assets/jnProject/jnProject.js"],css:["/assets/jnProject/qrcode.css"]}){



<div class="layui-col-sm12 layui-col-md6 layui-col-sm-offset0 layui-col-md-offset3" style="padding: 20px; background-color: #F2F2F2;margin-top:20vh">
    <div class="layui-row layui-col-space15">
        <div class="layui-col-sm12 layui-col-md3">
            <div class="layui-card"  style="height: 170px;">
                <div class="layui-card-header"><i class="layui-icon layui-icon-cols"></i>二维码</div>
                <div class="layui-card-body">
                    <img
                            id="qr"
                            style=" 100%;margin-top: 17px"
                            src="${ctxPath}/xx/jnProject_qr/${item}"
                    />
                </div>
            </div>
        </div>
        <div class="layui-col-sm12 layui-col-md9">
            <div class="layui-card">
                <div class="layui-card-header"><i class="layui-icon layui-icon-link"></i>链接</div>
                <div class="layui-card-body">
                    <div class="layui-form-item">
                        <input
                                id="url"
                                type="text"
                                value="${ctxPath}/xx/add?id=${item}"
                                class="layui-input"
                        />
                    </div>
                    <div class="layui-form-item">
                        <button id="copy" class="layui-btn" >复制</button><button id="open" class="layui-btn" >打开</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

@}

6.image访问地址生成二维码

/**
     * 查看项目二维码
     */
    @RequestMapping("/jnProject_qr/{id}")
    public void deptQr(@PathVariable Long  id, HttpServletResponse resp) throws IOException {
        ServletOutputStream stream = null;
        String qrRedirec="http://xxx";//二维码访问链接地址
        try {
            stream = resp.getOutputStream();
            Map<EncodeHintType, Object> hints = new HashMap<>();
            //编码
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            //边框距
            hints.put(EncodeHintType.MARGIN, 0);
            QRCodeWriter qrCodeWriter = new QRCodeWriter();
            JnProject jnProject = this.jnProjectService.getById(id);
            String content=qrRedirec+"?id="+id;
            BitMatrix bm = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 500, 500, hints);
            MatrixToImageWriter.writeToStream(bm, "png", stream,"");
        } catch (Exception e) {
           // log.error("二维码生成异常:{}",e.fillInStackTrace());
           // throw new GunsException(GunsExceptionEnum.valueOf("审核无效"));
            e.printStackTrace();
        } finally {
            if (stream != null) {
                stream.flush();
                stream.close();
            }
        }
    }

  

效果:

 

原文地址:https://www.cnblogs.com/e206842/p/12923655.html