js實(shí)現(xiàn)瀏覽器打印功能的示例代碼
最近接觸到一個(gè)新需求,實(shí)現(xiàn)打印機(jī)打印小票的功能。打的一桌子小票(慚愧),不過(guò)也基本滿(mǎn)足了業(yè)務(wù)上的需求,現(xiàn)在分享一下如何實(shí)現(xiàn)(好記性不如爛筆頭)
先上代碼
// 布局代碼<div id='print'> <div id='print_content'></div></div>//js 部分代碼var f = document.getElementById(’printf’); if (f) { document.getElementById('print_content').removeChild(f); } var printhtml = ` <div style='font-size:12px;margin-left: -6px;'> <p style='margin-left:40px;'>${this.ticket.title}</p> <p>--------------------------------------</p> <p>提貨點(diǎn):${this.ticket.pickUpAddress}</p> <p>商品名稱(chēng):${this.ticket.commodityName}</p> <p>下單時(shí)間:${this.ticket.paymentTime}</p> <p>提貨人:${this.ticket.receiver}</p> <p>聯(lián)系電話(huà):${this.ticket.receiverPhone}</p> <p>提貨碼:${this.ticket.pickUpCode}</p> <p>提貨時(shí)間:${this.ticket.submissionTime}</p> <p style='color:#FFFFFF'>.</p> </div>` if (!!window.ActiveXObject || 'ActiveXObject' in window) { // 針對(duì)IE進(jìn)行適配 var HKEY_Root, HKEY_Path, HKEY_Key; HKEY_Root = 'HKEY_CURRENT_USER'; HKEY_Path = 'SoftwareMicrosoftInternet ExplorerPageSetup'; //設(shè)置網(wǎng)頁(yè)打印的頁(yè)眉頁(yè)腳為空 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'); //鍵值設(shè)定--左邊邊界HKEY_Key = 'margin_top' Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, '0'); //鍵值設(shè)定--上邊邊界HKEY_Key = 'margin_right' Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, '0'); //鍵值設(shè)定--右邊邊界HKEY_Key = 'margin_bottom' Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, '0'); //鍵值設(shè)定--下邊邊界 } printhtml = ` <div style='font-size:12px;font-weight: 800;height:150px;width:300px'> <p style='margin-left:35px'>${this.ticket.title}</p> <p>------------------------------------------------</p> <p>提貨點(diǎn):${this.ticket.pickUpAddress}</p> <p>商品名稱(chēng):${this.ticket.commodityName}</p> <p>下單時(shí)間:${this.ticket.paymentTime}</p> <p>提貨人:${this.ticket.receiver}</p> <p>聯(lián)系電話(huà):${this.ticket.receiverPhone}</p> <p>提貨碼:${this.ticket.pickUpCode}</p> <p>提貨時(shí)間:${this.ticket.submissionTime}</p> <p style='color:#FFFFFF;font-weight: 100;'>.</p> </div>` } 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)
因?yàn)橐蟛荒馨汛蛴〉臄?shù)據(jù)顯示在頁(yè)面上,所以通過(guò)iframe的方式去實(shí)現(xiàn)。單純的截取字符串重新賦值body內(nèi)容能進(jìn)行打印卻把打印的內(nèi)容展現(xiàn)在頁(yè)面中了,所以不行。
打印針對(duì)IE的瀏覽器進(jìn)行了一定程度的調(diào)整,IE打印要做特定的處理,詳見(jiàn)上面判斷代碼。打印內(nèi)容通過(guò)模板字符串加內(nèi)聯(lián)樣式去實(shí)現(xiàn)。滿(mǎn)足了基本需求。
是否應(yīng)該也通過(guò)截取頁(yè)面字符串的方式去做可能比較浪費(fèi)性能些,為什么這么說(shuō)?因?yàn)闃邮皆诖蛴〉男∑鄙嫌幸欢ǔ潭鹊钠?,修了東墻破了西墻,只能采取相對(duì)的方式取舍。如果這種寫(xiě)法不滿(mǎn)足,可以采取截取字符串寫(xiě)class嘗試。
以上就是js實(shí)現(xiàn)瀏覽器打印功能的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于js 瀏覽器打印的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. .NET中l(wèi)ambda表達(dá)式合并問(wèn)題及解決方法2. JSP數(shù)據(jù)交互實(shí)現(xiàn)過(guò)程解析3. 淺談python出錯(cuò)時(shí)traceback的解讀4. 利用promise及參數(shù)解構(gòu)封裝ajax請(qǐng)求的方法5. Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼6. python matplotlib:plt.scatter() 大小和顏色參數(shù)詳解7. windows服務(wù)器使用IIS時(shí)thinkphp搜索中文無(wú)效問(wèn)題8. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向9. Nginx+php配置文件及原理解析10. 在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解
