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 嵌套函数指向this对象错误的解决方法
Mar 15 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
学习JavaScript鼠标响应事件
Dec 25 Javascript
Javascript实现跑马灯效果的简单实例
May 31 Javascript
JS把内容动态插入到DIV的实现方法
Jul 19 Javascript
基于jQuery ligerUI实现分页样式
Sep 18 Javascript
使用 Node.js 对文本内容分词和关键词抽取
May 27 Javascript
详解AngularJS2 Http服务
Jun 26 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
Jan 25 jQuery
vue自定义底部导航栏Tabbar的实现代码
Sep 03 Javascript
js实现黑白div块画空心的图形
Dec 13 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
Mar 17 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
MySQL修改密码方法总结
2008/03/25 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
WAF的正确bypass
2017/01/05 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
Python实现翻转数组功能示例
2018/01/12 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
出纳岗位职责模板
2013/11/27 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
人力资源部工作计划
2019/05/14 职场文书
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
MySQL创建管理HASH分区
2022/04/13 MySQL
深入理解 Golang 的字符串
2022/05/04 Golang