当前位置:首页 > 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 中实现文档功能可以通过多种方式,包括使用富文本编辑器、Markdown 解析或直接渲染 HTML。以下是几种常见的实现方法。 使用富文本编辑器 富文本编辑器如 T…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show…

vue轮播实现

vue轮播实现

Vue 轮播实现方法 使用第三方库(推荐) 安装 swiper 或 vue-awesome-swiper 库,快速实现功能丰富的轮播效果。 以 vue-awesome-swiper 为例: npm…

vue实现pc

vue实现pc

Vue 实现 PC 端应用开发 Vue.js 是一个流行的前端框架,适用于构建 PC 端 Web 应用。以下是关键步骤和最佳实践: 项目初始化 使用 Vue CLI 或 Vite 创建项目:…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…