js 调取浏览器 打印 分页

本文探讨如何在JavaScript中调用浏览器打印功能,并通过CSS解决打印时隐藏特定元素的问题。同时,文章介绍如何实现打印自动分页,指出在元素设置overflow属性时可能影响分页效果,建议移除相关元素的overflow属性以确保正确分页。

在浏览器中,可以调用Bom中的打印方法,来实现调用浏览器的打印。

window.print();

但是打印时显示了打印按钮,希望在打印时隐藏相关元素

这个可以通过css样式来解决,如下

/* 通过设置 media='print' 在打印界面启用 */
<style media="print" type="text/css">
     /* 通过设置不可见和高度为0的样式,在打印时隐藏 */
    .noprint{visibility:hidden; height:0mm;}
</style>

在style标签里,声明media属性为print以标明样式在打印时启用

打印自动分页

一般页面内容超出视图时,希望页面自动分页,可是在默认打印预览时并没有分页,如下

上图中,有块设置overflow属性的div,在直接调取window.print时,并未将子Div的 “最底下一行字2”在打印框里显示出来。

Dom构造如下:

<body style="height: 100%;width: 100%;margin: 0;">
    <button class="noprint" onclick="javascript:window.print();">直接打印</button>
    <!-- 设置了overflow属性 -->
    <div style="height:90%;overflow: scroll;border:1px solid;" id="divPrint">
        <h2>有overflow滚动的DIV</h2>
        <div style="height:1200px;background: red;">撑高的DIV</div>
        <h1>最底下一行文字2</h1>
    </div>
</body>

而如果将div的overflow属性进行剔除,再进行打印

所以如果想让浏览器的打印自动分页,需要将body内相关子元素的overflow属性都进行剔除

 

打印的相关例子:

<html lang="en" style="height: 100vh;">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style media="print" type="text/css">
        /* 设置打印页相关页面样式 */
        @page {
            size: auto;
            margin: 0mm;
            page-break-after: auto;
            margin-top: 7mm;
            margin-bottom: 5mm;

        }

        /* 通过设置不可见和高度为0的样式,在打印时隐藏 */
        .noprint {
            visibility: hidden;
            height: 0mm;
        }
    </style>
</head>

<body style="height: 100%;width: 100%;margin: 0;">
    <button class="noprint" onclick="javascript:window.print();">直接打印</button>
    <button class="noprint" onclick="onPrintWithoutOf();">去除overflow打印</button>
    <!-- 设置了overflow -->
    <div style="height:90%;overflow: scroll;border:1px solid;" id="divPrint">
        <h2>有overflow滚动的DIV</h2>
        <div style="height:1200px;background: red;">撑高的DIV</div>
        <h1>最底下一行文字2</h1>
    </div>
    <script>
        function onPrintWithoutOf() {
            document.getElementById('divPrint').style.overflow = '';
            window.print();
        }
    </script>
</body>

</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

29号同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值