实现打印功能

打印功能可以自己使用原生js(window.print())实现,其次就是使用插件。

vue-print-nb

这个插件使用起来便捷,用法如下

安装

npm install vue-print-nb --save

注册

在main.js文件中注册使用

import Print from 'vue-print-nb'; //引入
Vue.use(Print); //注册

使用

(1)直接绑定id方法

<div id='box'>
   <p>打印内容</p>
   <p>打印内容1111</p>
</div>
<div v-print='#box'>打印</div>

(2)绑定对象方法

<div id='box'>
   <p>打印内容</p>
   <p>打印内容1111</p>
</div>
<div v-print='printObj'>打印</div>

export default{
   data(){
      return {
         printObj:{
            id:'box',
            //其他配置项,
         }
      }
   }
}

缺点:

(1)无法打印本地图片,当需要打印的部分有本地图片时,打印之后图片不会显示。

(2)使用elementUI表格vxe-table表格打印时,会出现样式问题

print-js

解决了无法打印本地图片的问题

安装

npm install print-js --save

使用

import print from 'print-is'

<div id='printBill'>
    <!--需要打印的内容-->
        ...
    <!--需要打印的内容--> 
</div>

<button type="primary"  @click="billPrintClick">打印</button>
 billPrintClick(){
      const style = '@page {margin:0 10mm};'//去掉眉页眉尾
      printJS({
        printable: 'printBill',// 标签元素id
        type: 'html',
        header: '',
        targetStyles: ['*'],
        style
      });
    },

各个配置项:

printable:要打印的id。

type:可以是 html 、pdf、 json 等。

properties:是打印json时所需要的数据属性。

gridHeaderStyle和gridStyle都是打印json时可选的样式。

repeatTableHeader:在打印JSON数据时使用。设置为时false,数据表标题将仅在第一页显示。

scanStyles:设置为false时,库将不处理应用于正在打印的html的样式。使用css参数时很有用,此时自己设置的原来想要 打印的样式就会失效,在打印预览时可以看到效果

targetStyles: [’*’],这样设置继承了页面要打印元素原有的css属性。

style:传入自定义样式的字符串,使用在要打印的html页面 也就是纸上的样子。

ignoreElements:传入要打印的div中的子元素id,使其不打印。非常好用

注意点:

(1)打印预览时样式写法

@media print {
  /*样式内容*/
}

(2)css设置打印时强制分页,使用这个属性,该div的以后的内容就会在打印时分页(此属性在div display属性为flex时无效,使用了浮动float时也会无效)

.print{
   page-break-after:always
}

(3)table自动分页

 table tr{
          page-break-inside:avoid; 
          page-break-after:auto
        }

(4)打印最好使用原生table标签,使用其他ui框架会出现很大的样式问题,使用原生table表格要自己重写表格边框,不然会出现表格边框很粗的情况,预览时看不出来,打印就很明显。在使用了单元格合并也会出现表格边框有的粗有的细的情况,目前还在研究如何解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值