vue实现打印功能

340 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

第一种方案:vuePlugs_printjs

  1. 首先打开项目地址 git地址
  2. 然后将 print.js 下载到本地放入项目文件夹,使用方法如下:
//1.首先在main.js引入
import Print from './utils/print.js'
Vue.use(Print)
//2.在页面使用
<div ref=print>打印内容<div/>
//3.其次在你用到的地方触发这个方法即可
handleprinter() {
     this.$print(this.$refs.print);
}

也可以参考官方的使用方法:

``
import Print from '@/plugs/print'
Vue.use(Print) // 注册
<template>
<section ref="print">
	打印内容
	<div class="no-print">不要打印我</div>
</section>
</template>
 // 使用
this.$print(this.$refs.print)

注意事项 需使用ref获取dom节点,若直接通过id或class获取则webpack打包部署后打印内容为空 指定不打印区域 

方法一. 添加no-print样式类

<div class="no-print">不要打印我</div>

方法二. 自定义类名

<div class="do-not-print-me-xxx">不要打印我</div>
this.$print(this.$refs.print,{'no-print':'.do-not-print-me-xxx'}) // 使用

第二种方案:vue-print-nb官网地址

  1. 安装
npm install vue-print-nb --save
  1. 配置
// 全局配置
import Print from 'vue-print-nb'
Vue.use(Print);

// 仅使用页面配置
import print from 'vue-print-nb'
directives: {
    print   
}
  1. 使用方法
<!--直接绑定id方法-->
<div id='box'>
   <p>打印内容</p>
   <p>打印内容1111</p>
</div>
<div v-print="'#box'">打印</div>

<!--直接绑定对象方法-->
<div id='box'>
   <p>打印内容</p>
   <p>打印内容1111</p>
</div>
<div v-print='printObj'>打印</div>

export default{
   data(){
      return {
         printObj:{
            id:'box',
            beforeOpenCallback (vue) {
                console.log('打开之前')
            },
            openCallback (vue) {
                console.log('执行了打印')
            },
            closeCallback (vue) {
                console.log('关闭了打印工具')
            }
            //其他配置项,
         }
      }
   }
}

当然还有原生js中window.print()方法: 使用JS实现打印功能文章中,是创建一个iframe标签添加到body中,对其设置边距等样式,添加title标签自定义页眉标题,添加目标节点到其中。最后调用iframe节点.contentWindow.print();打印完毕后从body中删除iframe节点。最后页眉标题设置成功,其他的时间、网址、页码还在。有的说是保留上次打印设置。

window.print()打印时,如何自定义页眉/页脚、页边距文章中提供了其他的设置,一句话,我看不懂。只能简单粗暴的copy。查阅得知,只有ie浏览器才可以创建ActiveXObject对象,其他浏览器用别的对象。而ie浏览器需要对安全信息手动设置。也无法满足我使用纯代码达成目标。

综上,包括vuePlugs_printjs及vue-print-nb插件在内,只能对title进行快捷设置,其他的要对浏览器注册表进行设置。