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 相关文章推荐
返回对象在当前级别中是第几个元素的实现代码
Jan 20 Javascript
javascript中的return和闭包函数浅析
Jun 06 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
Jun 16 Javascript
AngularJS入门教程之XHR和依赖注入详解
Aug 18 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
Mar 19 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
Aug 30 Javascript
浅谈Webpack自动化构建实践指南
Dec 18 Javascript
vue通过style或者class改变样式的实例代码
Oct 30 Javascript
详解JSON和JSONP劫持以及解决方法
Mar 08 Javascript
vue中的过滤器实例代码详解
Jun 06 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
layUI的验证码功能及校验实例
Oct 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
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
js jquery数组介绍
2012/07/15 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
JS实现自定义弹窗功能
2018/08/08 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
python处理数据,存进hive表的方法
2018/07/04 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
Python数据类型之List列表实例详解
2019/05/08 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
Python with标签使用方法解析
2020/01/17 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
小学一年级学生评语
2014/04/22 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
学校计划生育责任书
2015/05/09 职场文书
社区干部培训心得体会
2016/01/06 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS