前端实现自动打印 批量打印
生活随笔
收集整理的這篇文章主要介紹了
前端实现自动打印 批量打印
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
歡迎關注微信公眾號:【 全棧攻略 】
眾所周知,前端打印的API只有window.print(),而我們要實現自動打印和批量打印,甚至連獲取本地電腦的打印機有哪些都無法獲取到。難道,前端對此真的無能為力嗎?答案是 否定 !
Lodop 由此誕生,有人說她是Web打印控件的“終結者”,因為接觸“她”后再不想別的“她”。 那我們就來揭開這神秘都面紗!
一,首先我們要改造Lodpo的源代碼文件為適合Vue/React/Angular等框架如下:
LodopFuncs.js
var CreatedOKLodop7766 = null, CLodopIsLocal;//====判斷是否需要 Web打印服務CLodop:=== //===(不支持插件的瀏覽器版本需要用它)=== export function needCLodop() {try {var ua = navigator.userAgent;if (ua.match(/Windows\sPhone/i))return true;if (ua.match(/iPhone|iPod|iPad/i))return true;if (ua.match(/Android/i))return true;if (ua.match(/Edge\D?\d+/i))return true;var verTrident = ua.match(/Trident\D?\d+/i);var verIE = ua.match(/MSIE\D?\d+/i);var verOPR = ua.match(/OPR\D?\d+/i);var verFF = ua.match(/Firefox\D?\d+/i);var x64 = ua.match(/x64/i);if ((!verTrident) && (!verIE) && (x64))return true;else if (verFF) {verFF = verFF[0].match(/\d+/);if ((verFF[0] >= 41) || (x64))return true;} else if (verOPR) {verOPR = verOPR[0].match(/\d+/);if (verOPR[0] >= 32)return true;} else if ((!verTrident) && (!verIE)) {var verChrome = ua.match(/Chrome\D?\d+/i);if (verChrome) {verChrome = verChrome[0].match(/\d+/);if (verChrome[0] >= 41)return true;}}return false;} catch (err) {return true;} }//====頁面引用CLodop云打印必須的JS文件,用雙端口(8000和18000)避免其中某個被占用:==== if (needCLodop()) {var src1 = "http://localhost:8000/CLodopfuncs.js?priority=1";var src2 = "http://localhost:18000/CLodopfuncs.js?priority=0";var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;var oscript = document.createElement("script");oscript.src = src1;head.insertBefore(oscript, head.firstChild);oscript = document.createElement("script");oscript.src = src2;head.insertBefore(oscript, head.firstChild);CLodopIsLocal = !!((src1 + src2).match(/\/\/localho|\/\/127.0.0./i)); }//====獲取LODOP對象的主過程:==== export function getLodop(oOBJECT, oEMBED) {var strHtmInstall = "<br><font color='#FF00FF'>打印控件未安裝!點擊這里<a href='install_lodop32.exe' target='_self'>執(zhí)行安裝</a>,安裝后請刷新頁面或重新進入。</font>";var strHtmUpdate = "<br><font color='#FF00FF'>打印控件需要升級!點擊這里<a href='install_lodop32.exe' target='_self'>執(zhí)行升級</a>,升級后請重新進入。</font>";var strHtm64_Install = "<br><font color='#FF00FF'>打印控件未安裝!點擊這里<a href='install_lodop64.exe' target='_self'>執(zhí)行安裝</a>,安裝后請刷新頁面或重新進入。</font>";var strHtm64_Update = "<br><font color='#FF00FF'>打印控件需要升級!點擊這里<a href='install_lodop64.exe' target='_self'>執(zhí)行升級</a>,升級后請重新進入。</font>";var strHtmFireFox = "<br><br><font color='#FF00FF'>(注意:如曾安裝過Lodop舊版附件npActiveXPLugin,請在【工具】->【附加組件】->【擴展】中先卸它)</font>";var strHtmChrome = "<br><br><font color='#FF00FF'>(如果此前正常,僅因瀏覽器升級或重安裝而出問題,需重新執(zhí)行以上安裝)</font>";var strCLodopInstall_1 = "<br><font color='#FF00FF'>Web打印服務CLodop未安裝啟動,點擊這里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>下載執(zhí)行安裝</a>";var strCLodopInstall_2 = "<br>(若此前已安裝過,可<a href='CLodop.protocol:setup' target='_self'>點這里直接再次啟動</a>)";var strCLodopInstall_3 = ",成功后請刷新本頁面。</font>";var strCLodopUpdate = "<br><font color='#FF00FF'>Web打印服務CLodop需升級!點擊這里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>執(zhí)行升級</a>,升級后請刷新頁面。</font>";var LODOP;try {var ua = navigator.userAgent;var isIE = !!(ua.match(/MSIE/i)) || !!(ua.match(/Trident/i));if (needCLodop()) {try {LODOP = getCLodop();} catch (err) {}if (!LODOP && document.readyState !== "complete") {alert("網頁還沒下載完畢,請稍等一下再操作.");return;}if (!LODOP) {//document.body.innerHTML = strCLodopInstall_1 + (CLodopIsLocal ? strCLodopInstall_2 : "") + strCLodopInstall_3 + document.body.innerHTML; return;} else {if (CLODOP.CVERSION < "3.0.8.3") {document.body.innerHTML = strCLodopUpdate + document.body.innerHTML;}if (oEMBED && oEMBED.parentNode)oEMBED.parentNode.removeChild(oEMBED);if (oOBJECT && oOBJECT.parentNode)oOBJECT.parentNode.removeChild(oOBJECT);}} else {var is64IE = isIE && !!(ua.match(/x64/i));//=====如果頁面有Lodop就直接使用,沒有則新建:==========if (oOBJECT || oEMBED) {if (isIE)LODOP = oOBJECT;elseLODOP = oEMBED;} else if (!CreatedOKLodop7766) {LODOP = document.createElement("object");LODOP.setAttribute("width", 0);LODOP.setAttribute("height", 0);LODOP.setAttribute("style", "position:absolute;left:0px;top:-100px;width:0px;height:0px;");if (isIE)LODOP.setAttribute("classid", "clsid:2105C259-1E0C-4534-8141-A753534CB4CA");elseLODOP.setAttribute("type", "application/x-print-lodop");document.documentElement.appendChild(LODOP);CreatedOKLodop7766 = LODOP;} elseLODOP = CreatedOKLodop7766;//=====Lodop插件未安裝時提示下載地址:==========if ((!LODOP) || (!LODOP.VERSION)) {if (ua.indexOf('Chrome') >= 0)document.body.innerHTML = strHtmChrome + document.body.innerHTML;if (ua.indexOf('Firefox') >= 0)document.body.innerHTML = strHtmFireFox + document.body.innerHTML;document.body.innerHTML = (is64IE ? strHtm64_Install : strHtmInstall) + document.body.innerHTML;return LODOP;}}if (LODOP.VERSION < "6.2.2.6") {if (!needCLodop())document.body.innerHTML = (is64IE ? strHtm64_Update : strHtmUpdate) + document.body.innerHTML;}//===如下空白位置適合調用統(tǒng)一功能(如注冊語句、語言選擇等):==// 添加注冊碼,打印就不會出現 “本頁由lodop試用版輸出 ” LODOP.SET_LICENSES("","XXXXX","XXXX","");//=======================================================return LODOP;} catch (err) {alert("getLodop出錯:" + err);} }二,獲取本地電腦連接都有哪些打印機
先上效果圖:
代碼如下:
// 先導入getLodop方法 import { getLodop } from "plugin/LodopFuncs.js";// 獲取打印機列表getPrintList() {let LODOP = getLodop();if (!LODOP)return// 獲取打印機個數let count = LODOP.GET_PRINTER_COUNT()let printValue = LODOP.GET_PRINTER_NAME(-1) //獲取默認打印機this.printList = Array(count).fill(null).map((...args) => {if (printValue === LODOP.GET_PRINTER_NAME(args[1])){this.printDefault = args[1]}return {value: args[1], // args[1]為數組索引label: LODOP.GET_PRINTER_NAME(args[1]) // 獲取打印機名稱}})},三,實現自動打印和批量打印
自動打印沒法上效果圖了,自己試一下就可以了 ^?_?^
不過可以上,我們倉儲系統(tǒng)的場景圖:
代碼如下:
// 多選handleSelectionChange(val) {this.multipleSelection = val;},// 批量打印async batchPrint() {if(!this.multipleSelection.length){this.$utils.commonUtils.tip('請選擇','warning')return}for await(const key of this.multipleSelection) {this.getPrintData(key.printUrl)}},// 打印handleReview(index, row) {this.getPrintData(row.printUrl)},// 獲取面單信息數組數據async getPrintData(url) {if(url) {this.printUrlList = url.split(';')this.printInfo()}},// 打印面單 async printInfo() {for await (const item of this.printUrlList) {this.printEveryItem(item)}},// 打印每項printEveryItem(item) {let self = this;let LODOP = getLodop(); //調用getLodop獲取LODOP對象return new Promise(function (resolve) {setTimeout(() => {LODOP.PRINT_INIT("");let strStyleCSS = `<style type='text/css' rel='stylesheet'>.img1{display:block;margin:10px;width:360;height:360}</style>`let html = `<head>${strStyleCSS}</head><body><div class='print-card'><img src=${item} class='img1' /></div><body>`LODOP.ADD_PRINT_HTM(0,0,380,380,html);LODOP.SET_PRINT_PAGESIZE(1,1000,1000,""); LODOP.PRINT();}, 1000);});}單個打印和批量打印實現了,自動打印就簡單了,滿足條件調用打印方法即可,如倉儲系統(tǒng)實際業(yè)務需求,當播種完成自動打印
至此,前端實現了自動打印 批量打印功能,更多功能可自行擴展,Lodop 等你探索!
轉載于:https://blog.csdn.net/weixin_45115705/article/details/102717637
總結
以上是生活随笔為你收集整理的前端实现自动打印 批量打印的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Windsocket脚本运行报错Er
- 下一篇: 紫禁繁花服务器维护,紫禁繁花跨服活动内容