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 相关文章推荐
jquery tools 系列 scrollable学习
Sep 06 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
Sep 29 Javascript
javascript打印输出json实例
Nov 11 Javascript
JS判断、校验MAC地址的2个实例
May 05 Javascript
js实现的点击div区域外隐藏div区域
Jun 30 Javascript
js实现Select下拉框具有输入功能的方法
Feb 06 Javascript
jquery验证邮箱格式是否正确实例讲解
Nov 16 Javascript
原生js图片轮播效果实现代码
Oct 19 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
Mar 18 Javascript
p5.js绘制旋转的正方形
Oct 23 Javascript
JS立即执行的匿名函数用法分析
Nov 04 Javascript
Vue.js暴露方法给WebView的使用操作
Sep 07 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
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
js Calender控件使用详解
2015/01/05 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
移动端js图片查看器
2016/11/17 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
Vue使用lodop实现打印小结
2019/07/06 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
python实现随机密码字典生成器示例
2014/04/09 Python
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
python线程池threadpool实现篇
2018/04/27 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
大一学生的职业生涯规划书范文
2014/01/19 职场文书
运动会通讯稿200字
2014/02/16 职场文书
片区教研活动总结
2014/07/02 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
财务总监岗位职责
2015/02/03 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
2016年春节慰问信息
2015/03/25 职场文书
公司管理制度范本
2015/08/03 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
Feign调用传输文件异常的解决
2021/06/24 Java/Android
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python