/** * 打印模块 * date:2019-04-23 License By http://easyweb.vip */ layui.define(["jquery"], function (exports) { var $ = layui.jquery; var hideClass = 'hide-print'; // 打印时隐藏 var printingClass = 'printing'; // 正在打印 var printer = { // 打印当前页面 print: function (param) { window.focus(); // 让当前窗口获取焦点 if (!param) { param = {}; } var hide = param.hide; // 需要隐藏的元素 var horizontal = param.horizontal; // 纸张是否是横向 var iePreview = param.iePreview; // 兼容ie打印预览 var close = param.close; // 打印完是否关闭打印窗口 var blank = param.blank; // 是否打开新窗口 // 设置参数默认值 if (iePreview == undefined) { iePreview = true; } if (blank == undefined && window != top && iePreview && printer.isIE()) { blank = true; } // 打印方向控制 $('#page-print-set').remove(); var htmlStr = '
'; htmlStr += ' '; // 打印预览兼容ie if (iePreview && printer.isIE()) { htmlStr += ' '; htmlStr += ' '; } htmlStr += '
'; // 打印 printer.hideElem(hide); // 打印iframe兼容ie var pWindow, pDocument; if (blank) { // 创建打印窗口 pWindow = window.open('', '_blank'); pDocument = pWindow.document; pWindow.focus(); // 让打印窗口获取焦点 // 写入内容到打印窗口 var htmlOld = document.getElementsByTagName('html')[0].innerHTML; htmlOld += htmlStr; pDocument.open(); pDocument.write(htmlOld); pDocument.close(); } else { pWindow = window; $('body').append(htmlStr); } (iePreview && printer.isIE()) || pWindow.print(); printer.showElem(hide); }, // 打印html字符串 printHtml: function (param) { if (!param) { param = {}; } var html = param.html; // 打印的html内容 var blank = param.blank; // 是否打开新窗口 var print = param.print; // 是否自动调用打印 var close = param.close; // 打印完是否关闭打印窗口 var horizontal = param.horizontal; // 纸张是否是横向 var iePreview = param.iePreview; // 兼容ie打印预览 // 设置参数默认值 if (print == undefined) { print = true; } if (iePreview == undefined) { iePreview = true; } if (printer.isIE() && blank == undefined) { blank = true; } if (close == undefined) { close = true; if (iePreview && blank && printer.isIE()) { close = false; } } // 创建打印窗口 var pWindow, pDocument; if (blank) { pWindow = window.open('', '_blank'); pDocument = pWindow.document; } else { var printFrame = document.getElementById('printFrame'); if (!printFrame) { $('body').append(''); printFrame = document.getElementById('printFrame'); } pWindow = printFrame.contentWindow; pDocument = printFrame.contentDocument || printFrame.contentWindow.document; } pWindow.focus(); // 让打印窗口获取焦点 // 写入内容到打印窗口 if (html) { // 加入公共css html += (''); // 打印方向控制 html += ''; // 打印预览兼容ie if (iePreview && printer.isIE()) { html += ''; html += ''; } // 写入 pDocument.open(); pDocument.write(html); pDocument.close(); } // 打印 if (print) { (iePreview && printer.isIE()) || pWindow.print(); if (blank && close && (!(iePreview && printer.isIE()))) { pWindow.close(); } } return pWindow; }, // 分页打印 printPage: function (param) { if (!param) { param = {}; } var htmls = param.htmls; // 打印的内容 var style = param.style; // 打印的样式 var horizontal = param.horizontal; // 纸张是否是横向 var padding = param.padding; // 页边距 var blank = param.blank; // 是否打开新窗口 var print = param.print; // 是否自动调用打印 var close = param.close; // 打印完是否关闭打印窗口 var isDebug = param.debug; // 调试模式 var iePreview = param.iePreview; // 兼容ie打印预览 // 设置参数默认值 if (print == undefined) { print = true; } if (iePreview == undefined) { iePreview = true; } if (printer.isIE() && blank == undefined) { blank = true; } if (close == undefined) { close = true; if (iePreview && blank && printer.isIE()) { close = false; } } if (printer.isEdge() || printer.isFirefox()) { padding = undefined; } // 创建打印窗口 var pWindow, pDocument; if (blank) { pWindow = window.open('', '_blank'); pDocument = pWindow.document; } else { var printFrame = document.getElementById('printFrame'); if (!printFrame) { $('body').append(''); printFrame = document.getElementById('printFrame'); } pWindow = printFrame.contentWindow; pDocument = printFrame.contentDocument || printFrame.contentWindow.document; } pWindow.focus(); // 让打印窗口获取焦点 // 拼接打印内容 var htmlStr = '打印窗口'; style && (htmlStr += style); // 写入自定义css // 控制分页的css htmlStr += ''; // 控制打印方向 htmlStr += ''; htmlStr += ''; // 拼接分页内容 if (htmls && (htmls instanceof Array)) { var pageClass = horizontal ? ' page-horizontal' : ''; // 横向样式 pageClass += padding == undefined ? ' padding-default' : ''; // 谷歌默认边距 pageClass += isDebug ? ' page-debug' : ''; // 调试模式 if (printer.isIE() || printer.isEdge()) { pageClass += ' page-ie'; // ie默认边距 } else if (printer.isFirefox()) { pageClass += ' page-firefox'; // firefox默认边距 } htmlStr += ''; } // 兼容ie打印预览 if (iePreview && printer.isIE()) { htmlStr += ''; htmlStr += ''; } htmlStr += ''; // 写入打印内容到打印窗口 pDocument.open(); pDocument.write(htmlStr); pDocument.close(); // 打印 if (print) { (iePreview && printer.isIE()) || pWindow.print(); if (blank && close && (!(iePreview && printer.isIE()))) { pWindow.close(); } } return pWindow; }, // 隐藏元素 hideElem: function (elems) { $('.' + hideClass).addClass(printingClass); if (!elems) { return; } if (elems instanceof Array) { for (var i = 0; i < elems.length; i++) { $(elems[i]).addClass(printingClass); } } else { $(elems).addClass(printingClass); } }, // 取消隐藏 showElem: function (elems) { $('.' + hideClass).removeClass(printingClass); if (!elems) { return; } if (elems instanceof Array) { for (var i = 0; i < elems.length; i++) { $(elems[i]).removeClass(printingClass); } } else { $(elems).removeClass(printingClass); } }, // 打印公共样式 getCommonCss: function (isPrinting) { var cssStr = ('.' + hideClass + '.' + printingClass + ' {'); cssStr += ' display: none !important;'; cssStr += ' }'; // 表格样式 cssStr += ' .print-table {'; cssStr += ' border: none;'; cssStr += ' border-collapse: collapse;'; cssStr += ' width: 100%;'; cssStr += ' }'; cssStr += ' .print-table td, .print-table th {'; cssStr += ' color: #333;'; cssStr += ' padding: 9px 15px;'; cssStr += ' word-break: break-all;'; cssStr += ' border: 1px solid #666;'; cssStr += ' }'; // if (isPrinting) { cssStr += ('.' + hideClass + ' {'); cssStr += ' display: none !important;'; cssStr += '}'; } return cssStr; }, // 拼接html makeHtml: function (param) { var title = param.title; var style = param.style; var body = param.body; if (title == undefined) { title = '打印窗口'; } var htmlStr = ''; htmlStr += ' '; htmlStr += (' ' + title + ''); style && (htmlStr += style); htmlStr += ' '; htmlStr += ' '; body && (htmlStr += body); htmlStr += ' '; htmlStr += ' '; return htmlStr; }, // 判断是否是ie isIE: function () { return (!!window.ActiveXObject || "ActiveXObject" in window); }, // 判断是否是Edge isEdge: function () { return navigator.userAgent.indexOf("Edge") != -1; }, // 判断是否是Firefox isFirefox: function () { return navigator.userAgent.indexOf("Firefox") != -1; } }; $('head').append(''); exports("printer", printer); });