基于react-PC端打印分頁技術解決方案

基于react-PC端打印分頁技術解決方案

前言

最近的項目在實現(xiàn)PC端打印時遇到了個大坑:打印分頁嘁锯,區(qū)區(qū)一個分頁要考慮的地方竟然還不少,在這里分享一下我關于分頁的處理思想丁屎。
注:本文只專注于打印的分頁部分店溢,不會敘述其他關于打印的實現(xiàn)等問題墙基。

展示圖與打印預覽圖

無分頁效果:


1.png
2.png

有分頁效果圖:


3.5.png
3.6.png
3.7.png
3.8.png

效果圖講解

圖片分兩種,一是前端表格展示圖添谊,二是打印的預覽圖
表格中間的空隙和第幾頁的紅色標記處就是分頁位置财喳。
打印分頁指的是打印時一張紙打印一部分,分頁后中斷這張紙的打印斩狱,在下一張紙繼續(xù)打印耳高。

問題需求

  • 打印單據(jù)
  • 分為頭部
  • 內容表格(第一頁7行,之后每9行換頁并攜帶頁碼所踊,幾行根據(jù)內容大小來定)
  • 尾部
  • 頭和尾部正常寫泌枪,表格內容和頁面需要計算高度

總體思路

給行元素添加樣式page-break-after:always;即可從下一行開始換頁
給滿足出現(xiàn)分頁條件的元素添加此樣式
根據(jù)紙張大小和內容大小來選擇第一頁和之后每隔多少行換頁

注意:給<table>標簽的<tr>標簽添加此樣式會出現(xiàn)無效等問題,表格建議手寫秕岛,我就是一開始用<table>標簽實現(xiàn)的表格碌燕,結果換頁樣式無效误证,只好刪掉用其他普通標簽如<div>重寫。

分頁時需要考慮的三個關鍵問題

  • 分頁出現(xiàn)條件
  • 頁碼出現(xiàn)條件
  • 頁碼內容陆蟆。
    下面以解釋+代碼的兩行形式來說明雷厂,小數(shù)字代表有幾種情況,只要將每種情況都 || 或起來即可叠殷,在需要添加分頁樣式的標簽處使用三元符改鲫,條件?分頁樣式:null林束。
    我這里根據(jù)需求和實際內容大小像棘,打印頁第一頁最多七行表格內容,之后每頁最多9行表格內容壶冒。
    item.dtoPrintListList 代表表格內容數(shù)組
    valIndex 代表第幾行表格(索引)

一缕题、分頁出現(xiàn)條件

1.七行以上,十六行及以下胖腾, 索引+1 = 7

(item.dtoPrintListList.length > 7 && 
item.dtoPrintListList.length <= 16 && 
valIndex +1 = 7 )

2.十六行以上烟零,非最后一行 。 索引+1!==數(shù)組長度 &&(索引 + 1 - 7) % 9 === 0

(item.dtoPrintListList.length > 16 &&
 item.dtoPrintListList.length !== valIndex + 1  && 
(valIndex -6) % 9 === 0 )

表格內容在七行及以下時不需要分頁咸作;
七行以上根據(jù)情況:第一頁索引為6時分頁锨阿;最后一頁肯定不用再分頁,非最后一頁记罚、非第一頁之間按滿9行就分頁墅诡;

二、頁碼出現(xiàn)條件

1.最后一行(索引+1 = 數(shù)組長度)

(valIndex + 1) === item.dtoPrintListList.length) 

2.七行以上桐智,十六行及以下, 索引+1===7

(item.dtoPrintListList.length > 7 && 
item.dtoPrintListList.length <= 16 && 
valIndex +1 = 7 )

3.十六行以上末早,(索引 + 1 - 7) % 10 === 0

(item.dtoPrintListList.length > 16 &&
(valIndex -6) % 9 === 0 ) 

頁碼出現(xiàn)分三種情況,打印一頁说庭、打印兩頁然磷、打印兩頁以上。只要保證頁碼在每頁只出現(xiàn)一次且出現(xiàn)在此頁表格內容最后一行之后即可。

三、頁碼內容

頁碼內容不進入分頁和頁碼的條件判斷樣式中歧焦,僅僅用于展示字段
1.七行及以下,展示第1頁
2.七行以上痪欲,展示第X頁,X為 (索引 -6)/9 向上取整再加1

{valIndex > 6 ? `第${Math.ceil((valIndex - 6 ) / 9) + 1}頁` : '第1頁'}

因為是公司的項目攻礼,所以就不展示原代碼了业踢。這里只是分享了一下我做打印分頁處理時的思路,僅供參考礁扮。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末知举,一起剝皮案震驚了整個濱河市瞬沦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雇锡,老刑警劉巖逛钻,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锰提,居然都是意外死亡曙痘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門立肘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來边坤,“玉大人,你說我怎么就攤上這事谅年〖胙鳎” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵融蹂,是天一觀的道長旺订。 經(jīng)常有香客問我,道長超燃,這世上最難降的妖魔是什么耸峭? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮淋纲,結果婚禮上,老公的妹妹穿的比我還像新娘院究。我一直安慰自己洽瞬,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布业汰。 她就那樣靜靜地躺著伙窃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪样漆。 梳的紋絲不亂的頭發(fā)上为障,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音放祟,去河邊找鬼鳍怨。 笑死,一個胖子當著我的面吹牛跪妥,可吹牛的內容都是我干的鞋喇。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼眉撵,長吁一口氣:“原來是場噩夢啊……” “哼侦香!你這毒婦竟也來了落塑?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤罐韩,失蹤者是張志新(化名)和其女友劉穎憾赁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體散吵,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡龙考,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了错蝴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洲愤。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖顷锰,靈堂內的尸體忽然破棺而出柬赐,到底是詐尸還是另有隱情,我是刑警寧澤官紫,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布肛宋,位于F島的核電站,受9級特大地震影響束世,放射性物質發(fā)生泄漏酝陈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一毁涉、第九天 我趴在偏房一處隱蔽的房頂上張望沉帮。 院中可真熱鬧,春花似錦贫堰、人聲如沸穆壕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喇勋。三九已至,卻和暖如春偎行,著一層夾襖步出監(jiān)牢的瞬間川背,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工蛤袒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留熄云,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓妙真,卻偏偏與公主長得像皱碘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子隐孽,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351