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 提升运行速度之循环篇 译文
Aug 15 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
Mar 14 Javascript
js将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
手机号码,密码正则验证
Sep 04 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
原生js编写基于面向对象的分页组件
Dec 05 Javascript
简单实现jQuery弹窗效果
Oct 30 jQuery
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
Nov 20 Javascript
微信小程序公用参数与公用方法用法示例
Jan 09 Javascript
node crawler如何添加promise支持
Feb 01 Javascript
微信小程序实现上传多个文件 超过10个
Mar 30 Javascript
js中!和!!的区别与用法
May 09 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
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
Python Tkinter基础控件用法
2014/09/03 Python
如何用itertools解决无序排列组合的问题
2017/05/18 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
Python 如何实现访问者模式
2020/07/28 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
悦木之源美国官网:Origins美国
2016/08/01 全球购物
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
怎样在程序里获得一个空指针
2015/01/24 面试题
extern是什么意思
2016/03/10 面试题
时尚休闲吧创业计划书
2014/01/25 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js