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

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

相关文章

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类