vue2 vue-print-nb打印

1,821 阅读2分钟

一、安装vue-print-nb

npm install vue-print-nb --save

二、使用

1、全局注册(main.js文件)

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

2、局部注册(自定义指令)

import print from 'vue-print-nb'
directives: {
    print
}

3、绑定到点击得按钮上

<div id="printTest">
    要打印得区域
</div>
 <el-button type="primary" v-print="printObj" >打印</el-button>

4、data中可对打印进行配置

data(){
    return {
      printObj: {
        id: 'print',
        popTitle: '打印', // 打印配置页上方标题
        extraHead: '', //最上方的头部文字,附加在head标签上的额外标签,使用逗号分隔
        preview: '', // 是否启动预览模式,默认是false(开启预览模式,可以先预览后打印)
        previewTitle: '', // 打印预览的标题(开启预览模式后出现),
        previewPrintBtnLabel: '', // 打印预览的标题的下方按钮文本,点击可进入打印(开启预览模式后出现)
        zIndex: '', // 预览的窗口的z-index,默认是 20002(此值要高一些,这涉及到预览模式是否显示在最上面)   
        previewBeforeOpenCallback: () => {}, //预览窗口打开之前的callback(开启预览模式调用)
        previewOpenCallback: () => {}, // 预览窗口打开之后的callback(开启预览模式调用)
        beforeOpenCallback: () => {}, // 开启打印前的回调事件
        openCallback: () => {}, // 调用打印之后的回调事件
        closeCallback: () => {}, //关闭打印的回调事件(无法确定点击的是确认还是取消)
        url: '',
        standard: '',
        extraCss: '',

      },
    
    }
}

三、问题

1、Q:el-table表格显示不全 A:css样式调整

<style media="print" lang="scss" scoped>
@page {
  size: auto;
  margin: 3mm;
}
@media print {
  /deep/ table {
    table-layout: auto !important;
  }
  /deep/ .el-table__header-wrapper .el-table__header {
    width: 100% !important;
  }
  /deep/ .el-table__body-wrapper .el-table__body {
    width: 100% !important;
  }
  /deep/ #print table {
    table-layout: fixed !important;
  }
 
  
}
</style>

2、以下样式修改原因:el-table中存在固定得列 导致打印样式错乱 注:同样需放在@media print下

 /deep/.el-table__fixed {
    display: none;
  }
  /deep/.el-table .el-table__cell.is-hidden > * {
    // visibility: hidden;
    visibility: visible;
    font-size: 12px;
  }

3、这里偷了个懒 打印时表格得边框不对齐 页面看着不好看索性就隐藏了(如果要保留边框还要另外找方法解决,欢迎小伙伴提供方法)

/deep/.el-table--border {
    border: none;
    .el-table__cell {
      border-right: 0;
    }
  }

4、不需要打印出得DOM可通过css隐藏掉

html:
<div class="no-print"> 不需要打印得DOM</div>
css:
@media print {
   .no-print {
        display:none;
    }
}

四、展示效果

image.png

image.png