目錄
前言
?一、print()方法
?二、打印樣式
2.1使用打印樣式表
2.2使用媒介查詢
2.3內(nèi)聯(lián)樣式使用media屬性
2.4在css中使用@import引入打印樣式表
三、打印指定區(qū)域部分內(nèi)容
3.1方法一
3.2方法二
3.3方法三
四、強制插入分頁
4.1page-break-before(指定元素前添加分頁符)
4.2page-break-after(指定元素后添加分頁符)
?4.3page-break-inside(用于設(shè)置是否在指定元素中插入分頁符)
4.4注意
?五、設(shè)置打印布局(橫向、縱向、邊距)
六、去除瀏覽器默認頁眉頁腳
七、打印方法封裝
?注意:如果有高級的玩法主要有以下
前言
print作為瀏覽已經(jīng)比較成熟的技術(shù)可以經(jīng)常被用來打印頁面的部分內(nèi)容,我們可以在MDN上查看到相關(guān)的簡單介紹。
?一、print()方法
print() 方法用于打印當前窗口的內(nèi)容。調(diào)用 print() 方法會產(chǎn)生一個打印預(yù)覽彈框,讓用戶可以設(shè)置打印請求。最簡單的打印就是直接調(diào)用window.print(),當然用 document.execCommand('print') 也可以達到同樣的效果。默認打印頁面中body里的所有內(nèi)容。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>printDemo</title>
</head>
<body>
<input type="button" value="打印此頁面" onclick="printpage()" />
<div>內(nèi)容</div>
<script>
function printpage() {
window.print()
}
</script>
</body>
</html>
?二、打印樣式
直接調(diào)用print()方法去打印網(wǎng)頁內(nèi)容,我們會發(fā)現(xiàn),事先調(diào)整好的布局和樣式都沒法實現(xiàn),那么有哪些方法可以幫助我們改善打印的用戶體驗?zāi)兀?/p>
2.1使用打印樣式表
配置一份打印樣式表print.css,引入到HTML文檔,在 <link> 上加上一個 media="print" 來標識這是打印機才會應(yīng)用的樣式表,這樣打印的時候,就會默認將該樣式表應(yīng)用到文檔中
<link href="/path/print.css" media="print" rel="stylesheet" />
2.2使用媒介查詢
當我們要修改的樣式?jīng)]有很多的時候,其實完全不需要重新寫個樣式表,只要寫上一個媒介查詢也可以達到同樣的效果,如:
@media print {
h1 {
font-size: 20px;
color: red;
}
}
2.3內(nèi)聯(lián)樣式使用media屬性
<style type="text/css" media="print">
// 打印樣式
</style>
2.4在css中使用@import引入打印樣式表
@import url("/path/print.css") print;
三、打印指定區(qū)域部分內(nèi)容
3.1方法一
在需要打印的正文內(nèi)容所對應(yīng)的html開始處加上 <!--startprint--> 標識,結(jié)尾處加上?<!--endprint--> 標識,截取打印標識之間的內(nèi)容替換body的內(nèi)容,調(diào)用打印print()方法。
<body>
<input type="button" value="打印此頁面" onclick="printpage()" />
<!--startprint-->
<div id="printContent">打印內(nèi)容</div>
<!--endprint-->
<script>
function printpage() {
let oldStr = window.document.body.innerHTML; // 獲取body的內(nèi)容
let start = "<!--startprint-->"; // 開始打印標識, 17個字符
let end = "<!--endprint-->"; // 結(jié)束打印標識
let newStr = oldStr.substr(oldStr.indexOf(start) + 17); // 截取開始打印標識之后的內(nèi)容
newStr = newStr.substring(0, newStr.indexOf(end)); // 截取開始打印標識和結(jié)束打印標識之間的內(nèi)容
window.document.body.innerHTML = newStr; // 把需要打印的指定內(nèi)容賦給body
window.print(); // 調(diào)用瀏覽器的打印功能打印指定區(qū)域
window.document.body.innerHTML = oldStr; // body替換為原來的內(nèi)容
}
</script>
</body>
3.2方法二
將需要打印的內(nèi)容用一個大的div包裹,打印時將body的內(nèi)容替換為該div的內(nèi)容,調(diào)用打印print()方法。
<body>
<input type="button" value="打印此頁面" onclick="printpage()" />
<div id="printContent">打印內(nèi)容</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方法三
有兩個事件可以監(jiān)聽到到打印事件,一個是onbeforeprint(),一個是onafterprint(),分別表示打印事件觸發(fā)前后。?
檢測打印請求,提供一個打印前的處理事件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(用于設(shè)置是否在指定元素中插入分頁符)
/* 避免在 <pre> 與 <blockquote> 元素中插入分頁符 */
@media print {
pre, blockquote {page-break-inside: avoid;}
}
?
4.4注意
- 不能對絕對定位的元素使用以上三種分頁屬性。
- 請盡可能少地使用分頁屬性,并且避免在表格、浮動元素、帶有邊框的塊元素中使用分頁屬性。
?五、設(shè)置打印布局(橫向、縱向、邊距)
@media print {
@page {
/* 縱向 */
size: portrait;
/* 橫向 */
size: landscape;
/* 邊距 上右下左 */
margin: 1cm 2cm 1cm 2cm;
}
}
六、去除瀏覽器默認頁眉頁腳
頁眉打印默認有頁眉頁腳信息,展現(xiàn)到頁面外邊距范圍,我們可以通過去除頁面模型page的外邊距,使得內(nèi)容不會延伸到頁面的邊緣,再通過設(shè)置 body 元素的 margin 來保證 A4 紙打印出來的頁面帶有外邊距
@media print {
@page {
margin: 0;
}
body {
margin: 1cm;
}
}
七、打印方法封裝
window.print();
?注意:如果有高級的玩法主要有以下
不想打印頁面的某某某dom,按鈕啦啥的,但是又必須在頁面上展示,只需在
方法1:@media print 媒體查詢里面讓對應(yīng)元素隱藏 display:none;
方法2:在js里面讓他內(nèi)容先變空等等
原理就是在頁面不展示這個dom文章來源地址http://www.zghlxwxcb.cn/news/detail-785374.html
原理就是在頁面不展示這個dom文章來源:http://www.zghlxwxcb.cn/news/detail-785374.html
原理就是在頁面不展示這個dom
到了這里,關(guān)于window.print() 前端實現(xiàn)網(wǎng)頁打印詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!