为数据列表的每条记录生成对应的二维码

2023-10-14 21:44

本文主要是介绍为数据列表的每条记录生成对应的二维码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果图:

一、前端

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head><th:block th:include="include :: header('固定资产信息列表')" />
</head>
<body class="gray-bg"><div class="container-div"><div class="row"><div class="col-sm-12 search-collapse"><form id="formId"><div class="select-list"><ul><li><label>资产名称:</label><input type="text" name="zcmc"/></li><li><label>资产型号:</label><input type="text" name="zcxh"/></li><li><a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a><a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a></li></ul></div></form></div><div class="btn-group-sm" id="toolbar" role="group"><a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="biz:gdzcxx:add"><i class="fa fa-plus"></i> 添加</a><a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="biz:gdzcxx:edit"><i class="fa fa-edit"></i> 修改</a><a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="biz:gdzcxx:remove"><i class="fa fa-remove"></i> 删除</a><a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="biz:gdzcxx:export"><i class="fa fa-download"></i> 导出</a></div><div class="col-sm-12 select-table table-striped"><table id="bootstrap-table"></table></div></div></div><th:block th:include="include :: footer" /><script th:inline="javascript">var qrcodeFlag = [[${@permission.hasPermi('biz:gdzcxx:createQRCode')}]];var editFlag = [[${@permission.hasPermi('biz:gdzcxx:edit')}]];var removeFlag = [[${@permission.hasPermi('biz:gdzcxx:remove')}]];var prefix = ctx + "biz/gdzcxx";//生成二维码function createQRCode(id){$.ajax({url: prefix + "/createQRCode",data: {gdzcxxid:id},type: 'POST',success: function (result) {$.table.refresh();}});}$(function() {var options = {url: prefix + "/list",createUrl: prefix + "/add",updateUrl: prefix + "/edit/{id}",removeUrl: prefix + "/remove",exportUrl: prefix + "/export",modalName: "固定资产信息",columns: [{checkbox: true},{field: 'gdzcxxId',title: '资产ID'},{field: 'zcmc',title: '资产名称'},{field: 'zcxh',title: '资产型号'},{field: 'ewm',title: '二维码',formatter:function(value, row, index){var imageDataUrl = 'data:image/png;base64,' + value;return "<img src='"+imageDataUrl+"' width='100' height='100' />";}},{field: 'bz',title: '备注'},{title: '操作',align: 'center',formatter: function(value, row, index) {var actions = [];actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.gdzcxxId + '\')"><i class="fa fa-edit"></i>编辑</a> ');actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.gdzcxxId + '\')"><i class="fa fa-remove"></i>删除</a>');actions.push('<a class="btn btn-success btn-xs ' + qrcodeFlag + '" href="javascript:void(0)" onclick="createQRCode(\'' + row.gdzcxxId + '\')"><i class="fa fa-edit"></i>生成二维码</a> ');return actions.join('');}}]};$.table.init(options);});</script>
</body>
</html>

二、后端

<!--二维码--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.1</version></dependency>
@Controller
@RequestMapping("/biz/gdzcxx")
public class BizGdzcxxController extends BaseController
{private String prefix = "biz/gdzcxx";/*** 创建二维码*/@RequiresPermissions("biz:gdzcxx:createQRCode")@PostMapping("/createQRCode")public String createQRCode(String gdzcxxid) throws IOException, WriterException {//根据ID取记录,并为其生成二维码BizGdzcxx bizGdzcxx = bizGdzcxxService.selectBizGdzcxxByGdzcxxId(Long.valueOf(gdzcxxid));QRCode qrCode = new QRCode();//二维码物理存放路径String uploadPath = "D:/qrcode";qrCode.setFilePath(uploadPath + "/ewm/gdzcxx/" + bizGdzcxx.getZcmc() + ".png");//二维码内容:http://localhost:8088/prefix/info/1qrCode.setQrCodeData("/" + prefix + "/info/" + bizGdzcxx.getGdzcxxId());//创建二维码qrCodeService.createQRCode(qrCode);//将二维码转二进制FileInputStream fis = new FileInputStream(qrCode.getFilePath());byte[] bytes = FileCopyUtils.copyToByteArray(fis);//二进制入库bizGdzcxx.setEwm(bytes);bizGdzcxxService.updateBizGdzcxx(bizGdzcxx);return prefix + "/gdzcewm";}

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.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.chenf.biz.domain.QRCode;
import com.chenf.biz.service.IQRCodeService;
import org.springframework.stereotype.Service;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;@Service
public class QRCodeServiceImpl implements IQRCodeService {@Overridepublic void createQRCode(QRCode qrCode) throws IOException, WriterException {QRCodeWriter qrCodeWriter = new QRCodeWriter();Map<EncodeHintType, Object> hintMap = new HashMap<>();hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);hintMap.put(EncodeHintType.CHARACTER_SET, qrCode.getCharset());BitMatrix matrix = qrCodeWriter.encode(new String(qrCode.getQrCodeData().getBytes(qrCode.getCharset()), qrCode.getCharset()),//BitMatrix matrix = qrCodeWriter.encode(qrCode.getQrCodeData(),BarcodeFormat.QR_CODE, qrCode.getQrCodeWidth(), qrCode.getQrCodeHeight(), hintMap);Path path = Paths.get(qrCode.getFilePath());if (!Files.exists(path)) {try {Files.createDirectories(path);System.out.println("Path created!");} catch (Exception e) {System.out.println("An error occurred while creating the path: " + e.getMessage());}} else {System.out.println("Path already exists!");}MatrixToImageWriter.writeToPath(matrix, qrCode.getFilePath().substring(qrCode.getFilePath().lastIndexOf('.') + 1), path);}
}
import com.google.zxing.WriterException;
import com.chenf.biz.domain.QRCode;import java.io.IOException;public interface IQRCodeService {void createQRCode(QRCode qrCode) throws IOException, WriterException;
}

/*** 二维码*/
public class QRCode {//二维码内容private String qrCodeData;//二维码存放路径private String filePath;private String charset="UTF-8";//二维码调度private int qrCodeHeight=200;//二维码宽度private int qrCodeWidth=200;public String getQrCodeData(){return this.qrCodeData;}public void setQrCodeData(String qrCodeData){ this.qrCodeData = qrCodeData;}public String getFilePath(){return this.filePath;}public void setFilePath(String filePath){ this.filePath = filePath;}public String getCharset(){return this.charset;}public void setCharset(String charset){ this.charset = charset;}public int getQrCodeHeight(){return this.qrCodeHeight;}public void setQrCodeHeight(int qrCodeHeight){ this.qrCodeHeight = qrCodeHeight;}public int getQrCodeWidth(){return this.qrCodeWidth;}public void setQrCodeWidth(int qrCodeWidth){ this.qrCodeWidth = qrCodeWidth;}
}

《完结》

这篇关于为数据列表的每条记录生成对应的二维码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/213342

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS