web打印如何修改頁眉頁腳內容


        JS在調用 window.print 打印時候,如何修改原來的頁眉頁腳,以及根據業務需求定制化頁腳:

在網上能查到的資料分為兩種:

  1. 通過 ActiveXObject 構造函數來修改。
  2. 通過 css 控制,即 @page 選擇器。

經過排查:

        第一種僅在IE下可用,並且需要開啟一個xxx設置,在較高的 IE 版本下測試過,直接報錯,同時考慮大環境下慢慢拋棄IE老版本,因此這種方法等於沒有。

        第二種方法很多博文記載的很詳細,但是內容幾乎一樣,基本都說的是通過以下這些選擇器可以直接修改(舉例子,並不全)。

@page :first {
  color: green;

  @top-left {
    content: "foo";
    color: blue;
  }
  @top-right {
    content: "bar";
  }
}

@page { color: red;
  @top-center {
    content: "Page " counter(page);
  }
}

       經多次排查及測試,基本都是來自 W3C 的 copy,附上鏈接 https://www.w3.org/TR/css-page-3/常見瀏覽器基本都不支持這些,僅有其中少數幾個選擇器可以使用,可以改改邊距(可通過減少頁邊距隱藏頁眉頁腳),設置紙張方向等,無法達到我的需求(修改頁眉,頁面內容)。

       因此只要查到講的是這一內容的博文基本可以不用看了,浪費時間。


       那么如何實現這一業務需求呢?這里我通過模擬css定位的方式模擬一個頁眉和頁碼,並在打印選項里關閉頁眉和頁腳

思路:

       將每一頁增加一個父級盒子,並給上 定位,如:

/* 父級盒子 */
.warpper {
    position: relative
}

/*頁眉, 通過負數向上移 */
.head {
    position: absolute;
    top: -10px;
}

/*頁腳*/
.foot {
    position: absolute;
    bottom: 10px;/* 這個值自己調整 */
}

       最終實現的效果

 


關於打印的一些其它注意事項,主要跟表格有關,這里簡單說下:

  1. 表格的拆分問題,當表格太長一頁放不下,打印時系統會將其切割,因此這里有兩種方式: 通過 thead 標簽讓表格在換頁后自動帶一個表頭過去,即同一個表格換了 n 頁就有 n 個表頭。 如果是靜態的寫死的表格,手動將表格一分為多;若是根據 Array 等數據結構循環生成的表格,則先將數據結構拆分成多分,再依次生成。 
  2. 表格列寬默認是會在你設置寬度基礎上自行適應調整的,有一個表格屬性 table-layout: fixed 可能會用的上。 
  3. 換頁問題,使用 page-break-after: always;注:在某些情況下無法分頁,使用時盡量用統一的 class 和標簽,並將兩張要分頁的內容分別用一個盒子包裹,規范好! 
  4. 對於打印時需要生成二維碼,最好先將二維碼轉化成圖片,一般為 base64 格式,然后在打印前確定圖片 onload 后再打印,注意 jquery.qrcode 是有延遲的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM