当前位置:首页 > 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 3 的动态钟表实现方案,包含时分秒指针和数字时间显示。 模板部分 <template> <div class="clock-…

简单实现vue

简单实现vue

Vue 的基本实现 创建一个简单的 Vue 应用需要引入 Vue 库,并编写基本的模板和数据绑定逻辑。 <!DOCTYPE html> <html lang="en"> &l…

vue实现fullpage

vue实现fullpage

Vue 实现 FullPage 效果 在 Vue 中实现全屏滚动(FullPage)效果可以通过多种方式完成,以下是几种常见的方法: 使用现有库 vue-fullpage.js 安装 vue-ful…

vue实现树

vue实现树

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

vue实现 单选

vue实现 单选

实现 Vue 单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 可以轻松实现单选功能,将单选按钮的值绑定到同…

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…