如何使用js實現(xiàn)瀏覽器打印功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
為長泰等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及長泰網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站設計制作、成都網(wǎng)站制作、長泰網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
最近接觸到一個新需求,實現(xiàn)打印機打印小票的功能。打的一桌子小票(慚愧),不過也基本滿足了業(yè)務上的需求,現(xiàn)在分享一下如何實現(xiàn)(好記性不如爛筆頭)
先上代碼
// 布局代碼//js 部分代碼var f = document.getElementById('printf'); if (f) { document.getElementById("print_content").removeChild(f); } var printhtml = `
${this.ticket.title}
--------------------------------------
提貨點:${this.ticket.pickUpAddress}
商品名稱:${this.ticket.commodityName}
下單時間:${this.ticket.paymentTime}
提貨人:${this.ticket.receiver}
聯(lián)系電話:${this.ticket.receiverPhone}
提貨碼:${this.ticket.pickUpCode}
提貨時間:${this.ticket.submissionTime}
.
` if (!!window.ActiveXObject || "ActiveXObject" in window) { // 針對IE進行適配 var HKEY_Root, HKEY_Path, HKEY_Key; HKEY_Root = "HKEY_CURRENT_USER"; HKEY_Path = "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"; //設置網(wǎng)頁打印的頁眉頁腳為空 function PageSetup_Null() { var Wsh = new ActiveXObject("WScript.Shell"); HKEY_Key = "header"; Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, ""); HKEY_Key = "footer"; Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, ""); HKEY_Key = "margin_left" Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "0"); //鍵值設定--左邊邊界 HKEY_Key = "margin_top" Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "0"); //鍵值設定--上邊邊界 HKEY_Key = "margin_right" Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "0"); //鍵值設定--右邊邊界 HKEY_Key = "margin_bottom" Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "0"); //鍵值設定--下邊邊界 } printhtml = `
${this.ticket.title}
------------------------------------------------
提貨點:${this.ticket.pickUpAddress}
商品名稱:${this.ticket.commodityName}
下單時間:${this.ticket.paymentTime}
提貨人:${this.ticket.receiver}
聯(lián)系電話:${this.ticket.receiverPhone}
提貨碼:${this.ticket.pickUpCode}
提貨時間:${this.ticket.submissionTime}
.
` } var iframe = document.createElement('iframe'); iframe.id = 'printf'; iframe.style.width = '0'; iframe.style.height = '0'; iframe.style.border = "none"; document.getElementById("print_content").appendChild(iframe); setTimeout(() => { iframe.contentDocument.write(printhtml); iframe.contentDocument.close(); iframe.contentWindow.focus(); iframe.contentWindow.print(); }, 100)
因為要求不能把打印的數(shù)據(jù)顯示在頁面上,所以通過iframe的方式去實現(xiàn)。單純的截取字符串重新賦值body內容能進行打印卻把打印的內容展現(xiàn)在頁面中了,所以不行。
打印針對IE的瀏覽器進行了一定程度的調整,IE打印要做特定的處理,詳見上面判斷代碼。打印內容通過模板字符串加內聯(lián)樣式去實現(xiàn)。滿足了基本需求。
是否應該也通過截取頁面字符串的方式去做可能比較浪費性能些,為什么這么說?因為樣式在打印的小票上有一定程度的偏差,修了東墻破了西墻,只能采取相對的方式取舍。如果這種寫法不滿足,可以采取截取字符串寫class嘗試。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。