当前位置:首页 > VUE

vue实现打印插件

2026-01-19 16:24:32VUE

vue-print-nb 插件实现打印

安装插件:

npm install vue-print-nb --save

全局引入:

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

局部使用:

vue实现打印插件

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

<script>
export default {
  data() {
    return {
      printConfig: {
        id: 'printContent',
        popTitle: '打印标题',  // 打印窗口标题
        extraCss: 'https://xxx.css',  // 额外CSS
        extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>'  // 额外头部标签
      }
    }
  }
}
</script>

window.print() 原生方法实现

创建打印区域:

<template>
  <div id="printArea">
    <!-- 打印内容 -->
  </div>
  <button @click="handlePrint">打印</button>
</template>

<script>
export default {
  methods: {
    handlePrint() {
      const printContent = document.getElementById('printArea').innerHTML
      const originalContent = document.body.innerHTML

      document.body.innerHTML = printContent
      window.print()
      document.body.innerHTML = originalContent
    }
  }
}
</script>

打印样式控制

添加打印专用样式:

vue实现打印插件

<style>
@media print {
  /* 隐藏不需要打印的元素 */
  .no-print {
    display: none;
  }

  /* 调整打印布局 */
  body {
    margin: 0;
    padding: 0;
  }

  /* 强制分页 */
  .page-break {
    page-break-after: always;
  }
}
</style>

打印图片处理

确保图片加载完成:

methods: {
  printWithImages() {
    const printWindow = window.open('', '_blank')
    printWindow.document.write('<html><head><title>打印</title>')
    printWindow.document.write('<style>@page { size: auto; margin: 0; }</style>')
    printWindow.document.write('</head><body>')

    const images = document.querySelectorAll('#printArea img')
    let loaded = 0

    images.forEach(img => {
      const newImg = new Image()
      newImg.onload = () => {
        loaded++
        if (loaded === images.length) {
          printWindow.document.write(document.getElementById('printArea').innerHTML)
          printWindow.document.write('</body></html>')
          printWindow.document.close()
          printWindow.focus()
          setTimeout(() => {
            printWindow.print()
            printWindow.close()
          }, 500)
        }
      }
      newImg.src = img.src
    })
  }
}

打印表格优化

处理表格分页:

@media print {
  table {
    page-break-inside: auto;
  }
  tr {
    page-break-inside: avoid;
    page-break-after: auto;
  }
  thead {
    display: table-header-group;
  }
  tfoot {
    display: table-footer-group;
  }
}

打印事件监听

添加打印前后事件:

window.matchMedia('print').addListener(mql => {
  if (mql.matches) {
    console.log('打印前处理')
  } else {
    console.log('打印后处理')
  }
})

标签: 插件vue
分享给朋友:

相关文章

vue实现动态

vue实现动态

Vue 实现动态路由的方法 在 Vue 中实现动态路由通常涉及以下几个关键步骤: 使用 Vue Router 的动态路由匹配 通过 Vue Router 的 :param 语法可以实现动态路由匹配…

甘特图vue实现

甘特图vue实现

甘特图 Vue 实现方法 使用开源库 vue-ganttastic 安装依赖: npm install vue-ganttastic 基础实现代码: <template> &l…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现答辩

vue实现答辩

Vue 实现答辩系统的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Pinia/Vuex 进行状态管理。配置 ESLint 和 Pre…

vue实现监听

vue实现监听

监听数据变化 在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。 // 选项式API export default…

vue实现翻页

vue实现翻页

Vue实现翻页功能 在Vue中实现翻页功能通常需要结合分页组件和数据请求逻辑。以下是常见的实现方法: 使用Element UI分页组件 安装Element UI后,可以直接使用其分页组件:…