vue中 生成二维码 并自动批量下载

项目中经常又这样的需求,要求将字符串生成二维码,并下载下来

一般分为 生成一个二维码展示并下载,对于这种你只需调用 qrcodejs2生成二维码就可以了 下载也是按钮触发 

今天我们要说的是 批量下载,具体做法是

首先下载资源

npm install  qrcodejs2 --save

在对于的文件中引入,在template中添加如下的html代码

<div id="qrcode" style="display:none"></div>

然后就是获得一个 数组字符串,就是需要生成二维码的字符串 弄成一个数组

    let newArr = getNewArra()
    for (let i = 0; i < newArr.length; i++) {
        (function (code) {
            new QRCode('qrcode', {
              width: 200,
              height: 200, // 高度
              text: code, // 二维码内容
              correctLevel: QRCode.CorrectLevel.H
              })
             downloadQrCode()
        })(newArr[i])
    }

 function downloadQrCode () {
        let myselfCanvas = document.getElementById('qrcode').getElementsByTagName('canvas')
        let img = document.getElementById('qrcode').getElementsByTagName('img')
        let ah = document.createElement('a')
        let imgURL = myselfCanvas[0].toDataURL('image/jpg')
        let u = navigator.userAgent
        if (u.indexOf('Trident') !== -1 && u.indexOf('Windows') !== -1) {
          let bstr = atob(imgURL.split(',')[1])
          let n = bstr.length
          let u8arr = new Uint8Array(n)
          while (n--) {
            u8arr[n] = bstr.charCodeAt(n)
          }
          let blob = new Blob([u8arr])
          window.navigator.msSaveOrOpenBlob(blob, '二维码' + '.' + 'png')
        } else if (u.indexOf('Firefox') > -1) {
          let blob = base64ToBlob(imgURL)
          let evt = document.createEvent('HTMLEvents')
          evt.initEvent('click', true, true)
          ah.download = ' '
          ah.href = URL.createObjectURL(blob)
          ah.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window }))
        } else {
          img.src = myselfCanvas[0].toDataURL('image/jpg')
          ah.href = img.src
          ah.download = '二维码图片'
          ah.click()
        }
      }
      // base64转blob
      function base64ToBlob (code) {
        let parts = code.split(';base64,')
        let contentType = parts[0].split(':')[1]
        let raw = window.atob(parts[1])
        let rawLength = raw.length
        let uInt8Array = new Uint8Array(rawLength)
        for (let i = 0; i < rawLength; ++i) {
          uInt8Array[i] = raw.charCodeAt(i)
        }
        return new Blob([uInt8Array], { type: contentType })
      }

解释一下:可以将downloadQrCode()函数绑定到单独下载的按钮上去,这样就变成一个一个下载的
而  我是使用了匿名函数 一个一个的去生成二维码 并自动去调用下载。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
要在Vue3生成二维码下载,可以使用qrcode-generator库和html2canvas库。下面是实现的步骤: 1. 安装依赖: ``` npm install qrcode-generator html2canvas --save ``` 2. 在组件引入依赖: ```javascript import QRCode from 'qrcode-generator'; import html2canvas from 'html2canvas'; ``` 3. 在组件定义生成二维码的方法: ```javascript generateQRCode() { // 创建二维码实例 const qr = QRCode(0, 'L'); // 设置二维码内容 qr.addData('https://www.example.com'); qr.make(); // 获取二维码图片的base64编码 const base64 = qr.createDataURL(); // 创建一个img标签 const img = new Image(); // 设置img标签的src属性为二维码图片的base64编码 img.src = base64; // 将img标签插入到DOM document.body.appendChild(img); // 使用html2canvas库将DOM转换为canvas html2canvas(document.body).then(canvas => { // 将canvas转换为图片的base64编码 const imageBase64 = canvas.toDataURL('image/png'); // 创建一个a标签 const a = document.createElement('a'); // 设置a标签的href属性为图片的base64编码 a.href = imageBase64; // 设置a标签的download属性为下载的文件名 a.download = 'qrcode.png'; // 将a标签插入到DOM document.body.appendChild(a); // 模拟点击a标签进行下载 a.click(); // 将a标签从DOM移除 document.body.removeChild(a); }); } ``` 4. 在组件调用生成二维码的方法: ```html <template> <div> <button @click="generateQRCode">生成二维码下载</button> </div> </template> ```
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值