当前位置:首页 > 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 中实现添加用户功能,首先需要设计一个表单,用于收集用户输入的数据。通过 v-model 实现双向数据绑定,确保表单数据与 Vue 实例中的数据…

vue手动实现弹窗

vue手动实现弹窗

实现弹窗组件的基本结构 在Vue中手动实现弹窗组件,需要创建一个独立的弹窗组件,并通过props控制其显示与隐藏。弹窗组件通常包含遮罩层、内容区域和关闭按钮。 <template>…

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { -…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template>…

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提…