window.print 打印的时候显示页码不显示标题和url链接

最近做了个需求需要做的是在使用浏览器打印的时候要加上页码 比如当前第几页、打印的总页数。但是看了网上很多的方法都是采用
@media print {
/* 添加页脚 */
        @page
                 {
                      /* 在底部居中显示页码 */
                @bottom-center {

                                 content: "Page " counter(page) " of " counter(pages);

                        }

                 }

}
这个方法,但是经过大量的方法实践之后 浏览器根本不支持此方法

要实现下方这种显示页码的效果

自然的显示又不影响页面展示的效果 费了我九牛二虎之力
最开始的想法是识别高度然后自然根据JS和css配合 显示页面的页数以及总页数 赋值给新建的标签插入到dom中 但是后面发现 计算结果根据内容的增多 而不准确 而且显示的页码标签 会遮挡部分内容 感觉不够美观
经过几天的苦思冥想 找出了 一个解决方案
1:首先在浏览器中打印中调用window.print()方法的话要打开更多设置 勾选出页眉页脚等内容

2: @media print {

            @page {

                margin-top: 6mm;

         }

    }

设置css的主要原因是我只需要页码不需要页眉信息所以设置外边距之后 可以隐藏页眉的内容 

3.页脚的内容要保存 但是页脚内容左侧会展示当前浏览器的地址链接这时候就要配合JS了,以下代码核心就是不要展示地址 于是新开了个页面将浏览器地址栏赋值为空或者‘·’这样打印的时候就不会出现地址栏地址了,但是于此同事页面的样式没有带过去 所以将原页面的style里的内容和引用的link内容页一并带过去 这样就能保证和原有样式是一样的了

<div style="text-align: center">

        <button type="button"  id="print-id">打印</button>

    </div>

<script>

function printdiv(printpage)

    {

        var newstr = printpage.innerHTML;

            var oldstr = document.body.innerHTML;

            document.body.innerHTML = newstr;

            var printWindow = window.open('·', '_blank');

            var newstr = printpage.innerHTML;

            printWindow.document.write('<html><head><title></title>');

            var styles = document.head.getElementsByTagName('style');

            var links = document.head.getElementsByTagName('link');

            // Copy over style elements

            for (var i = 0; i < styles.length; i++) {

                printWindow.document.write(styles[i].outerHTML);

            }

            // Copy over link elements (stylesheets)

            for (var i = 0; i < links.length; i++) {

                printWindow.document.write(links[i].outerHTML);

            }

            printWindow.document.write('</head><body>');

            printWindow.document.write(newstr);

            printWindow.document.write('</body></html>');

            printWindow.document.close();

            printWindow.print();

    }

!function () {

        $("#print-id").on('click', function () {

            var div_print = document.getElementById("print-all");

            printdiv(div_print);

        });

    }();

<script>
结尾 因为当前项目是用的原生js写的所以都在统一一个页面在vue、react当中同理一样是可以使用的 只是写的方法略作修改 思路就上面的思路了 做个记录 当然也有很多优秀的插件可以进行处理但是在这里就没有使用了 因为插件不一定有这个方法好  如果有需要的同学 可以点赞收藏+关注

  • 25
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值