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初学困境—js初学
Dec 29 Javascript
JavaScript OOP面向对象介绍
Dec 02 Javascript
Javascript全局变量var与不var的区别深入解析
Dec 09 Javascript
js特殊字符过滤的示例代码
Mar 05 Javascript
10分钟学会写Jquery插件实例教程
Sep 06 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
Nov 02 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
微信小程序通过js实现瀑布流布局详解
Aug 28 Javascript
Vue如何实现验证码输入交互
Dec 07 Vue.js
JavaScript canvas实现文字时钟
Jan 10 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
2019/03/11 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
ext jquery 简单比较
2010/04/07 Javascript
基于JQuery的cookie插件
2010/04/07 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
React如何避免重渲染
2018/04/10 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
大专生简历的自我评价
2013/11/26 职场文书
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
学校就业保障协议书
2019/06/24 职场文书
如何理解及使用Python闭包
2021/06/01 Python
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript