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="width: 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(); } } }
效果: