当前位置:首页 > 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中引入:

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打印的场景 安装依赖:

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)
  }
}

打印样式优化

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

vue实现打印功能

@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 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成列…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@la…

vue实现标题

vue实现标题

Vue 实现标题的方法 在Vue中实现标题可以通过多种方式,以下是几种常见的方法: 方法一:使用模板语法 在Vue组件的模板中直接使用HTML的<h1>到<h6>标签来定义…

vue实现换页

vue实现换页

Vue实现页面切换的方法 在Vue中实现页面切换通常可以通过Vue Router来完成。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的实现方式:…

轮播vue实现

轮播vue实现

使用 Vue 实现轮播功能 基础轮播实现 安装依赖(如使用 Swiper): npm install swiper vue-awesome-swiper 组件代码示例: <template&…