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

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

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram