项目内需要实现一个打印的功能,用了window.print()方法,但是在打印的时候总是多出一张空白页,偶然搜到了一篇文章,(https://blog.csdn.net/web_houzhanguo/article/details/121267704)看到结尾说打印的内容第一个子元素不能是h1~h5,看了自己的代码果然第一个子元素是h1,修改了之后就好了。

//window.print打印方法
const print = (id) => {
    var newstr = document.getElementById(id).innerHTML;
    var oldstr = document.body.innerHTML;
    document.body.innerHTML = newstr;
    window.print();
    document.body.innerHTML = oldstr;
    window.location.reload();
}

要想兼容IE浏览器,就要多写一个判断,IE有自己内置的打印、打印预览、页面设置等方法

const printOpeation = () => {
     //点击打印
     //判断是否是IE浏览器
     if (!!window.ActiveXObject || "ActiveXObject" in window) {
      //当前浏览器为IE
         document.getElementById("factory").printing.portrait = true;
         document.all.WebBrowser.ExecWB(6, 1)
     } else {
         print('printDiv')
     }
}
<div style={{ textAlign: 'center' }} className="Noprint">
    <object id="factory" viewastext='true' style={{ display: 'none' }}
        classID="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
        codebase="../WSJSP/spc/smsx.cab#Version=7,0,0,8">
    </object>
    <object id="WebBrowser" classID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" style={{ height: 0, width: 0 }}>
    </object>
    <input type="button" style={{ marginRight: 8 }} value="打印" onClick={() => printOpeation()} />
    <hr className="Noprint" align="center" size="1" width="100%" noshade=""></hr>
</div>
<div id='printDiv'>
	要打印的内容,此处的第一个子元素不可以是h1~h5,剩余的h标签能不能用没有测试
</div>

如果页面下面没有内容了,最好也不要设置太高的高度,例如min-height,设置的过高也会导致出现空白页。
看了window.print()的底层代码也没有找到为什么h1等标签不能用,有大佬知道的话可以传授一下,感谢

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐