vue中调用window.print进行打印

可以通过组件插槽获取打印信息

子组件中写入

<slot></slot>

因父组件引用子组件名称为print-dialog所以在里面写你想要传载的模板信息

<print-dialog>
	<div>你的模板信息 自定义样式 以及数据</div>
</print-dialog>

如果说你想要分页,你可以在你的模板里面添加样式属性

style="page-break-after: always"

具体的分页功能结合自身实际业务场景 可设置动态
而在子组件中我是这么包含的

<div style="height: 300px; overflow: auto">
	<div id="printcontent" ref="printcontent">
        <slot></slot>
    </div>
</div>

调用打印方法如下

let printH = document.getElementById("printcontent").outerHTML;
let iframe = document.createElement("iframe");
document.getElementsByTagName("body")[0].appendChild(iframe);
let doc = iframe.contentDocument || iframe.contentWindow.document;
doc.write(printH);
iframe.contentWindow.focus();
iframe.contentWindow.print();
doc.close();
document.body.removeChild(iframe);

编写打印 可以通过三种方式
一个是直接调用window.print()
一个是通过新开窗口 window.open()
最后一个是通过iframe进行传值 进行打印

去除打印预览中的页眉页脚

正常调用打印,进入到打印预览中是会将你的网址 时间 模块名称 页数也一并打印出来,
这样是不符合客户需求的 所以你可以通过如下设置去除掉

<style media="print" scoped>
    @page {
      size: auto;
      margin: 0mm;
    }
</style>

如果说不生效,可能就是你的某一个样式给顶死了 导致的
之前我也是 去除掉某一个样式之后生效的

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值