当前位置:首页 > VUE

vue实现打印功能

2026-01-17 16:30:35VUE

vue实现打印功能的几种方法

使用window.print()方法

在Vue组件中直接调用浏览器原生打印API,适合简单打印需求

methods: {
  handlePrint() {
    window.print()
  }
}

需要配合CSS媒体查询隐藏不需要打印的元素

@media print {
  .no-print {
    display: none;
  }
}

使用vue-print-nb插件

安装插件:

npm install vue-print-nb --save

在main.js中引入:

vue实现打印功能

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

模板中使用:

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

<script>
export default {
  data() {
    return {
      printObj: {
        id: 'printContent',
        popTitle: '打印标题' 
      }
    }
  }
}
</script>

使用html2canvas + jsPDF库

适合需要将DOM转换为PDF打印的场景 安装依赖:

vue实现打印功能

npm install html2canvas jspdf --save

实现代码:

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

methods: {
  async printPDF() {
    const element = document.getElementById('print-area')
    const canvas = await html2canvas(element)
    const imgData = canvas.toDataURL('image/png')
    const pdf = new jsPDF('p', 'mm', 'a4')
    const imgProps = pdf.getImageProperties(imgData)
    const pdfWidth = pdf.internal.pageSize.getWidth()
    const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width
    pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight)
    pdf.save('document.pdf')
  }
}

使用iframe打印

创建隐藏iframe实现局部打印:

methods: {
  printByIframe() {
    const content = document.getElementById('print-area').innerHTML
    const iframe = document.createElement('iframe')
    iframe.style.display = 'none'
    document.body.appendChild(iframe)
    const frameDoc = iframe.contentDocument || iframe.contentWindow.document
    frameDoc.open()
    frameDoc.write(`
      <!DOCTYPE html>
      <html>
        <head>
          <style>
            /* 打印样式 */
          </style>
        </head>
        <body>${content}</body>
      </html>
    `)
    frameDoc.close()
    setTimeout(() => {
      iframe.contentWindow.focus()
      iframe.contentWindow.print()
      document.body.removeChild(iframe)
    }, 200)
  }
}

打印样式优化

创建专门的打印样式表确保打印效果:

@media print {
  body * {
    visibility: hidden;
  }
  #print-area, #print-area * {
    visibility: visible;
  }
  #print-area {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
  }
  @page {
    size: auto;
    margin: 0mm;
  }
}

以上方法可根据具体需求选择,简单打印推荐使用vue-print-nb插件,复杂需求可考虑html2canvas方案或iframe方案。

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

相关文章

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &l…

vue tag实现

vue tag实现

Vue 标签实现方法 在 Vue 中实现标签功能可以通过多种方式完成,常见场景包括动态标签生成、标签输入框、标签管理等。以下是几种典型实现方案: 动态标签列表渲染 使用 v-for 指令渲染标签数组…

vue实现过滤

vue实现过滤

Vue实现过滤的方法 在Vue中实现数据过滤可以通过多种方式完成,以下是几种常见的方法: 使用计算属性过滤 计算属性是Vue中处理数据过滤的理想选择,它们基于响应式依赖进行缓存,只有在相关依赖发生改…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model="…

vue computed实现

vue computed实现

计算属性的基本用法 在Vue中,计算属性通过computed选项定义,用于声明依赖于其他属性的动态值。计算属性基于它们的依赖进行缓存,只有依赖发生变化时才会重新计算。 new Vue({ dat…

vue实现单击

vue实现单击

Vue 实现单击事件的方法 在 Vue 中实现单击事件可以通过 v-on 指令或简写的 @ 符号绑定事件处理器。以下是几种常见的实现方式: 基础用法 通过 v-on:click 或 @click 绑…