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

