前端通过 window.print 方法实现打印

效果演示

思路

通过浏览器提供的 API window.print 方法调起打印,但是往往我们要打印的内容和在网页上显示的内容,
还是有一定的样式差别的, 所以还需要的对 打印的样式进行单独的控制。刚好 CSS 的媒体查询提供了,
@media print { ... } , 进行打印时的样式控制。

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>打印DEMO</title>
    <style>
        #app > header {
            text-align: center;
            border: 1px solid cyan;
            height: 48px;
        }
        #app > div {
            display: flex;
        }

        #app > div > aside {
            width: 240px;
            border: 1px solid pink;
        }

        /* --------- 相关css----------  */
        h3 {
            color: blue;
        }
        .prominent {
            color: blue;
        }
        #print {
            display: none;
        }
        /*仅打印时的样式*/
        @media print {
            #app {
                display: none;
            }
            #print {
                display: block;
            }
            #print h3 {
                color: red;
                text-align: center;
            }
            #print p {
                text-indent: 32px;
            }
            #print .prominent {
                color: red;
                margin: 0 10px;
            }
        }
    </style>
</head>
<body>
    <div id="app">
        <header>
            头部头部
        </header>
        <div>
            <aside>
                <div>菜单1</div>
                <div>菜单2</div>
                <div>菜单3</div>
            </aside>
            <section>
                <div id="print-container">
                    <h3>使用媒体查询</h3>
                    <p>
                        媒体查询(Media queries)<span class="prominent">非常实用</span>,尤其是当你想要根据设备的大致类型(如打印设备与带屏幕的设备)或者特定的特征和设备参数(例如屏幕分辨率和浏览器视窗宽度)来修改网站或应用程序时。
                    </p>
                </div>
                <div>
                    <button onclick="myPrint()">打印文章</button>
                </div>
            </section>
        </div>
    </div>
    <div id="print"></div>
    <script>
      function myPrint() {
        console.log('my print')
        const printContent = document.querySelector('#print-container').innerHTML
        const oPrint = document.querySelector('#print')
        oPrint.innerHTML = printContent
        window.print() // 调用浏览器的打印方法
      }
    </script>
</body>
</html>

参考

window.print

媒体查询(Media queries)

posted @ 2022-07-31 23:03  暗恋桃埖源  阅读(1130)  评论(0编辑  收藏  举报