使用 前端技术 创建 QR 码生成器 API1

前言

QR码(Quick Response Code)是一种二维码,于1994年开发。它能快速存储和识别数据,包含黑白方块图案,常用于扫描获取信息。QR码具有高容错性和快速读取的优点,广泛应用于广告、支付、物流等领域。通过扫描QR码,用户可以快速获取信息和实现便捷操作,为现代生活带来便利。在本教程中,小编将为大家探讨如何使用 NestJS 和 qrcode.js 构建 QR 二维码,并将其放到Excel中。

环境准备

在开始之前,请确保您具备以下工具和知识:

  • Node.js 和 npm 安装在您的系统上。
  • 基本了解 TypeScript 和 JavaScript。
  • 熟悉 NestJS 基础知识(如果没有,可以参考 NestJS 官方文档)。

第 1 步:设置 NestJS 项目

创建一个新的 NestJS 项目开始。打开终端并执行以下命令:

# Create a new NestJS project
npx @nestjs/cli new qr-code-generator-api# Move into the project directory
cd qr-code-generator-api

第 2 步:安装qrcode.js

接下来,安装该 qrcode.js 软件包,这将使小编能够生成二维码。在项目目录中运行以下命令:

npm install qrcode

第 3 步:生成二维码

现在小编已经设置了 NestJS 和qrcode.js,让小编创建一个 QR 码生成service。在 NestJS 中,service是负责处理业务逻辑的类。小编将创建一个 QrCodeService ,并利用qrcode.js生成二维码的代码。

首先,创建一个在 src 文件夹中命名 qr-code.service.ts 的新文件,并添加以下代码:

// src/qr-code.service.ts
import { Injectable } from '@nestjs/common';
import * as qrcode from 'qrcode';@Injectable()
export class QrCodeService {async generateQrCode(data: string): Promise<string> {try {const qrCodeDataURL = await qrcode.toDataURL(data);return qrCodeDataURL;} catch (error) {throw new Error('Failed to generate QR code.');}}
}

在上面的代码中,小编创建了一个 QrCodeService 具有单个方法的 generateQrCode ,此方法将字符串 data 作为输入,并返回一个 Promise,该 Promise 解析为表示生成的 QR 码的数据 URL。

第 4 步:创建二维码Controller

在 NestJS 中,controller处理传入的请求并与服务交互以提供响应。因此小编创建一个 QR 码 controller来处理 QR 码的生成。创建 src 文件夹中命名 qr-code.controller.ts 的新文件,并添加以下代码:

// src/qr-code.controller.ts
import { Controller, Get, Query } from '@nestjs/common';
import { QrCodeService } from './qr-code.service';@Controller('qr-code')
export class QrCodeController {constructor(private readonly qrCodeService: QrCodeService) {}@Get()async generateQrCode(@Query('data') data: string) {const qrCodeDataURL = await this.qrCodeService.generateQrCode(data);return `<img src="${qrCodeDataURL}" alt="QR Code" />`;}
}
@Controller('qr-code-data')
export class QrDataCodeController {constructor(private readonly qrCodeService: QrCodeService) {}@Get()async generateQrCode(@Query('data') data: string) {const qrCodeDataURL = await this.qrCodeService.generateQrCode(data);return qrCodeDataURL;}
}

在上面的代码中,小编在路由 /qr-code 上定义了一个 QrCodeController 具有单个 GET 端点的端点。端点需要一个查询参数 data ,该参数表示将是要编码到 QR 码中的内容。controller中 generateQrCode 的方法从 中调用 generateQrCode 该方法, QrCodeService 并在响应中以图像形式返回 QR 码。同时也通过 /qr-code-data 上定义了一个 QrDataCodeController 具有单个 GET 端点的端点,并在响应中以base^4形式返回。

第 5 步:连接二维码module

现在小编已经准备好了service和controller,小编需要将它们连接到一个module中。创建 src 文件夹中命名 qr-code.module.ts 的新文件,并添加以下代码:

// src/qr-code.module.ts
import { Module } from '@nestjs/common';
import { QrCodeController, QrDataCodeController } from "./qr-code.controller";
import { QrCodeService } from './qr-code.service';@Module({controllers: [QrCodeController,QrDataCodeController],providers: [QrCodeService],
})
export class QrCodeModule {}

在上面的代码中,小编定义了一个 QrCodeModule 导入 QrCodeController,QrDataCodeController 和 QrCodeService 的 .该模块将负责提供二维码生成功能。

第 6 步:修改main.ts

现在小编已经创建了module,让小编引导 NestJS 应用程序并包含 QrCodeModule。打开文件 src/main.ts 并按如下方式进行修改:

// src/main.ts
import { NestFactory } from '@nestjs/core';
import { QrCodeModule } from './qr-code.module';async function bootstrap() {const app = await NestFactory.create(QrCodeModule);await app.listen(3000);
}
bootstrap();

在上面的代码中,小编已导入 QrCodeModule 并将其传递给 NestFactory.create ,表明小编的应用程序将使用 QrCodeModule .应用程序将侦听端口 3000(默认为3000,也可以修改端口)。

第 7 步:测试 QR 码生成器 API

  1. 执行以下命令来运行 NestJS 应用程序:
npm run start
  1. 打开浏览器,在地址栏中输入http://localhost:3000/qr-code?data=Hello%20Spreadjs

替换等于号之后的内容为您要编码到 QR 码中的数据。

  1. 您应该会收到一个包含带有生成的二维码的 HTML img 标签的回复。图像将在响应中显示为数据 URL。

然后扫描二维码,如果扫描成功,就代表我们已经创建了一个二维码。

  1. 打开浏览器,在地址栏中输入http://localhost:3000/qr-code-data?data=Hello%20Spreadjs。返回一个base64码数据

最后附上完整的项目代码地址:

https://github.com/wteja/qr-code-generator-api

前端表格组件实现二维码图片

在上面介绍的例子中,小编是直接生成了一个二维码,但是在实际的日常,这种场景其实很少,更多的是将二维码放在各种 Excel 报告中,除了使用上述的原生 NestJS 和 qrcode.js 之外,还可以尝试其他的一些支持NestJS的前端表格组件来实现,这样做的好处是可以减少代码的开发量。

SpreadJS 是葡萄城推出的基于 HTML5 标准的纯前端表格组件,具备高性能、跨平台、与 Excel高度兼容的产品特性,其设计目的是帮助开发者快速实现浏览器中各类 Excel 表格应用,已成功在数据填报、在线表格文档、类 Excel 报表制作与生成、企业预决算、计量检测、实验室管理等领域得到广泛应用,可让您快速具备与飞书、语雀、灵犀文档等同源的表格开发能力。下图是使用 SpreadJS 实现的一个二维码样例:

SpreadJS如同Excel一样,支持插入图片,定位图片。我们在SpreadJS中插入上述拿到的6ase64数据

第1步:获取Base64数据

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:3000/qr-code-data?data=Hello%20Spreadjs', true);xhr.onload = function (e) {if (this.status == 200) {var base64Data = this.response;}
};xhr.send();

第2步:获取SpreadJS对象

接下来获取SpreadJS对象

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"/><!-- 禁用IE兼容视图 --><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="spreadjs culture" content="zh-cn"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" , user-scalable=no"/><title>SpreadJS demo</title><link href="http://cdn.grapecity.com/spreadjs/hosted/css/gc.spread.sheets.excel2013white.17.0.0.css"rel="stylesheet" type="text/css"/><script src="http://cdn.grapecity.com/spreadjs/hosted/scripts/gc.spread.sheets.all.17.0.0.min.js"></script><script src="http://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.shapes.17.0.0.min.js"></script>
</head><body>
<div><div id="ss" class="sample-spreadsheets" style="height: 500px;width: 90%;"></div>
</div><script type="text/javascript">window.onload = function () {var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {sheetCount: 2});  }</script>
</body></html>

新建一个文本文档,复制上面的代码,将其后缀修改为.html ,在浏览器中打开此文件,发现发现了一个电子表格

第3步:插入图片

接下来 我们添加图片

var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {sheetCount: 2});
let activeSheet = spread.getSheet(0);
activeSheet.setRowHeight(0, 100);
activeSheet.setColumnWidth(0, 100)var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:3000/qr-code-data?data=Hello%20Spreadjs', true);xhr.onload = function (e) {if (this.status == 200) {var base64Data = this.response;var pic = activeSheet.shapes.addPictureShape("Picture 1", base64Data, 0, 0, 100, 100);pic.startRow(0);pic.startColumn(0);pic.width(100)pic.height(100)}
};
xhr.send();

结果如下:

这样子就实现了在电子表格中,插入一个二维码图片的效果。

怎么,上述过程太复杂,没有关系,SpreadJS也支持直接创建二维码。

前端表格组件实现二维码公式

第1步:打开SpreadJS

打开刚刚的页面,或者点击这里重新打开SpreadJS。

第2步:实现二维码

打开SpreadJS之后,新建一个Sheet页,然后把想要展示在二维码上的信息写下来,如下图所示:

然后我们随便找一个空白的单元格,输入以下公式,空格中输入显示信息的单元格位置(比如上图中的“Hello World”的位置B10)

//空格中为显示信息的单元格位置
=BC_QRCODE()

然后就会显示一个二维码:

扫描该二维码,手机就会显示“Hello World”字符串,这样就完成了一个将二维码嵌到Excel中的小Demo。(更多样式的二维码可以参考这个Demo)

除此之外,还可以用代码的方式给二维码赋值:

sheet.setFormula(0,0,'=BC_QRCODE("hello,我是二维码")');

上述代码是为A1单元格创建一个公式,公式是=BC_QRCODE(“hello,我是二维码”),结果是这样子的:

附上完整的代码:

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="utf-8"/><meta name="spreadjs culture" content="zh-cn" /><link href="http://cdn.grapecity.com/spreadjs/hosted/css/gc.spread.sheets.excel2013white.17.0.7.css"rel="stylesheet" type="text/css"/><script src="http://cdn.grapecity.com/spreadjs/hosted/scripts/gc.spread.sheets.all.17.0.7.min.js"></script><script src="http://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.barcode.17.0.7.min.js"></script>
</head><body>
<div><div class="container"><div id="ss" style="width:200%; height:90vh;"></div></div></div>
<script type="text/javascript">window.onload = function () {let  spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));let sheet = spread.getActiveSheet()sheet.setFormula(0,0,'=BC_QRCODE("hello,我是二维码")');sheet.setRowHeight(0,200)sheet.setColumnWidth(0,200)}</script>
</body>
</html>

总结

在本文中,小编介绍了如何使用 NestJS 和 qrcode.js 创建 QR 二维码,并借助了纯前端表格组件SpreadJS来实现将 QR 二维码中显示在Excel中,如果您想了解更多关于SpreadJS的信息,欢迎点击这里查看。

扩展链接:

【干货放送】财务报表勾稽分析要点,一文读尽!

为什么你的财务报表不出色?推荐你了解这四个设计要点和!

纯前端类 Excel 表格控件在报表勾稽分析领域的应用场景解析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/61559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java Springboot高校工作室管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

【读书】复杂性意义结构框架——Cynefin框架

Cynefin框架 《代码大全》的作者史蒂夫麦克康奈尔&#xff08;Steve McConnell&#xff09;在《卓有成效的敏捷》这本书里&#xff0c;探讨了用于理解不确定性和复杂性的Cynefin框架。 Cynefin框架是戴维斯诺登&#xff08;David Snowden&#xff09;20世纪90年代的在IBM时创…

241118学习日志——[CSDIY] [ByteDance] 后端训练营 [06]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

ZYNQ-7020嵌入式系统学习笔记(1)——使用ARM核配置UART发送Helloworld

本工程实现调用ZYNQ-7000的内部ARM处理器&#xff0c;通过UART给电脑发送字符串。 硬件&#xff1a;正点原子领航者-7020 开发平台&#xff1a;Vivado 2018、 SDK 1 Vivado部分操作 1.1 新建工程 设置工程名&#xff0c;选择芯片型号。 1.2 添加和配置PS IP 点击IP INTEGR…

全面击破工程级复杂缓存难题

目录 一、走进业务中的缓存 &#xff08;一&#xff09;本地缓存 &#xff08;二&#xff09;分布式缓存 二、缓存更新模式分析 &#xff08;一&#xff09;Cache Aside Pattern&#xff08;旁路缓存模式&#xff09; 读操作流程 写操作流程 流程问题思考 问题1&#…

SpringSecurity创建一个简单的自定义表单的认证应用

1、SpringSecurity 自定义表单 在 Spring Security 中创建自定义表单认证应用是一个常见的需求&#xff0c;特别是在需要自定义登录页面、认证逻辑或添加额外的表单字段时。以下是一个详细的步骤指南&#xff0c;帮助你创建一个自定义表单认证应用。 2、基于 SpringSecurity 的…

用python简单集成一个分词工具

本部分记录如何利用Python进行分词工具集成&#xff0c;集成工具可以实现运行无环境要求&#xff0c;同时也更方便。 该文章主要是记录&#xff0c;知识点不是特别多&#xff0c;欢迎访问个人博客&#xff1a;https://blog.jiumoz.top/archives/fen-ci-gong-ju-ji-cheng 成品展…

Fakelocation Server服务器/专业版 Windows11

前言:需要Windows11系统 Fakelocation开源文件系统需求 Windows11 | Fakelocation | 任务一 打开 PowerShell&#xff08;以管理员身份&#xff09;命令安装 Chocolatey Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProto…

Python 中的 | 符号

Python 中的 | 符号 正文用法 1用法2 正文 今天遇到了一个符号 |&#xff0c;本文将对符号 | 的意思进行说明。 x: int 1 print(x) # 1上述代码中&#xff0c;:int 表示的是注释内容&#xff0c;这个在 python 中的注释 一文中我们已经进行了说明。 用法 1 有些时候我们会…

【云计算】腾讯云架构高级工程师认证TCP--考纲例题,知识点总结

【云计算】腾讯云架构高级工程师认证TCCP–知识点总结&#xff0c;排版整理 文章目录 1、云计算架构概论1.1 五大版块知识点&#xff08;架构设计&#xff0c;基础服务&#xff0c;高阶技术&#xff0c;安全&#xff0c;上云&#xff09;1.2 课程详细目录1.3 云基础架构设计1.4…

《气味传感器:嗅觉科技的新前沿》

《气味传感器&#xff1a;嗅觉科技的新前沿》 一、气味传感器的概述二、气味传感器的工作原理1. 半导体型气味传感器2. 石英晶体气味传感器 三、气味传感器的类型半导体型气味传感器晶体振荡器型气味传感器MEMS 新型传感器 四、气味传感器的应用领域1. 食品、化妆品研发及质量控…

HarmonyOs鸿蒙开发实战(22)=>开源插件集成-城市选择案例(带字母索引可修改源码)

1.第一步>DevEco Studio集成开源插件 1.1.下载资源插件 1.2.打开Perferences页面&#xff0c;从本地导入安装插件 2.第二步>导入HarmonyOs Next组件市场的城市选择案例&#xff0c;安装 2.1. 代码空白处右键&#xff0c;打开开源组件弹窗 2.2. 安装城市选择案例 3.第三步…

标贝科技大模型声音复刻 快速获取高品质专属AI声音

这两天&#xff0c;科技界发生了一件炸裂的事情——代表科技最高峰的诺贝尔物理学奖&#xff0c;居然颁给了两位人工智能领域的科学家&#xff0c;约翰霍普菲尔德和杰弗里辛顿。他们在机器学习和人工神经网络领域的开创性研究&#xff0c;不仅为现代机器学习奠定了基础&#xf…

ROS之什么是Node节点和Package包?

1.什么是ROS&#xff1f; 官方术语&#xff1a;ROS&#xff08;Robot Operating System&#xff0c;机器人操作系统&#xff09;是一个开源的、模块化的机器人软件框架。它为机器人开发提供了一套工具和库&#xff0c;用于实现硬件抽象、设备驱动、消息传递、多线程管理等功能…

Windows环境安装MongoDB

文章目录 1. 下载MongoDB2. 安装MongoDB3. Compass-图形化界面客户端4. 更换Compass的主题 阅读本文前可以先阅读以下文章&#xff1a; MongoDB快速入门&#xff08;MongoDB简介、MongoDB的应用场景、MongoDB中的基本概念、MongoDB的数据类型、MongoDB的安装与部署、MongoDB的常…

华为ASP与CSP是什么?

探讨ASP与CSP的区别&#xff0c;我们首先要澄清&#xff0c;这里的ASP并非指计算机编程语言。ASP与CSP均为华为公司合作伙伴体系中的术语&#xff0c;具体区别如下&#xff1a; ASP代表授权服务合作伙伴&#xff0c;其含义是华为授权的服务提供商。ASP通常由华为直接授权&#…

在线解析工具链接

在线字数统计工具-统计字符字节汉字数字标点符号-计算word文章字数字数统计,字符统计,字节统计,字数计算,统计字数,统计字节数,统计字符数,统计word字数,在线字数统计,在线查字数,计算字数,字数统计工具,支持手机移动端查询多少字数,英文:Calculate the number of words,Count …

C++中的原子操作:原子性、内存顺序、性能优化与原子变量赋值

一、原子操作与原子性 原子操作&#xff08;atomic operation&#xff09;是并发编程中的一个核心概念&#xff0c;指的是在多线程环境中&#xff0c;一个操作一旦开始&#xff0c;就不会被其他线程的操作打断&#xff0c;直至该操作完成。这种不可分割的特性保证了操作的原子…

RTL8211F 1000M以太网PHY指示灯

在RK3562 Linux5.10 SDK里面已支持该芯片kernel-5.10/drivers/net/phy/realtek.c&#xff0c;而默认是没有去修改到LED配置的&#xff0c;我们根据硬件设计修改相应的寄存器配置&#xff0c;该PHY有3个LED引脚&#xff0c;我们LED0不使用&#xff0c;LED1接绿灯&#xff08;数据…

通关C语言自定义类型:联合和枚举

C语言的自定义类型有四个分别是&#xff1a;数组&#xff1b;结构体&#xff08;struct&#xff09;&#xff1b;联合体&#xff08;union&#xff09;&#xff1b;枚举&#xff08;enum&#xff09;。前面已经讨论过数组和结构体&#xff0c;这期让我们来学习一下联合体和枚举…