vue生成二维码并下载[通俗易懂]

vue生成二维码并下载[通俗易懂]vue生成二维码图片,这里使用的是qrcode.js这个插件1、下载插件npminstall–saveqrcodejs22、组件内使用<template><Buttontype=”primary”size=”small”@click=”getScan()”>扫一扫</Button><Buttontype=”primary”size=”small”@click=”getDownload()”>下载</Bu..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

vue生成二维码图片,这里使用的是qrcode.js 这个插件

1、下载插件

npm install --save qrcodejs2

2、组件内使用

<template>
  <Button type=”primary” size=”small” @click=”getScan()”>扫一扫</Button>
  <Button type=”primary” size=”small” @click=”getDownload()”>下载</Button>
  <Button type=”primary” size=”small” @click=”getPrinting()”>打印</Button> <!–二维码–>

  <div id=”qrcode”></div>

</template>

3、<script>

import QRCode from ‘qrcodejs2’;
export default {

  name:’tracing’,
  data(){

    return{}
  },
  methods:{

    // 生成二维码
    qrcode(){

        let qrcode = new QRCode(‘qrcode’, {

            width: 200,
            height: 200, // 高度
            text:”二维码内容” 
      })
    },
    // 查看二维码
    getScan(){

       // 清空之前生成的二维码
      document.getElementById(‘qrcode’).innerHTML=”;
      this.$nextTick(()=>{

        this.qrcode();//生成二维码
      })
    },
    // 下载二维码
    getDownload(){    this.qrcode(); //下载之前首先要有二维码
      // 先找到canvas节点下的二维码图片
      let myCanvas = document.getElementById(‘qrcode’).getElementsByTagName(‘canvas’);
      let img=document.getElementById(‘qrcode’).getElementsByTagName(‘img’);
      // 创建一个a节点
      let a = document.createElement(‘a’);
      // 设置a的href属性将canvas变成png格式
      let imgURL=myCanvas[0].toDataURL(‘image/jpg’);
      let ua = navigator.userAgent;
      if (ua.indexOf(“Trident”) != -1 && ua.indexOf(“Windows”) != -1) { // IE内核 并且  windows系统 情况下 才执行;
        var bstr = atob(imgURL.split(‘,’)[1])
        var n = bstr.length
        var u8arr = new Uint8Array(n)
        while (n–) {

          u8arr[n] = bstr.charCodeAt(n)
        }
        var blob = new Blob([u8arr])
        window.navigator.msSaveOrOpenBlob(blob, ‘下载’ + ‘.’ + ‘png’)
      }else if(ua.indexOf(“Firefox”) > -1){ //火狐兼容下载
        let blob = this.base64ToBlob(imgURL); //new Blob([content]);
        let evt = document.createEvent(“HTMLEvents”);
        evt.initEvent(“click”, true, true);//initEvent 不加后两个参数在FF下会报错  事件类型,是否冒泡,是否阻止浏览器的默认行为
        a.download = ‘ ‘;//下载图片名称,如果填内容识别不到,下载为未知文件,所以我这里就不填为空
        a.href = URL.createObjectURL(blob);
        a.dispatchEvent(new MouseEvent(‘click’, {bubbles: true, cancelable: true, view: window}));//兼容火狐
      }else{ //谷歌兼容下载
        img.src=myCanvas[0].toDataURL(‘image/jpg’);
        // a.href = myCanvas[0].toDataURL(‘image/png’).replace(‘image/png’, ‘image/octet-stream’)
        a.href=img.src
        //设置下载文件的名字
        a.download = “下载”
         //点击
        a.click()
      }
    },
  // 打印二维码  getPrinting(){    let employeeName = “溯源信息”;
    let printContent = `<td >      <div style=”text-align: center;margin:0 0 10px;border:1px solid #ccc;padding:10px;width:300px” id=’XQ’></div>      <div style=”text-align: center;margin:0 0 10px;width:300px” >        <strong>${employeeName}</strong>      </div>

        </td>`;
      document.getElementById(“qrcode”).innerHTML = printContent;
      let new_str = document.getElementById(“qrcode”).innerHTML; //获取指定打印区域
      //构建新网页(关键步骤,必须先构建新网页,在生成二维码,否则不能显示二维码)
      document.body.innerHTML = new_str;
      for (let j = 0; j < 1; j++) {

        document.getElementById(“XQ”).innerHTML = “”; //置空
        new QRCode(document.getElementById(“XQ”), {

            text: “dfjkdjdfjak123456789”,
            width: 250,
            height: 250,
            colorDark: “#000000”,
            colorLight: “#ffffff”,
        });
      }
      window.print(); //打印刚才新建的网页
      window.location.reload();
      return false;

    },
    //base64转blob
    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});
    }
  }
}
</script>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186331.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月3日 下午5:36
下一篇 2022年10月3日 下午5:46


相关推荐

  • 光纤交换机如何划分zone[通俗易懂]

    光纤交换机如何划分zone[通俗易懂]说明:1.不同厂商的光纤交换机zone的划分类似,所以只要掌握了一种其他则可以触类旁通。2.如果想使用图形界面对光纤交换机划分zone,在pc端必须安装javawebstart,初次访问阵列它会提示下载地址。一.规划在对光纤交换机进行设置前,一定要做好相应的规划,比如那些端口要连接主机,那些端口要连接阵列,考虑到减少“乒乓效应”及平衡负载,当我们划分zone时最好用一对一关系,即一个zone只接一个主机一个阵列,而不是划分一个大的zone阵列主机都插…

    2022年5月11日
    50
  • 运行计划之误区,为什么COST非常小,SQL却跑得非常慢?[通俗易懂]

    运行计划之误区,为什么COST非常小,SQL却跑得非常慢?

    2022年1月26日
    39
  • 遍历qvector_顺序储存容器QVector | 学步园

    遍历qvector_顺序储存容器QVector | 学步园容器 Containers 有时候也被称为集合 collections 指的是能够在内存中存储其他特定类型的对象的对象 这种对象一般是通用的模板类 C 提供了一套完整的解决方案 成为标准模板库 StandardTemp 也就是我们常说的 STL Qt 提供了它自己的一套容器类 这就是说 在 Qt 的应用程序中 我们可以使用标准 C 的 STL 也可以使用 Qt 的容器类 Qt 容器类的好处在

    2025年7月4日
    4
  • 判断完全二叉树

    判断完全二叉树完全二叉树的定义:一棵二叉树,除了最后一层之外都是完全填充的,并且最后一层的叶子结点都在左边。https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91/7773232?fr=aladdin百度定义 思路:层序遍历二叉树如果一个结点,左右孩子都不为空,则pop该节点,将其左右孩子入队列…

    2022年7月13日
    26
  • 用批处理文件阻止win10强制更新

    用批处理文件阻止win10强制更新win10这个商业巨头微软的最新之作,以流氓行径著称,尤其是它的自动更新最受诟病。用户无权选择是否下载和安装更新。你选择不更新,他就在后台下载,下次开机自动安装。何况,这些更新有的没必要,有的装上反而起副作用。我之前就被装上的更新弄坏网卡驱动,重装一次系统;今年3月大范围爆发的更新bug,导致众多用户USB驱动坏掉,又重装一次系统。再后来,我知道了更新的危害,就每天手动删除那些更新安装包,结果有一…

    2022年6月4日
    34
  • 腾讯元宝闪电接入DeepSeek V3最新版:一句话就能生成可运行网页

    腾讯元宝闪电接入DeepSeek V3最新版:一句话就能生成可运行网页

    2026年3月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号