当前位置:首页 > VUE

vue实现table打印功能

2026-02-24 16:47:51VUE

Vue 实现表格打印功能

方法一:使用浏览器原生打印 API

在 Vue 组件中创建一个打印方法,利用 window.print() 触发浏览器打印对话框。确保表格样式适配打印布局。

<template>
  <div>
    <button @click="printTable">打印表格</button>
    <div id="printArea">
      <table>
        <!-- 表格内容 -->
      </table>
    </div>
  </div>
</template>

<script>
export default {
  methods: {
    printTable() {
      const printContent = document.getElementById('printArea').innerHTML;
      const originalContent = document.body.innerHTML;
      document.body.innerHTML = printContent;
      window.print();
      document.body.innerHTML = originalContent;
    }
  }
};
</script>

<style>
@media print {
  body * {
    visibility: hidden;
  }
  #printArea, #printArea * {
    visibility: visible;
  }
  #printArea {
    position: absolute;
    left: 0;
    top: 0;
  }
}
</style>

方法二:使用第三方库 vue-print-nb

安装 vue-print-nb 插件,通过指令方式实现打印功能。

npm install vue-print-nb --save

在 Vue 项目中注册插件并使用:

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

模板中使用 v-print 指令:

<template>
  <div>
    <button v-print="printObj">打印表格</button>
    <div id="printContent">
      <table>
        <!-- 表格内容 -->
      </table>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      printObj: {
        id: 'printContent',
        popTitle: '表格打印',
        extraCss: 'https://example.com/print.css'
      }
    }
  }
}
</script>

方法三:专用打印样式表

为打印场景单独设计 CSS 样式,隐藏非必要元素,优化打印布局。

/* 打印样式 */
@media print {
  .no-print {
    display: none;
  }
  table {
    width: 100%;
    border-collapse: collapse;
  }
  th, td {
    border: 1px solid #000;
    padding: 8px;
  }
  thead {
    display: table-header-group;
  }
}

方法四:PDF 生成后打印

使用 jsPDF 和 html2canvas 库将表格转为 PDF 后打印。

npm install jspdf html2canvas

实现代码:

vue实现table打印功能

import jsPDF from 'jspdf'
import html2canvas from 'html2canvas'

export default {
  methods: {
    async printPDF() {
      const element = document.getElementById('printArea')
      const canvas = await html2canvas(element)
      const imgData = canvas.toDataURL('image/png')
      const pdf = new jsPDF('p', 'mm', 'a4')
      const imgWidth = 210
      const imgHeight = canvas.height * imgWidth / canvas.width
      pdf.addImage(imgData, 'PNG', 0, 0, imgWidth, imgHeight)
      pdf.autoPrint()
      window.open(pdf.output('bloburl'))
    }
  }
}

注意事项

  • 打印前检查页面边距设置,避免内容被裁剪
  • 表格宽度建议使用固定单位(如px或mm)而非百分比
  • 复杂表格考虑分页处理,避免跨页断行
  • 彩色背景在黑白打印时可能显示异常,建议添加打印专用样式
  • 测试不同浏览器的打印预览效果,确保兼容性

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

相关文章

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的d…

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动态…

vue实现list

vue实现list

Vue 实现列表渲染 在 Vue 中,可以使用 v-for 指令来渲染列表。v-for 指令基于一个数组或对象来渲染一个列表,可以遍历数组或对象的属性。 基本列表渲染 <template>…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…

vue最佳实现

vue最佳实现

Vue 最佳实践 组件设计 组件应遵循单一职责原则,每个组件只负责一个功能模块。命名采用 PascalCase(如 UserProfile.vue),模板中使用 kebab-case(如 <us…