当前位置:首页 > VUE

vue实现预览打印

2026-03-09 09:46:49VUE

使用vue-print-nb插件实现打印预览

安装vue-print-nb插件:

npm install vue-print-nb --save

在main.js中引入并注册:

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

在组件中使用:

<template>
  <div>
    <button v-print="printObj">打印</button>
    <div id="printContent">
      <!-- 需要打印的内容 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      printObj: {
        id: 'printContent',
        popTitle: '打印标题', // 打印窗口标题
        extraCss: '', // 附加CSS
        extraHead: '' // 附加头部
      }
    }
  }
}
</script>

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

创建打印方法:

methods: {
  handlePrint() {
    const printContent = document.getElementById('printContent').innerHTML
    const originalContent = document.body.innerHTML

    document.body.innerHTML = printContent
    window.print()
    document.body.innerHTML = originalContent
  }
}

添加打印按钮:

<button @click="handlePrint">打印</button>
<div id="printContent">
  <!-- 需要打印的内容 -->
</div>

使用CSS控制打印样式

创建打印专用样式:

@media print {
  body * {
    visibility: hidden;
  }
  #printContent, #printContent * {
    visibility: visible;
  }
  #printContent {
    position: absolute;
    left: 0;
    top: 0;
  }
}

使用html2canvas+jspdf实现PDF导出

安装依赖:

npm install html2canvas jspdf

实现方法:

import html2canvas from 'html2canvas'
import jsPDF from 'jspdf'

methods: {
  exportPDF() {
    html2canvas(document.querySelector('#printContent')).then(canvas => {
      const imgData = canvas.toDataURL('image/png')
      const pdf = new jsPDF('p', 'mm', 'a4')
      const imgWidth = 190
      const pageHeight = 277
      const imgHeight = canvas.height * imgWidth / canvas.width
      let heightLeft = imgHeight
      let position = 10

      pdf.addImage(imgData, 'PNG', 10, position, imgWidth, imgHeight)
      heightLeft -= pageHeight

      while (heightLeft >= 0) {
        position = heightLeft - imgHeight
        pdf.addPage()
        pdf.addImage(imgData, 'PNG', 10, position, imgWidth, imgHeight)
        heightLeft -= pageHeight
      }

      pdf.save('file.pdf')
    })
  }
}

使用iframe实现打印隔离

创建iframe打印方法:

vue实现预览打印

methods: {
  printWithIframe() {
    const content = document.getElementById('printContent').innerHTML
    const iframe = document.createElement('iframe')
    iframe.style.display = 'none'
    document.body.appendChild(iframe)

    const frameDoc = iframe.contentWindow || iframe.contentDocument
    if (frameDoc.document) {
      frameDoc = frameDoc.document
    }

    frameDoc.open()
    frameDoc.write(content)
    frameDoc.close()

    setTimeout(() => {
      iframe.contentWindow.focus()
      iframe.contentWindow.print()
      document.body.removeChild(iframe)
    }, 200)
  }
}

这些方法提供了从简单到复杂的多种打印预览实现方案,可以根据项目需求选择合适的方案。对于简单的打印需求,推荐使用vue-print-nb插件或原生window.print方法;对于需要更复杂控制的情况,可以考虑html2canvas+jspdf方案。

标签: vue
分享给朋友:

相关文章

vue使用vr实现标注

vue使用vr实现标注

Vue 中使用 VR 实现标注的方法 在 Vue 项目中结合 VR 技术实现标注功能,可以通过 WebXR 和 Three.js 等库实现。以下为具体实现方法: 安装依赖 确保项目中已安装 Thre…

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-m…

vue实现modal

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基础…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现多选

vue实现多选

Vue 实现多选功能 在 Vue 中实现多选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定到一个数组,可以实现多选功能。适用于复选框组(…

vue实现api

vue实现api

Vue 实现 API 调用 在 Vue 中调用 API 通常涉及使用 axios 或 fetch 发送 HTTP 请求,并结合 Vue 的响应式特性管理数据。以下是常见的实现方式: 安装 axios…