在 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("打印功能异常,请刷新页面重试");
      }
    },
相关推荐
RichardLau_Cx1 小时前
【保姆级实操】MediaPipe SDK/API 前端项目接入指南(Web版,可直接复制代码)
前端·vue·react·webassembly·mediapipe·手部追踪·前端计算机视觉
不爱写程序的东方不败1 小时前
APP接口测试流程实战Posman+Fiddler
前端·测试工具·fiddler
yangzheui2 小时前
【VUE2转VUE3学习笔记】-Day1:模板语法
vue.js·笔记·学习
晚霞的不甘2 小时前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互
黎子越2 小时前
python相关练习
java·前端·python
摘星编程2 小时前
用React Native开发OpenHarmony应用:StickyHeader粘性标题
javascript·react native·react.js
A_nanda2 小时前
c# 用VUE+elmentPlus生成简单管理系统
javascript·vue.js·c#
天天进步20153 小时前
Motia事件驱动的内核:深入适配器(Adapter)层看消息队列的流转
javascript
北极糊的狐3 小时前
若依项目vue前端启动键入npm run dev 报错:不是内部或外部命令,也不是可运行的程序或批处理文件。
前端·javascript·vue.js
XRJ040618xrj3 小时前
Nginx下构建PC站点
服务器·前端·nginx