狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[轉帖]window.print() 前端實現網頁打印詳解

liguoquan
2023年7月4日 16:43 本文熱度 692
:window.print() 前端實現網頁打印詳解


window.print() 前端實現網頁打印詳解


目錄


前言


 一、print()方法


 二、打印樣式


2.1使用打印樣式表


2.2使用媒介查詢


2.3內聯樣式使用media屬性


2.4在css中使用@import引入打印樣式表


三、打印指定區域部分內容


3.1方法一


3.2方法二


3.3方法三


四、強制插入分頁


4.1page-break-before(指定元素前添加分頁符)


4.2page-break-after(指定元素后添加分頁符)


 4.3page-break-inside(用于設置是否在指定元素中插入分頁符)


4.4注意


 五、設置打印布局(橫向、縱向、邊距)


六、去除瀏覽器默認頁眉頁腳


七、打印方法封裝


 注意:如果有高級的玩法主要有以下


前言

print作為瀏覽已經比較成熟的技術可以經常被用來打印頁面的部分內容,我們可以在MDN上查看到相關的簡單介紹。


 一、print()方法

print() 方法用于打印當前窗口的內容。調用 print() 方法會產生一個打印預覽彈框,讓用戶可以設置打印請求。最簡單的打印就是直接調用window.print(),當然用 document.execCommand('print') 也可以達到同樣的效果。默認打印頁面中body里的所有內容。


<!DOCTYPE html>

<html>

<head>

  <meta charset="UTF-8">

  <title>printDemo</title>

</head>

<body>

  <input type="button" value="打印此頁面" onclick="printpage()" />

  <div>內容</div>

  <script>

    function printpage() {

      window.print()

    }

  </script>

</body>

</html>



 二、打印樣式

直接調用print()方法去打印網頁內容,我們會發現,事先調整好的布局和樣式都沒法實現,那么有哪些方法可以幫助我們改善打印的用戶體驗呢?


2.1使用打印樣式表

配置一份打印樣式表print.css,引入到HTML文檔,在 <link> 上加上一個 media="print" 來標識這是打印機才會應用的樣式表,這樣打印的時候,就會默認將該樣式表應用到文檔中


<link href="/path/print.css" media="print" rel="stylesheet" />

2.2使用媒介查詢

當我們要修改的樣式沒有很多的時候,其實完全不需要重新寫個樣式表,只要寫上一個媒介查詢也可以達到同樣的效果,如:


@media print {

  h1 {

    font-size: 20px;

    color: red;

  }

}

2.3內聯樣式使用media屬性

<style type="text/css" media="print">

   // 打印樣式

</style>

2.4在css中使用@import引入打印樣式表

@import url("/path/print.css") print;

三、打印指定區域部分內容

3.1方法一

在需要打印的正文內容所對應的html開始處加上 <!--startprint--> 標識,結尾處加上 <!--endprint--> 標識,截取打印標識之間的內容替換body的內容,調用打印print()方法。


<body>

  <input type="button" value="打印此頁面" onclick="printpage()" />

 

  <!--startprint-->

  <div id="printContent">打印內容</div>

  <!--endprint-->

 

  <script>

    function printpage() {

      let oldStr = window.document.body.innerHTML; // 獲取body的內容

      let start = "<!--startprint-->"; // 開始打印標識, 17個字符

      let end = "<!--endprint-->"; // 結束打印標識

      let newStr = oldStr.substr(oldStr.indexOf(start) + 17); // 截取開始打印標識之后的內容

      newStr = newStr.substring(0, newStr.indexOf(end)); // 截取開始打印標識和結束打印標識之間的內容

      window.document.body.innerHTML = newStr; // 把需要打印的指定內容賦給body

      window.print(); // 調用瀏覽器的打印功能打印指定區域

      window.document.body.innerHTML = oldStr; // body替換為原來的內容

    }

  </script>

</body>

3.2方法二

將需要打印的內容用一個大的div包裹,打印時將body的內容替換為該div的內容,調用打印print()方法。


<body>

  

  <input type="button" value="打印此頁面" onclick="printpage()" />

  <div id="printContent">打印內容</div>

 

  <script>

    function printpage() {

      let newstr = document.getElementById("printContent").innerHTML;

      let oldstr = document.body.innerHTML;

      document.body.innerHTML = newstr;

      window.print();

      document.body.innerHTML = oldstr;

      return false;

    }

  </script>

</body>

3.3方法三

有兩個事件可以監聽到到打印事件,一個是onbeforeprint(),一個是onafterprint(),分別表示打印事件觸發前后。 


檢測打印請求,提供一個打印前的處理事件onbeforeprint() 將一些不需要打印的元素隱藏,和打印后的處理事件 onafterprint()放開隱藏的元素。


    window.onbeforeprint = function(event) {

      //將一些不需要打印的元素隱藏

    };

    window.onafterprint = function(event) {

      //放開隱藏的元素

    };

四、強制插入分頁

4.1page-break-before(指定元素前添加分頁符)



/* 在h1元素前始終插入分頁符 */

@media print {

    h1 {page-break-before: always;}

}

4.2page-break-after(指定元素后添加分頁符)



/* 在 .footer 元素后始終插入分頁符 */

@media print {

    .footer {page-break-after: always;}

}

 4.3page-break-inside(用于設置是否在指定元素中插入分頁符)



/* 避免在 <pre> 與 <blockquote> 元素中插入分頁符 */

@media print {

    pre, blockquote {page-break-inside: avoid;}

}

 


4.4注意

不能對絕對定位的元素使用以上三種分頁屬性。

請盡可能少地使用分頁屬性,并且避免在表格、浮動元素、帶有邊框的塊元素中使用分頁屬性。

 五、設置打印布局(橫向、縱向、邊距)

 @media print {

    @page {

      /* 縱向 */

      size: portrait; 

 

      /* 橫向 */

      size: landscape;

 

      /* 邊距 上右下左 */

      margin: 1cm 2cm 1cm 2cm;

    }

  }

六、去除瀏覽器默認頁眉頁腳

頁眉打印默認有頁眉頁腳信息,展現到頁面外邊距范圍,我們可以通過去除頁面模型page的外邊距,使得內容不會延伸到頁面的邊緣,再通過設置 body 元素的 margin 來保證 A4 紙打印出來的頁面帶有外邊距


@media print {

  @page {

    margin: 0;

  }

  body {

    margin: 1cm;

  }

}

七、打印方法封裝

 window.print();

 注意:如果有高級的玩法主要有以下

不想打印頁面的某某某dom,按鈕啦啥的,但是又必須在頁面上展示,只需在


方法1:@media print 媒體查詢里面讓對應元素隱藏 display:none;


方法2:在js里面讓他內容先變空等等


原理就是在頁面不展示這個dom

https://blog.csdn.net/qq_59747594/article/details/129387389


該文章在 2023/7/4 16:43:04 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved