当前位置:首页 > VUE

vue实现打印二维码

2026-01-12 08:43:02VUE

安装依赖

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

npm install qrcode html2canvas

生成二维码

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

<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 将二维码转换为图像并调用浏览器打印功能。

<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实现图片分析

Vue 实现图片分析的方法 在 Vue 中实现图片分析通常涉及图片上传、预览、后端交互以及分析结果展示等功能。以下是几种常见的实现方式: 使用 HTML5 File API 和 Canvas 进行…

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓…

vue前端分页怎么实现

vue前端分页怎么实现

前端分页实现方法 在Vue中实现前端分页通常涉及数据分割和页面控制逻辑。以下是常见的实现方式: 使用计算属性分页 通过计算属性对数据进行切片处理: computed: { paginatedD…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…