当前位置:首页 > VUE

vue实现打印二维码

2026-01-12 08:43:02VUE

安装依赖

需要安装 qrcodehtml2canvas 库来生成二维码并转换为可打印的图像。

npm install qrcode html2canvas

生成二维码

使用 qrcode 生成二维码并渲染到页面。

vue实现打印二维码

<template>
  <div>
    <canvas id="qrcode-canvas"></canvas>
    <button @click="printQRCode">打印二维码</button>
  </div>
</template>

<script>
import QRCode from 'qrcode';

export default {
  data() {
    return {
      qrData: 'https://example.com', // 二维码内容
    };
  },
  mounted() {
    this.generateQRCode();
  },
  methods: {
    generateQRCode() {
      const canvas = document.getElementById('qrcode-canvas');
      QRCode.toCanvas(canvas, this.qrData, { width: 200 }, (error) => {
        if (error) console.error(error);
      });
    },
  },
};
</script>

打印二维码

使用 html2canvas 将二维码转换为图像并调用浏览器打印功能。

vue实现打印二维码

<script>
import html2canvas from 'html2canvas';

export default {
  methods: {
    printQRCode() {
      const canvas = document.getElementById('qrcode-canvas');
      html2canvas(canvas).then((printCanvas) => {
        const printWindow = window.open('', '_blank');
        printWindow.document.write('<img src="' + printCanvas.toDataURL() + '"/>');
        printWindow.document.close();
        printWindow.onload = () => printWindow.print();
      });
    },
  },
};
</script>

优化打印样式

可以调整打印页面的样式,确保二维码居中且无额外边距。

<script>
methods: {
  printQRCode() {
    const canvas = document.getElementById('qrcode-canvas');
    html2canvas(canvas).then((printCanvas) => {
      const printWindow = window.open('', '_blank');
      printWindow.document.write(`
        <style>
          body { margin: 0; display: flex; justify-content: center; align-items: center; height: 100vh; }
          img { max-width: 100%; max-height: 100%; }
        </style>
        <img src="${printCanvas.toDataURL()}"/>
      `);
      printWindow.document.close();
      printWindow.onload = () => printWindow.print();
    });
  },
},
</script>

支持多二维码打印

若需批量打印多个二维码,可以通过循环生成并拼接图像。

<template>
  <div>
    <div v-for="(item, index) in qrList" :key="index">
      <canvas :id="'qrcode-canvas-' + index"></canvas>
    </div>
    <button @click="printAllQRCode">打印全部</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      qrList: ['https://example.com/1', 'https://example.com/2'],
    };
  },
  mounted() {
    this.qrList.forEach((data, index) => {
      const canvas = document.getElementById(`qrcode-canvas-${index}`);
      QRCode.toCanvas(canvas, data, { width: 200 });
    });
  },
  methods: {
    printAllQRCode() {
      const promises = this.qrList.map((_, index) => {
        const canvas = document.getElementById(`qrcode-canvas-${index}`);
        return html2canvas(canvas);
      });

      Promise.all(promises).then((canvases) => {
        const printWindow = window.open('', '_blank');
        let html = '<style>body { margin: 0; } img { margin: 10px; }</style>';
        canvases.forEach(canvas => {
          html += `<img src="${canvas.toDataURL()}"/>`;
        });
        printWindow.document.write(html);
        printWindow.document.close();
        printWindow.onload = () => printWindow.print();
      });
    },
  },
};
</script>

标签: 二维码vue
分享给朋友:

相关文章

vue实现单词反转

vue实现单词反转

实现思路 在Vue中实现单词反转功能,可以通过多种方式完成。核心思路是利用JavaScript的字符串处理方法,将输入的单词或句子拆分为数组,反转数组后再拼接成字符串。 方法一:使用计算属性 通过计…

vue实现多级弹窗

vue实现多级弹窗

Vue 多级弹窗实现方法 方法一:使用动态组件与递归组件 在 Vue 中可以通过动态组件配合递归组件实现多级弹窗。定义一个基础弹窗组件,通过递归调用自身实现层级嵌套。 基础弹窗组件模板示例:…

vue实现sql操作

vue实现sql操作

在Vue中实现SQL操作通常需要结合后端服务或本地数据库技术,因为前端JavaScript无法直接连接SQL数据库。以下是几种常见的实现方式: 通过API与后端交互 Vue前端通过HTTP请求(如a…

vue实现多人视频

vue实现多人视频

实现多人视频通话的Vue方案 使用WebRTC技术结合Vue框架可以构建多人视频通话应用。以下是核心实现方法: 技术栈选择 Vue 2/3作为前端框架 WebRTC用于实时通信 Socket.…

vue实现选择季度

vue实现选择季度

Vue 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <…

vue登录逻辑的实现

vue登录逻辑的实现

Vue 登录逻辑实现 前端实现 创建登录组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含表单元素,如用户名和密码输入框,以及提交按钮。 <template…