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 相关文章推荐
JS 自动安装exe程序
Nov 30 Javascript
Jquery实战_读书笔记1—选择jQuery
Jan 22 Javascript
jQuery+ajax实现顶一下,踩一下效果
Jul 17 Javascript
基于JS实现Android,iOS一个手势动画效果
Apr 27 Javascript
JS去除字符串中空格的方法
Feb 14 Javascript
JavaScript mixin实现多继承的方法详解
Mar 30 Javascript
JS实现浏览上传文件的代码
Aug 23 Javascript
js生成word中图片处理方法
Jan 06 Javascript
Vue项目中如何引入icon图标
Mar 28 Javascript
写gulp遇到的ES6问题详解
Dec 03 Javascript
javascript实现点击按钮切换轮播图功能
Sep 23 Javascript
JavaScript中跨域问题的深入理解
Mar 04 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支付宝手机网页支付类实例
2015/03/04 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
php实现的二分查找算法示例
2017/06/20 PHP
JS和函数式语言的三特性
2014/03/05 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
Node.js事件驱动
2015/06/18 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
vue组件横向树实现代码
2018/08/02 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
Shell编程面试题
2012/05/30 面试题
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
办理信用卡工作证明
2014/09/30 职场文书
给医院的感谢信
2015/01/21 职场文书
职位证明模板
2015/06/23 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android