js调用浏览器的打印功能(局部打印 不需要调用插件,快捷打印)

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript">
        var hkey_root, hkey_path, hkey_key;
        hkey_root = "HKEY_CURRENT_USER";
        hkey_path = "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"; //网页打印时设置清空页眉页脚     
        function setup_null() {
            try {
                var RegWsh = new ActiveXObject("WScript.Shell")
                hkey_key = "header"
                RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "")
                hkey_key = "footer"
                RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "")
            } catch (e) {}
        }

        function setup_default() { //网页打印时设置页眉页脚默认值        
            try {
                var RegWsh = new ActiveXObject("WScript.Shell")
                hkey_key = "header"
                RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "&w&b页码,&p/&P")
                hkey_key = "footer"
                RegWsh.RegWrite(hkey_root + hkey_path + hkey_key, "&u&b&d")
            } catch (e) {}
        }

        function doPrint(printDiv) {
            try {
                setup_null();
                newwin = window.open("", "newwin", "height=" + window.screen.height + ",width=" + window.screen.width +
                    ",toolbar=no,scrollbars=auto,menubar=no");
                newwin.document.body.innerHTML = document.getElementById(printDiv).innerHTML;
                newwin.window.print();
                newwin.window.close();
                setup_default();
            } catch (e) {}
        }

        function printPage() { //获取当前页的html代码 
            setup_null();
            bdhtml = window.document.body.innerHTML;
            sprnstr = "<!--start-->";
            eprnstr = "<!--end-->";
            printhtml = bdhtml.substr(bdhtml.indexOf(sprnstr) + 17);
            printhtml = printhtml.substring(0, printhtml.indexOf(eprnstr));
            f = document.getElementById('printf');
            f.contentDocument.write(printhtml); //写入到新的iframe窗口
            f.contentDocument.close();
            f.contentWindow.print(); //在新的iframe窗口调用浏览器打印机
        }
    </script>
</head>

<body>
    <!--start-->
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3>
    <!--end-->
    <input type="button" value="打印" onClick="printPage()" />
    <iframe id="printf" src="" width="0" height="0" frameborder="0"></iframe>
    </div>
</body>

</html>
  1. 由于window.print();在调用打印机的时候会修改页面的dom,导致内容改变,为了让用户在进行预览打印的同时不修改dom内容,最好的解决办法就是用iframe新建一个窗口,将要打印的内容写入到iframe中(f.contentDocument.write(printhtml))在新打开的iframe中调用浏览器的打印机就解决了此问题(f.contentWindow.print());
  2. 多数打印都是表格,默认情况下单元格之间会存在着间距,需要加上border-collapse: collapse属性
  3. 对于打印样式的设置,推荐直接写到标签上,对于其他博客上的加入media="print"引入css,我没有尝试成功,直接写到标签上。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值