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 相关文章推荐
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
Aug 28 Javascript
javascript document.execCommand() 常用解析
Dec 14 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
Dec 04 Javascript
A标签中通过href和onclick传递的this对象实现思路
Apr 19 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
Nov 12 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
Mar 04 Javascript
javascript弹出拖动窗口
Aug 11 Javascript
JavaScript判断用户名和密码不能为空的实现代码
May 16 Javascript
使用JQuery选择HTML遍历函数的方法
Sep 17 Javascript
Vue.js计算属性computed与watch(5)
Dec 09 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
Dec 27 Javascript
JS 封装父页面子页面交互接口的实例代码
Jun 25 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
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
[01:18:35]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第一场 1月29日
2021/03/11 DOTA
Python实现的用户登录系统功能示例
2018/02/05 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
Python获取时间戳代码实例
2019/09/24 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
使用python求解二次规划的问题
2020/02/29 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
工厂厂长岗位职责
2013/11/08 职场文书
采购员的工作职责
2013/12/26 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
矫正人员思想汇报
2014/01/08 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
医学求职信
2014/05/28 职场文书