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 相关文章推荐
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
Apr 20 Javascript
JS中多步骤多分步的StepJump组件实例详解
Apr 01 Javascript
animate 实现滑动切换效果【实例代码】
May 05 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
Vue实现内部组件轮播切换效果的示例代码
Apr 07 Javascript
Vue二次封装axios为插件使用详解
May 21 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
Aug 30 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
Sep 14 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
Sep 02 Javascript
vue组件内部引入外部js文件的方法
Jan 18 Javascript
Vue-cli3多页面配置详解
Mar 22 Javascript
javascript中call,apply,bind的区别详解
Dec 11 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
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
js不是基础的基础
2006/12/24 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
详解React中setState回调函数
2018/06/14 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
详解Python的Django框架中的模版继承
2015/07/16 Python
python实现excel读写数据
2021/03/02 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
python实现PCA降维的示例详解
2020/02/24 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
C/C++程序员常见面试题一
2012/12/08 面试题
do you have any Best Practice for testing
2016/06/04 面试题
大学生就业求职信
2014/06/12 职场文书
个人年终总结范文
2015/03/09 职场文书
Python中with上下文管理协议的作用及用法
2022/03/18 Python
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers