当前位置:首页 > VUE

vue实现html打印功能

2026-02-23 23:19:29VUE

使用window.print()实现基础打印

在Vue中可以直接调用浏览器原生打印功能:

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

在模板中添加按钮触发:

<button @click="printPage">打印当前页</button>

打印特定区域内容

创建打印专用的隐藏容器:

<div class="print-area" ref="printContent">
  <!-- 需要打印的内容 -->
</div>
<div class="no-print">
  <!-- 不打印的内容 -->
</div>

通过CSS控制打印样式:

@media print {
  .no-print {
    display: none;
  }
  .print-area {
    display: block !important;
  }
}

使用vue-print-nb插件

安装插件:

npm install vue-print-nb --save

全局或局部引入:

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

// 或局部使用
directives: {
  print: Print
}

模板中使用:

<div id="printMe">
  <!-- 打印内容 -->
</div>
<button v-print="'#printMe'">打印</button>

自定义打印样式

创建单独的打印样式表:

@media print {
  body * {
    visibility: hidden;
  }
  .print-container, .print-container * {
    visibility: visible;
  }
  .print-container {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
  }
}

处理分页和布局

使用CSS控制分页:

@media print {
  .page-break {
    page-break-after: always;
  }
  table {
    page-break-inside: avoid;
  }
}

打印前数据处理

在打印前处理数据:

printWithData() {
  this.$nextTick(() => {
    const printContent = this.$refs.printContent.innerHTML
    const originalContent = document.body.innerHTML
    document.body.innerHTML = printContent
    window.print()
    document.body.innerHTML = originalContent
  })
}

使用iframe实现静默打印

创建iframe打印方法:

silentPrint(html) {
  const iframe = document.createElement('iframe')
  iframe.style.display = 'none'
  document.body.appendChild(iframe)
  const doc = iframe.contentWindow.document
  doc.open()
  doc.write(html)
  doc.close()

  iframe.contentWindow.onload = () => {
    iframe.contentWindow.print()
    document.body.removeChild(iframe)
  }
}

处理图片打印问题

确保图片加载完成:

printWithImages() {
  const images = this.$refs.printContent.getElementsByTagName('img')
  let loaded = 0

  Array.from(images).forEach(img => {
    if (img.complete) {
      loaded++
    } else {
      img.onload = () => {
        loaded++
        if (loaded === images.length) {
          this.printPage()
        }
      }
    }
  })

  if (loaded === images.length) {
    this.printPage()
  }
}

vue实现html打印功能

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

相关文章

vue实现网页切换

vue实现网页切换

Vue 实现网页切换的方法 在 Vue 中实现网页切换通常可以通过以下几种方式完成,具体取决于项目需求和路由管理方式。 使用 Vue Router Vue Router 是 Vue.js 官方提供的…

拖拽式编程vue实现

拖拽式编程vue实现

拖拽式编程在 Vue 中的实现方法 使用 HTML5 原生拖放 API Vue 可以结合 HTML5 的拖放 API 实现基础拖拽功能。通过 draggable 属性标记可拖拽元素,监听 dragst…

vue广告实现

vue广告实现

Vue 广告实现方法 在 Vue 项目中实现广告功能可以通过多种方式完成,具体取决于广告类型和需求。以下是几种常见的实现方法: 使用第三方广告平台 许多广告平台如 Google AdSense…

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue element实现

vue element实现

Vue Element UI 实现 Vue Element UI 是基于 Vue.js 的组件库,提供丰富的 UI 组件,适合快速开发企业级中后台产品。以下是一些关键实现方法和步骤: 安装 Vue…

vue实现标签

vue实现标签

Vue 实现标签的方法 在 Vue 中实现标签功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 动态组件可以根据不同的条件渲染不同的标签内容。通过 :is 属性动态绑定组件名,实现标签…