前端實現(xiàn)打印功能

打印樣式

一汇竭、添加打印樣式

  1. 為屏幕顯示和打印分別準備一個css文件瀑梗,如下所示:
    用于屏幕顯示的css: <link rel="stylesheet" href="css/mainstylesheet.css" media="screen" />
    用于打印的css:<link rel="stylesheet" href="css/printstylesheet.css" media="print" />

  2. import方式:
    <style type="text/css">
    @import url("css/printstylesheet.css") print;
    </style>

  3. 直接把屏幕顯示樣式和打印樣式寫在一個css文件中:
    @media print {}{
    h1 {
    color: black;
    }
    h2 {}{
    color: gray;
    }
    }
    @media print里面的內(nèi)容只對打印出來的內(nèi)容有效笼裳,之外的內(nèi)容就是屏幕顯示的樣式忠蝗。

其他:
創(chuàng)建一個不指定媒體類型的樣式表通常很有用(或者利用media="all")嗤瞎。當你準備好定義一些特別用于打印的規(guī)則時,可以只創(chuàng)建一個單獨的樣式表频伤,使任何在打印時看起來不好的樣式都失效。使用這種方法的一個問題是必須確保打印機樣式實際上確實覆蓋了主樣式表芝此”镄ぃ可以使用!important.

二婚苹、打印樣式注意事項:

  1. 打印樣式中不推薦使用背景岸更,因為瀏覽器默認情況下并不能打印出CSS中的背景內(nèi)容,只有當瀏覽器被設置可以打印背景的情況下才能打印出背(ie的高級選項中可選)膊升。即使背景可以打印怎炊,它也可能蓋過疊在它上面的任何文本。尤其對于用彩色背景在顯示器上強烈對比的文本廓译,但是在黑白打印機上打印時會融合這一背景background:none评肆;去掉背景圖片和顏色》乔可以利用background-color屬性設置背景顏色為白色瓜挽,像這樣:background-color: white。 使用background的快捷法也可以獲得相同的效果:background: white征绸。因此像background: white;這樣的聲明不僅設置了背景顏色為白色秸抚,而且消除了所有背景圖片速和。利用這個background的快捷屬性,你實現(xiàn)了兩個目的——設置了一個白色背景剥汤,并消除了圖片——只用很少的代碼颠放。

  2. 如果需要在打印內(nèi)容中出現(xiàn)圖片,請在HTML代碼中加入吭敢。

  3. 打印設置使用的是物理單位碰凶,所以尺寸最好不要用像素(px),可以用pt也可以用cm鹿驼;

  4. 隱藏不需要的或是次要的內(nèi)容欲低。display:none;

  5. 盡量不要讓內(nèi)容浮動畜晰,有些瀏覽器打印浮動的div的過程中砾莱,會有一個麻煩,需要特別加以注意凄鼻。 不要在打印的樣式表中浮動的塊腊瑟,像這樣:float: none;。例如块蚌,基于Gecko的瀏覽器
    (例如Netscape 6+)闰非,當用戶用它來瀏覽一個打印輸出頁面時,它會截去浮動元素中的內(nèi)容峭范。這些內(nèi)容就不會被傳送到打印機财松,下一個頁面也不會有它的蹤影――它消失了。

  6. 盡可能的在HTML代碼中做好內(nèi)容重要的先后次序纱控,這樣在打印樣式中可以節(jié)省不少的麻煩辆毡。

  7. 打印與網(wǎng)頁不一樣,打印一定要留下白邊甜害,單位用英寸(in)胚迫。

  8. 要確保頁面上的所有文本以黑色打印,就用通配選擇器(見第54頁)和!important來創(chuàng)建把每個標簽都格式化為黑色文本的單個樣式:*{ color: ##000# !important }

  9. 在打印中顯示鏈接url的信息:利用一個高級的選擇器:after和一個高級的CSS屬性稱作content唾那,把不在屏幕上顯示的文本打印在一個樣式元素的末端访锻。
    不幸的是,:after選擇器和content屬性技巧在Internet Explorer 6或者更早的版本上不起作用(到編寫本書為止闹获,在IE 7上也不行)期犬。但是它在Firefox和Safari上的確可以,因此你至少可以清楚地說明URL以便訪問者可以使用他們的瀏覽器避诽。
    為了做到這點龟虎,給打印樣式表添加一個樣式,在每個鏈接后面打印出URL沙庐。你甚至可以添加其他文本項目比如圓括號鲤妥,使它更好看些: a:after {content: " (" attr(href) ") ";}

然而佳吞,這個CSS不區(qū)分外部或者內(nèi)部的鏈接,因此它也打印出到達同一個網(wǎng)站其他頁面的沒用的相對文檔鏈接:“訪問主頁(../../index. html)棉安〉装猓”利用一點點CSS 3魔法,就可以強制這個樣式只打印絕對的URL(即以http://開頭的那些)贡耽,像這樣:
a[href^="http://"]:after {content: " (" attr(href) ") ";}

10.給打印添加分頁符:兩種被廣泛認可的屬性是page-break-before和page-break-after衷模。
page-break-before告訴網(wǎng)頁瀏覽器在一個指定樣式之前插入一個分頁符。利用page-break-before 屬性使圖片打印在一張新頁面上蒲赂,并且適合整張頁面阱冶。要使一個元素作為打印頁上的最后一個項目顯示,就給那個元素的樣式添加page-break-after: always滥嘴。

創(chuàng)建兩個類樣式木蹬,以類似于.break_after和.break_before的名字來命名,像這樣:
.break_before { page-break-before: always; }
.break_after { page-break-after: always; }

然后你可以選擇性地把這些樣式應用給應該打印在網(wǎng)頁頂部或者底部的元素若皱。

三镊叁、測試打印樣式
通常來說我們不可能用打印機來進行測試,在IE瀏覽器菜單欄“文件”中有“打印預覽”是尖,谷歌瀏覽器也可以意系,可以通過這打印預覽來做測試泥耀。

打印實現(xiàn)

方式一:直接使用window.print();

(1)首先獲得元素的html內(nèi)容(這里建議如果有樣式最好是用內(nèi)聯(lián)樣式的方式)

var newstr = document.getElementById(myDiv).innerHTML;//得到需要打印的元素HTML

(2)保存當前頁面的整個html饺汹,因為window.print()打印操作是打印當前頁的所有內(nèi)容,所以先將當前頁面保存起來痰催,之后便于恢復兜辞。

var oldstr = document.body.innerHTML;//保存當前頁面的HTML

(3)把當前頁面替換為打印內(nèi)容HTML

document.body.innerHTML = newstr;

(4)執(zhí)行打印操作

window.print();

(5)還原當前頁面

document.body.innerHTML = oldstr;

方法例:

//myDiv為需要打印的元素ID

function printpage(myDiv){
var newstr = document.getElementById(myDiv).innerHTML;
var oldstr = document.body.innerHTML;
document.body.innerHTML = newstr;
window.print();
document.body.innerHTML = oldstr;
return false;
}

方式二:window.open("",..)新開瀏覽器對話框打印。

(1)獲得需要打印的元素HTML

var printHtml = document.getElementById("myDiv").innerHTML;//這個元素的樣式需要用內(nèi)聯(lián)方式夸溶,不然在新開打印對話框中沒有樣式

(2)打開一個窗口逸吵,且內(nèi)容設置為空。

var wind = window.open("",'newwindow', 'height=300, width=700, top=100, left=100, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no');

(3)將新窗口內(nèi)容填充為需要打印的HTML內(nèi)容

wind.document.body.innerHTML = printHtml;

(4)打印

wind.print();

方法例:

//myDiv為需要打印的元素ID

function printpage(myDiv){
var printHtml = document.getElementById(myDiv).innerHTML;

var wind = window.open("",'newwindow', 'height=300, width=700, top=100, left=100, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no');

wind.document.body.innerHTML = printHtml;

wind.print();
return false;
}

帶有echart圖的打印

方法:將echart裝換成base64缝裁,追加到相應的打印document中,按照圖片格式打印出來

 // 獲取echarts圖的base64編碼
        var picBase64Info = myChart.getDataURL();
        // 添加img標簽 crossorigin='anonymous',
        $('#airPic').before("<img src='"+picBase64Info+"' >");
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扫皱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捷绑,更是在濱河造成了極大的恐慌韩脑,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粹污,死亡現(xiàn)場離奇詭異段多,居然都是意外死亡,警方通過查閱死者的電腦和手機壮吩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門进苍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來加缘,“玉大人,你說我怎么就攤上這事觉啊〖鸷辏” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵柄延,是天一觀的道長蚀浆。 經(jīng)常有香客問我,道長搜吧,這世上最難降的妖魔是什么市俊? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮滤奈,結果婚禮上摆昧,老公的妹妹穿的比我還像新娘。我一直安慰自己蜒程,他們只是感情好绅你,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昭躺,像睡著了一般忌锯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上领炫,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天偶垮,我揣著相機與錄音,去河邊找鬼帝洪。 笑死似舵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的葱峡。 我是一名探鬼主播砚哗,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砰奕!你這毒婦竟也來了蛛芥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤军援,失蹤者是張志新(化名)和其女友劉穎仅淑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盖溺,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡漓糙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烘嘱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昆禽。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝗蛙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出醉鳖,到底是詐尸還是另有隱情捡硅,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布盗棵,位于F島的核電站壮韭,受9級特大地震影響,放射性物質發(fā)生泄漏纹因。R本人自食惡果不足惜喷屋,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞭恰。 院中可真熱鬧屯曹,春花似錦、人聲如沸惊畏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颜启。三九已至偷俭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缰盏,已是汗流浹背涌萤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乳规,地道東北人形葬。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓合呐,卻偏偏與公主長得像暮的,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淌实,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353