js实现浏览器打印功能的示例代码


Posted in Javascript onJuly 15, 2020

最近接触到一个新需求,实现打印机打印小票的功能。打的一桌子小票(惭愧),不过也基本满足了业务上的需求,现在分享一下如何实现(好记性不如烂笔头)

先上代码

// 布局代码
<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>提货点:${this.ticket.pickUpAddress}</p>
    <p>商品名称:${this.ticket.commodityName}</p>
    <p>下单时间:${this.ticket.paymentTime}</p>
    <p>提货人:${this.ticket.receiver}</p>
    <p>联系电话:${this.ticket.receiverPhone}</p>
    <p>提货码:${this.ticket.pickUpCode}</p>
    <p>提货时间:${this.ticket.submissionTime}</p>
    <p style="color:#FFFFFF">.</p>
   </div>`
   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\\";
    //设置网页打印的页眉页脚为空
    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 = `
    <div style="font-size:12px;font-weight: 800;height:150px;width:300px">
     <p style="margin-left:35px">${this.ticket.title}</p>
     <p>------------------------------------------------</p>
     <p>提货点:${this.ticket.pickUpAddress}</p>
     <p>商品名称:${this.ticket.commodityName}</p>
     <p>下单时间:${this.ticket.paymentTime}</p>
     <p>提货人:${this.ticket.receiver}</p>
     <p>联系电话:${this.ticket.receiverPhone}</p>
     <p>提货码:${this.ticket.pickUpCode}</p>
     <p>提货时间:${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)

因为要求不能把打印的数据显示在页面上,所以通过iframe的方式去实现。单纯的截取字符串重新赋值body内容能进行打印却把打印的内容展现在页面中了,所以不行。

打印针对IE的浏览器进行了一定程度的调整,IE打印要做特定的处理,详见上面判断代码。打印内容通过模板字符串加内联样式去实现。满足了基本需求。

是否应该也通过截取页面字符串的方式去做可能比较浪费性能些,为什么这么说?因为样式在打印的小票上有一定程度的偏差,修了东墙破了西墙,只能采取相对的方式取舍。如果这种写法不满足,可以采取截取字符串写class尝试。

以上就是js实现浏览器打印功能的示例代码的详细内容,更多关于js 浏览器打印的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JavaScript 组件之旅(一)分析和设计
Oct 28 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
Mar 16 Javascript
js对象继承之原型链继承实例
Jan 10 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
AngularJS通过$http和服务器通信详解
Sep 21 Javascript
jquery 抽奖小程序实现代码
Oct 12 Javascript
jquery+ajax实现省市区三级联动效果简单示例
Jan 04 Javascript
详解JS中遍历语法的比较
Apr 07 Javascript
vue.js的computed,filter,get,set的用法及区别详解
Mar 08 Javascript
ES6 如何改变JS内置行为的代理与反射
Feb 11 Javascript
vue中keep-alive,include的缓存问题
Nov 26 Javascript
JavaScript实现瀑布流布局的3种方式
Dec 27 Javascript
详解Vue中的MVVM原理和实现方法
Jul 15 #Javascript
详解JavaScript 作用域
Jul 14 #Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 14 #Javascript
Jquery使用each函数实现遍历及数组处理
Jul 14 #jQuery
javaScript实现一个队列的方法
Jul 14 #Javascript
0基础学习前端开发的一些建议
Jul 14 #Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
Jul 14 #jQuery
You might like
深入了解php4(1)--回到未来
2006/10/09 PHP
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
推荐20家国外的脚本下载网站
2011/04/28 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python实现多线程下载文件的代码实例
2014/06/01 Python
Python读写Excel文件方法介绍
2014/11/22 Python
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
倡导文明标语
2014/06/16 职场文书
趣味运动会广播稿
2014/09/13 职场文书
个人四风问题整改措施
2014/10/24 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript