window.print() 導(dǎo)出pdf的一些注意事項(xiàng)及總結(jié)

  • 一、默認(rèn)打印背景
// css 打印設(shè)置
@media print {
  body {
    height: auto !important; // 打印必須設(shè)置成auto,否則只會打印第一頁
    -webkit-print-color-adjust: exact; // 默認(rèn)打印背景
    -moz-print-color-adjust: exact;
    -ms-print-color-adjust: exact;
  }
  @page {
    size: 1240px 1754px; // 紙張大小 a4比例
  }
}

通過css的樣式設(shè)置,默認(rèn)打印背景;如果涉及到分頁的話body的高度要設(shè)置成auto,否則可能只會打印第一頁。@page 可以任意設(shè)置紙張的大??;

  • 二、分頁設(shè)置
    page-break-before: 指定元素之前加入分頁符;page-break-after:指定元素之后加入分頁符;可選參數(shù)如下:
    page-break-inside:用于設(shè)置是否在指定元素中插入分頁符,參數(shù)如下:
// css 
.box {
  page-break-after: auto; // box 的后面自動分頁
  page-break-inside: avoid; // box 里面禁止分頁
}
  • 三、設(shè)置背景圖
    時常需要一些logo之類的加在頁頭或者頁腳,可以利用定位的方式去處理;
<!DOCTYPE html>
<head>
  <style>
    .body{
      height: auto !important; 
      -webkit-print-color-adjust: exact;
      -moz-print-color-adjust: exact;
      -ms-print-color-adjust: exact;
    }
    .background {
      position: fixed;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      z-index: -1;
      background-image: url('./img/print-bg.png');
      background-position: center center;
      background-repeat: no-repeat;
      display: none;
    }

    .content {
      padding: 600px 0;
      text-align: center;
      font-size: 50px;
      color: red;
    }

    @media print {
      .background {
        display: block;
      }
    }
  </style>
</head>

<body>
  <div class="background"></div>
  <div class="main">
    <div class="content">
      第1部分
    </div>
    <div class="content">
      第2部分
    </div>
    <div class="content">
      第3部分
    </div>
    <div class="content">
      第4部分
    </div>
  </div>
</body>

  • 關(guān)于表格打印的思路
    前幾天的需求,我的做法是將數(shù)據(jù)分成每30條一頁,每頁單獨(dú)渲染一個表;如果數(shù)據(jù)太大的話可能影響性能。
// jsx  react + antd
<div>
  { tableDatas.length > 0 && Array.from({length: Math.ceil(tableDatas.length / 30)}).map((item, index) => {
    return <div className='printContent'>
      <Table 
      dataSource={tableDatas.filter((i, eIndex) => eIndex >= index * 30 && eIndex < (index + 1) * 30)} 
      columns={[]}
      pagination={false}
    />
    </div> 
  })
  }
</div>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 當(dāng)我們要打印html轉(zhuǎn)pdf文件時,樣式會影響我們打印效果,所以我們要針對打印單獨(dú)設(shè)置樣式,以下是三種添加打印樣式...
    一邑媽媽閱讀 1,165評論 0 0
  • CSS print 樣式 標(biāo)簽(空格分隔): CSS 顯示器(screen)和打印機(jī)(printer)是兩種差別很...
    lumicinta閱讀 2,175評論 0 0
  • 前言 print作為瀏覽已經(jīng)比較成熟的技術(shù)可以經(jīng)常被用來打印頁面的部分內(nèi)容,我們可以在MDN上查看到相關(guān)的簡單介紹...
    dingFY閱讀 2,694評論 2 2
  • 簡單介紹一下前端打印的做法和一些問題 一、簡介 前端打印即瀏覽器打印,是通過瀏覽器的打印功能來實(shí)現(xiàn)打印效果的做法。...
    Johnson杰閱讀 6,788評論 0 12
  • 例子:LODOP.PRINT_INIT("打印任務(wù)名");LODOP.SET_PRINT_COPIES(2);bd...
    追逐繁星的阿忠閱讀 3,318評論 0 1