当前位置:首页 > VUE

vue实现标签打印

2026-03-30 07:51:52VUE

使用vue-print-nb插件实现标签打印

安装vue-print-nb插件

npm install vue-print-nb --save

在main.js中引入并注册插件

import Print from 'vue-print-nb'
Vue.use(Print)

在组件中使用v-print指令

vue实现标签打印

<template>
  <div>
    <button v-print="printObj">打印标签</button>
    <div id="printContent">
      <!-- 标签内容 -->
      <div class="label">标签内容示例</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      printObj: {
        id: 'printContent',
        popTitle: '标签打印',
        extraCss: 'https://example.com/print.css'
      }
    }
  }
}
</script>

<style>
@media print {
  .label {
    width: 100mm;
    height: 50mm;
    border: 1px solid #000;
    page-break-after: always;
  }
}
</style>

使用window.print()原生方法实现

创建打印模板组件

<template>
  <div>
    <button @click="printLabel">打印标签</button>
    <div ref="printContent" class="print-area">
      <div v-for="(item, index) in labels" :key="index" class="label">
        {{ item.content }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      labels: [
        { content: '标签1' },
        { content: '标签2' }
      ]
    }
  },
  methods: {
    printLabel() {
      const printWindow = window.open('', '_blank')
      printWindow.document.write(`
        <html>
          <head>
            <title>标签打印</title>
            <style>
              .label {
                width: 100mm;
                height: 50mm;
                border: 1px solid #000;
                margin: 5mm;
                page-break-after: always;
              }
            </style>
          </head>
          <body>
            ${this.$refs.printContent.innerHTML}
          </body>
        </html>
      `)
      printWindow.document.close()
      printWindow.focus()
      printWindow.print()
      printWindow.close()
    }
  }
}
</script>

使用CSS控制打印样式

设置打印专用样式

vue实现标签打印

@media print {
  body * {
    visibility: hidden;
  }
  .print-area, .print-area * {
    visibility: visible;
  }
  .print-area {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
  }
  .label {
    width: 100mm;
    height: 50mm;
    border: 1px solid #000;
    margin: 5mm;
    page-break-after: always;
  }
}

处理多页标签打印

配置分页和边距

@page {
  size: A4;
  margin: 0;
}
@media print {
  .label {
    width: 90mm;
    height: 50mm;
    margin: 5mm;
    float: left;
    page-break-inside: avoid;
  }
}

使用PDF生成后打印

安装html2pdf.js

npm install html2pdf.js

在组件中使用

import html2pdf from 'html2pdf.js'

export default {
  methods: {
    printToPDF() {
      const element = document.getElementById('printContent')
      const opt = {
        margin: 10,
        filename: 'labels.pdf',
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: { scale: 2 },
        jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
      }
      html2pdf().from(element).set(opt).save()
    }
  }
}

标签: 标签vue
分享给朋友:

相关文章

vue实现选择分类

vue实现选择分类

Vue 实现选择分类的方法 使用 v-model 绑定选择值 在 Vue 中可以通过 v-model 指令实现双向数据绑定,适用于下拉选择框(<select>)。以下是一个基本示例: &…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…

vue实现visual

vue实现visual

Vue 实现可视化(Visual)的常见方法 在 Vue 中实现可视化通常涉及数据可视化库的集成,以下是几种主流方案: 使用 ECharts ECharts 是一个强大的 JavaScript 图表…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐藏。…

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…