前端生成批量二维码,并且下载到本地

这篇具有很好参考价值的文章主要介绍了前端生成批量二维码,并且下载到本地。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Ⅰ- 壹 - 功能展示和使用需求

需求描述

前端生成批量二维码,并且下载,本项目使用了 vue3.

功能展示

前端生成批量二维码,并且下载到本地,前端
前端生成批量二维码,并且下载到本地,前端
前端生成批量二维码,并且下载到本地,前端

Ⅱ - 贰 - 封装代码

需要的库

yanr add qrcodejs2-fix // 生成二维码
yarn add html2canvas // 转图片
yarn add jszip// 压缩包
yarn add file-saver// 下载

index.scss

#HomePage {
    height: 100vh;
    width: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    position: relative;

    .tabs-box {
        width: 90%;
        height: 90vh;
        margin-bottom: 15px;
    }
    .qrcode-pic{
        position: absolute;
        bottom: 100px;
        display: flex;
        // display: none;
    }
}

index.vue

<!--
    * @Author: whq
    * @Date: 2022-12-28 11:28:13
 * @LastEditTime: 2023-07-24 16:03:10
 * @LastEditors: whq
    * @Description: 
 * @FilePath: \newEraUniform\src\view\HomePage\index.vue
   -->
<template>
    <div id="HomePage">
        <div class="tabs-query"></div>
        <el-button size="small" @click="handleClick('QRcode')">下载二维码</el-button>
        <div class="tabs-box">
            <el-table ref="multipleTableRef" :data="state.dataList" style="width: 100%"
                @selection-change="handleSelectionChange">
                <el-table-column type="selection" width="55" />
                <el-table-column label="时间" width="120">
                    <template #default="scope">{{ scope.row.date }}</template>
                </el-table-column>

                <el-table-column property="name" label="名称" width="120" />
                <el-table-column property="address" label="电话号码" show-overflow-tooltip />
            </el-table>
        </div>

        <el-pagination v-model:currentPage="state.pages.currentPage" :page-sizes="[20, 30, 50, 100]"
            :page-size="state.pages.size" layout=" prev, pager, next, jumper,total, sizes," :background="true"
            :total="state.pages.total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
        <div class="qrcode-pic">
            <div v-for="(v, i) in state.multipleSelection" :key="i">
                <div ref="codeItem"></div>
            </div>
        </div>
        <div v-for="(v, i) in state.QRcodeArr" :key="i">
            <el-image style="width: 100px; height: 100px" :src="v.imgurl" fit="fill" />
        </div>
        <!-- 必须存在的dom 生成的二维码通过这种方式隐藏 -->
        <div id="qrid" :style="{ 'margin-top': '-99999999999999999px', position: 'fixed' }"></div>
    </div>
</template>
<script setup lang="ts">
import { ref, onMounted, reactive, watch } from 'vue'
import QRcode from "qrcodejs2-fix";
import html2canvas from 'html2canvas'
import JSZip from "jszip"
import FileSaver from 'file-saver';
import { ElMessage } from 'element-plus';
const codeItem = ref<any>(null)

const state = reactive<any>({
    QRcodeArr: [],
    dataList: [
        {
            id: "1001",
            date: '2016-05-03',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1002",
            date: '2016-05-02',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1003",
            date: '2016-05-01',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1004",
            date: '2016-05-08',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1005",
            date: '2016-05-06',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1006",
            date: '2016-05-07',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1007",
            date: '2016-05-03',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1008",
            date: '2016-05-02',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1009",
            date: '2016-05-04',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1010",
            date: '2016-05-01',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1011",
            date: '2016-05-08',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1012",
            date: '2016-05-06',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
        {
            id: "1013",
            date: '2016-05-07',
            name: 'Tom',
            address: 'No. 189, Grove St, Los Angeles',
        },
    ],
    multipleSelection: [],
    pages: {
        total: 500,//总数据
        currentPage: 1,// 当前页数
        size: 20,// 一页显示多少条
    }
})
const handleSelectionChange = (val: any) => {
    state.multipleSelection = val
    console.log(val);

}
const handleSizeChange = (val: number) => {
    console.log(`${val} items per page`)
}
const handleCurrentChange = (val: number) => {
    console.log(`current page: ${val}`)
}

//  生成二维码图片
const setQRcodeArr = async () => {
    let qridElement: any = document.querySelector('#qrid')
    qridElement.innerHTML = ''
    for (const itemIterator of state.multipleSelection) {
        let newDivElement: any = document.createElement("div")
        newDivElement.innerHTML = "";

        var qrcode = new QRcode(newDivElement, {
            text: 'https://www.baidu.com/', //二维码内容
            width: 120,
            height: 120,
            render: 'table',
            colorDark: "#333333", //二维码颜色
            colorLight: "#ffffff", //二维码背景色
            correctLevel: QRcode.CorrectLevel.H
        })
        qridElement.appendChild(newDivElement)

        // 创建画布放二维码,方便下载
        let canvas: any = document.createElement("canvas"),
            scale = 1;
        canvas.width = 120;
        canvas.height = 120;
        canvas.getContext("2d").scale(scale, scale);
        let opts = {
            canvas: canvas,
            logging: false,
            width: 120,
            height: 120,
            useCORS: true,
            allowTaint: true,//允许跨域图片
            scale: 1, // 处理模糊问题
            dpi: 300, // 处理模糊问题
            background: "#ffffff",
        }
        // 生成二维码图片
        await html2canvas(newDivElement, opts).then((canvas) => {
            const qrContentImage = canvas.toDataURL('image/png', 1.0);// 生成的图片
            state.QRcodeArr.push({
                ...itemIterator,
                imgurl: qrContentImage
            })

        }).catch(function (reason) {
            console.log(reason);
        });
        //下载文件

    }
    qridElement.innerHTML = ''
    //创建压缩对象
    var zip = new JSZip();

    for (const QRcodeIterator of state.QRcodeArr) {
        zip.file(`${QRcodeIterator.id}.png`, QRcodeIterator.imgurl.replace(/^data:image\/(png|jpg);base64,/, ""), { base64: true }); //第一个参数是图片名字和后缀
    }

    //下载压缩包
    zip.generateAsync({ type: "blob" }).then(function (content: any) {
        FileSaver(content, "二维码.zip");
    });
}

const handleClick = async (type: any) => {

    switch (type) {
        case 'QRcode':

            if (!state.multipleSelection.length) {
                return ElMessage({
                    message: '请选择要下载的信息',
                    type: 'warning',
                })
            }
            await setQRcodeArr()


            break;

        default:
            break;
    }

}

onMounted(() => {

})

</script>
<style lang="scss" scoped>
@import "./index.scss";
</style>

总结

经测试如果100以上生成不建议是用这种方式,会 超级慢,还是建议后端去做这个事情文章来源地址https://www.toymoban.com/news/detail-610040.html

到了这里,关于前端生成批量二维码,并且下载到本地的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端生成二维码

    在现代的 web 开发中,生成二维码是一项常见的需求。Vue 作为一个流行的前端框架,提供了多种方法来生成和显示二维码。本文将介绍如何使用 Vue 和一个流行的二维码生成库 qrcode 来生成二维码。 步骤 1:创建新的 Vue 项目 首先,确保你已经安装了 Node.js 和 Vue CLI。打开终端

    2024年04月26日
    浏览(36)
  • 前端 Js二维码生成

    1.页面 2.uqrcode.js 结束了

    2024年02月14日
    浏览(53)
  • 【前端】JQ生成二维码

    提供两种方法,两种都是借助JQ插件生成。 所需文件: https://download.csdn.net/download/qq_25285531/88204985 https://download.csdn.net/download/qq_25285531/88204985 方法一: 方法二:比较简单

    2024年02月13日
    浏览(111)
  • 前端vue项目:生成二维码,扫二维码跳转到相应页面

    Vue2项目 1、安装依赖::npm i arale-qrcode --save 2、引入:import AraleQRCode from \\\"arale-qrcode\\\"; 接下来让我们纯前端生成一个二维码                               【PS:亲测有效,大家可以放心使用 CV 大法哈  !】 HTML JS 需求中遇到的情况,也是百度了很久参考了很多大佬的文章

    2024年02月07日
    浏览(59)
  • 前端qrcode生成二维码详解

    qrcode 是一个基于JavaScript的二维码生成库,主要是通过获取 DOM 的标签,再通过 HTML5 Canvas 绘制而成,不依赖任何库。 官方文档:https://www.npmjs.com/package/qrcode qrcode理论上支持所有现代浏览器以及部分老版本浏览器。具体而言,只要这些浏览器支持HTML5 Canvas和/或DOM操作,就可以

    2024年02月21日
    浏览(82)
  • Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码

    1.下载 npm install qrcode --save-dev 2.引入(在所需要的页面中引入) import QRCode from “qrcode”; //引入生成二维码插件 3.生成二维码 作者:微微一笑绝绝子 出处:Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码 - 微微一笑绝绝子 - 博客园 本博客文章均为作者

    2024年02月15日
    浏览(64)
  • uniapp小程序生成二维码+手机保存到本地

    1. 准备工作(具体参考哪位博主的忘了就没加锁参考的地方了) 1. 下载好所需文件(uqrCode.js)放在文末只要复制文末代码文件命名可自定义 2. 开始撸码 解决战斗 下面代码内容属于 开头所说文件

    2024年02月11日
    浏览(47)
  • 微信小程序生成二维码并保存到本地方法

    办法一 官方weapp-qrcode插件 github链接 功能完成样子 wxml js文件 如果github进不去可以直接复制我这个js到项目里 weapp-qrcode.js 办法二 如图所示 先下载依赖 然后点击小程序顶部菜单栏工具-构建npm 使用方法 wxml js 参数详解 条形码 函数名:barcode 函数原型:barcode(id, code, width, heig

    2024年02月04日
    浏览(49)
  • 纯前端实现二维码生成(原生/vue方法)(超简单)

    我们借用了qrcode.js插件,这个插件可以帮助我们生成二维码,超简单超好用 下面是我生成了一个主页的二维码,大家可以扫码查看效果 1.本地文件引入 本地引入依赖包地址:下载地址  1.首先引入插件,这里我是script标签引入的,如果用vue直接全局引入即可 2.npm方式引入 2

    2024年04月22日
    浏览(45)
  • 前端二维码生成工具小程序:构建营销神器的技术解析

    摘要: 随着数字化营销的不断深入,二维码作为一种快速、便捷的信息传递方式,已经广泛应用于各个领域。本文旨在探讨如何通过前端技术构建一个功能丰富、操作简便的二维码生成工具小程序,为企业和个人提供高效的营销支持。 一、引言 二维码作为一种特殊的编码方

    2024年04月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包