在 Vue 2 中实现 “点击下载条码 → 打开新窗口预览 → 自动唤起浏览器打印” 的功能

在 Vue 2 中实现 "点击下载条码 → 打开新窗口预览 → 自动唤起浏览器打印" 的功能

实现效果

javascript 复制代码
  1.模版中编写按钮绑定事件
   <!-- 操作列(下载按钮) -->
        <el-table-column label="操作" align="center" width="200">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              icon="el-icon-printer"
              @click="handlePrint(scope.row.barcodeUrl)"
            >
              打印
            </el-button>
          </template>
        </el-table-column>  


2.在script中编写逻辑
//打印操作 barcodeDownloadUrl是图片地址
    handlePrint(barcodeDownloadUrl) {
      if (barcodeDownloadUrl) {
        this.handlePrintQrCode(barcodeDownloadUrl);
      } else {
        this.$message.error("暂没有生成条形码");
      }
    },

    handlePrintQrCode(qrImageUrl) {
      try {
        const printWindow = window.open("", "_blank");
        if (!printWindow) {
          this.$message.error("浏览器阻止了弹出窗口,请允许弹出后重试");
          return;
        }

        const printContent = `
          <!DOCTYPE html>
          <html lang="zh-CN">
          <head>
            <meta charset="UTF-8">
            <title>二维码打印页</title>
            <style>
              * { margin: 0; padding: 0; box-sizing: border-box; }
              body {
                width: 100vw;
                height: 100vh;
                display: flex;
                justify-content: center;
                align-items: center;
                background: #fff;
                padding: 0;
                margin: 0;
              }
                @page {
                                margin: 0 !important;
                                size: 80mm 40mm;
                            }
                            
                            body, html {
                                margin: 0 !important;
                                padding: 0 !important;
                                width: 80mm !important;
                                height: 40mm !important;
                                overflow: hidden !important;
                                transform: translateY(0mm);
                            }
                            
                            @page {
                                margin: 0 !important;
                                -webkit-print-color-adjust: exact;
                            }
                            
                            body {
                                -webkit-print-color-adjust: exact;
                            }
              .print-qr-wrapper {
                width: ${80}mm;
                height: ${40}mm;
                border: 1px solid #eee;
                display: flex;
                justify-content: center;
                align-items:center;
                margin: 0 !important;
                padding: 0 !important;
              }
              .print-qr-img {
                width: 100%;
                height: 100%;
                object-fit: contain;
              }
            </style>
          </head>
          <body>
            <div class="print-qr-wrapper">
              <img 
                class="print-qr-img" 
                src="${qrImageUrl}" 
                alt="二维码"
                onload="window.focus()"
              >
            </div>
          </body>
          </html>
        `;

        printWindow.document.write(printContent);
        printWindow.document.close();

        printWindow.onafterprint = () => {
          printWindow.close();
        };

        setTimeout(() => {
          printWindow.print();
        }, 300);
      } catch (error) {
        this.$message.error("打印功能异常,请刷新页面重试");
      }
    },
相关推荐
灵感__idea6 小时前
Hello 算法:贪心的世界
前端·javascript·算法
GreenTea8 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
killerbasd9 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌9 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈10 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫10 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝10 小时前
svg图片
前端·css·学习·html·css3
橘子编程10 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
王夏奇10 小时前
python中的__all__ 具体用法
java·前端·python
叫我一声阿雷吧11 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint