在 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("打印功能异常,请刷新页面重试");
      }
    },
相关推荐
凌览21 小时前
2026年1月编程语言排行榜|C#拿下年度语言,Python稳居第一
前端·后端·程序员
user861581857815421 小时前
Element UI 表格 show-overflow-tooltip 长文本导致闪烁的根本原因与解法
前端
不会写前端的小丁21 小时前
前端首屏渲染性能优化小技巧
前端
还不秃顶的计科生21 小时前
defaultdict讲解
开发语言·javascript·ecmascript
晴虹21 小时前
lecen:一个更好的开源可视化系统搭建项目--组件和功能按钮的权限控制--全低代码|所见即所得|利用可视化设计器构建你的应用系统-做一
前端·后端·低代码
爱分享的鱼鱼1 天前
Pinia 深度解析:现代Vue应用状态管理最佳实践
前端·后端
花归去1 天前
echarts 柱状图包含右侧进度
开发语言·前端·javascript
计算机毕设VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue在线音乐播放系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
计算机毕设VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue博物馆展览与服务一体化系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
沐浴露z1 天前
学习通“只能录入不能粘贴” 解决方案与原理分析
javascript