Vxe vue vxe-table 分享实现打印表格以及同时打印两张表

Vxe vue vxe-table 分享实现打印表格以及同时打印两张表

vxe-table 默认情况下支持单表打印。

在有些情况下,页面上同时有几张表,这时需要一次性打印出来。可以利用 Vxe 自带的分页打印功能,实现多张表同时打印。

效果

点击打印后自动调起预览,可以直接连接打印机或者导出PDF

代码

实现步骤,

第一步:渲染表格

第二步:通过表格实例的 getPrintHtml() 方法获取打印的 html,不管有几张表都行, 有几张表就调用几次。

第三步:将结构转成分页打印,调用 VxeUI.print 打印

html 复制代码
<template>
  <div>
    <vxe-button @click="printEvent">同时打印2张表</vxe-button>

    <vxe-table
      border
      height="300"
      ref="table1Ref"
      :data="tableData1">
      <vxe-column field="id" title="ID" width="60"></vxe-column>
      <vxe-column field="name" title="Name"></vxe-column>
      <vxe-column field="sex" title="Sex"></vxe-column>
      <vxe-column field="address" title="Address"></vxe-column>
    </vxe-table>

    <vxe-table
      border
      height="300"
      ref="table2Ref"
      :data="tableData2">
      <vxe-column field="id" title="ID" width="60"></vxe-column>
      <vxe-column field="role" title="Role"></vxe-column>
      <vxe-column field="age" title="Age"></vxe-column>
    </vxe-table>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { VxeUI } from 'vxe-pc-ui'
const table1Ref = ref()
const table2Ref = ref()
const tableData1 = ref([
  { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
  { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
  { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
  { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }
])
const tableData2 = ref([
  { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
  { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
  { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
  { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' },
  { id: 10005, name: 'Test5', role: 'PM', sex: 'Man', age: 29, address: 'Shanghai' },
  { id: 10006, name: 'Test6', role: 'Designer', sex: 'Women', age: 38, address: 'Shanghai' }
])
const printEvent = () => {
  const $table1 = table1Ref.value
  const $table2 = table2Ref.value
  if ($table1 && $table2) {
    Promise.all([
      $table1.getPrintHtml().then(({ html }) => {
        return {
          headerHtml: '<div style="text-align: center;font-size: 28px;">第一张表</div>',
          bodyHtml: html
        }
      }),
      $table2.getPrintHtml().then(({ html }) => {
        return {
          headerHtml: '<div style="text-align: center;font-size: 28px;">第二张表</div>',
          bodyHtml: html
        }
      })
    ]).then(pageBreaks => {
      VxeUI.print({
        title: '打印多张表',
        showPageNumber: true,
        pageBreaks
      })
    })
  }
}

</script>
相关推荐
支撑前端荣耀6 小时前
从零实现前端监控告警系统:SMTP + Node.js + 个人邮箱 完整免费方案
前端·javascript·面试
重铸码农荣光6 小时前
🎯 从零搭建一个 React Todo 应用:父子通信、状态管理与本地持久化全解析!
前端·react.js·架构
用户4099322502126 小时前
Vue3 v-if与v-show:销毁还是隐藏,如何抉择?
前端·vue.js·后端
Mr_chiu6 小时前
🚀 效率暴增!Vue.js开发必知的15个神级提效工具
前端
JimmyWhat6 小时前
Vue单页应用路由404问题:服务器配置与Hash模式解决方案
vue.js
shanLion6 小时前
Vite项目中process报红问题的深层原因与解决方案
前端·javascript
烟袅6 小时前
从零构建一个待办事项应用:一次关于组件化与状态管理的深度思考
前端·javascript·react.js
前端小万6 小时前
草稿
前端
闲云一鹤6 小时前
将地图上的 poi 点位导出为 excel,并转换为 shp 文件
前端·cesium
JIngJaneIL6 小时前
基于springboot + vue健康管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端