1. 安装vue-print-nb

Vue2版本安装方法:

npm install vue-print-nb --save

Vue3版本安装方法:

npm install vue3-print-nb --save

2. 引入Vue项目

Vue2引入方式:

// 1. 全局挂载,在main.js添加
import Print from 'vue-print-nb'
Vue.use(Print)
// or
// 2. 自定义指令,在单业务页面添加
import print from 'vue-print-nb'
directives: {
  print
}

Vue3引入方式

// 1. 全局挂载
import { createApp } from 'vue'
import App from './App.vue'
import print from 'vue3-print-nb'
const app = createApp(App)
app.use(print)
app.mount('#app')
// or 
// 2. 自定义指令
import print from 'vue3-print-nb'
directives: {
    print   
}

3. 参数说明

参数作用类型可选项默认值
id局部打印有效,标识符String-‘printId’
standard局部打印有效,打印的文本类型StringHTML5/loose/strictHTML5
extraHead局部打印有效,添加在打印区域的最顶端String--
extraCss局部打印有效,为打印区域提供Stylesheet样式表String--
popTitle局部打印有效,编辑页眉的标题String-Document Title
clickMounted全局有效,调用v-print绑定的按钮点击事件callbackFunction-this.Object
openCallback全局有效,调用打印时的callbackFunction-this.Object
closeCallback全局有效,调用关闭打印的callback(无法区分确认or取消)Function-this.Object
beforeOpenCallback全局有效,调用开始打印之前的callbackFunction-this.Object
preview全局有效,控制打印预览Booleantrue/falsefalse
previewTitle编辑预览页面的预览标题String-‘打印预览’
previewPrintBtnLabel编辑预览页面的打印按钮文本String-‘打印’
previewBeforeOpenCallback调用打开预览页面之前的callbackFunction-this.Object
previewOpenCallback调用打开预览页面之后的callbackFunction-this.Object
url非局部打印有效,打印指定的URL,确保同源策略相同String--
asyncUrl非局部打印有效,异步加载打印指定的URL,确保同源策略相同Function--
zIndex预览有效,预览窗口的z-index,默认是20002,最好比默认值更高String,Number-20002

4. template示例:

<template>
  <div class="app-container">
    <!-- 按钮 -->
    <el-card>
      <el-button type="primary" @click="history">审批历史</el-button>
      <el-button v-print="'#printTest'">打印</el-button>
    </el-card>
    <!-- 审批节点信息 -->
    <el-card v-if="nodeList && auditList" style="margin-top: 10px">
      <audit-step :node-list="nodeList" :audit-list="auditList" />
    </el-card>
    <!-- 申请表单数据 -->
    <div id="printTest">
      <!-- 打印内容 -->
      <h3 style="text-align:center" v-text="templateName" />
      <check :instance-id="instanceId" />
      <audit-history-dialog :instance-id="instanceId" :visible.sync="auditHistoryVisible" />
    </div>
  </div>
</template>

<style media="printTest" scoped>
    @page {
      margin: 0mm; /* this affects the margin in the printer settings */
      display: block;
      width: 100%;
      overflow: hidden;
    }
  #printTest table {
    table-layout: auto !important;
  }

  #printTest .el-table__header-wrapper .el-table__header {
    width: 100% !important;
    border: solid 1px #f2f2f2;
  }
  #printTest .el-table__body-wrapper .el-table__body {
    width: 100% !important;
  }
  #printTest #pagetable table {
    table-layout: fixed !important;
  }
</style>

页面效果:

在这里插入图片描述

在这里插入图片描述
PS:

Callback函数中this指向当前print object对象,that返回Vue对象;
不需要页眉页脚可以在打印弹窗页面的更多设置里面取消选择; 不设置popTitle参数页眉标题为undifined;
popTitle参数为空时,页眉标题默认为Document Title

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐