当前位置:首页 > 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)
  }
}

处理图片打印问题

确保图片加载完成:

vue实现html打印功能

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
分享给朋友:

相关文章

vue中登陆实现逻辑

vue中登陆实现逻辑

Vue 中登录实现逻辑 前端实现逻辑 表单验证 使用 Vue 的表单验证库(如 VeeValidate)或自定义验证规则,确保用户输入的账号和密码符合要求。例如,检查邮箱格式、密码长度等。 发送登录…

vue实现树

vue实现树

Vue 实现树形结构的方法 使用递归组件实现树形结构 递归组件是Vue中实现树形结构的常见方式。通过组件调用自身,可以轻松构建多层嵌套的树形数据。 <template> <ul…

vue实现popper

vue实现popper

Vue 实现 Popper 的方法 使用 Tippy.js 库 Tippy.js 是一个轻量级的 Popper.js 封装库,提供丰富的工具提示功能。安装 Tippy.js 及其 Vue 封装: n…

vue实现横滚

vue实现横滚

Vue 实现横滚效果 横滚效果通常指水平滚动内容,常见于轮播图、横向导航栏等场景。以下是几种实现方式: 使用 CSS 和 Vue 结合 通过 CSS 的 overflow-x 和 white-spa…

vue 实现音乐

vue 实现音乐

Vue 实现音乐播放功能 在 Vue 中实现音乐播放功能,可以通过 HTML5 的 <audio> 元素或第三方库如 howler.js 来实现。以下是两种方法的详细步骤: 使用 HTM…

vue实现回复

vue实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及前端表单交互、数据绑定和后端通信。以下是实现回复功能的详细步骤: 数据绑定与表单设计 使用 Vue 的 v-model 绑定回复框的输入内容,…