今天遇到一个需求,就是在浏览器中打印标签,其实无论是打印标签还是A4纸,最终功能的实现效果都是大同小异的。

最终效果图:

打印函数的封装

function print(data) {var that = this;var _str = "";for (var o in data) {if (data[o] != -1) {if (data[o] == undefined) {that.$message({message: "存在为空的数据",type: 'error'});return;}_str += o + "=" + data[o] + "&";}}var _str =encodeURI(_str.substring(0, _str.length - 1));
try {       window.open(httpUrl + _str, "", "width=400,height=400,menu=no,toolbar=no");
}
catch (e) {console.msg("调用出现异常,请用ie或调整到兼容模式下打印" + e.name + e.message);}
}

根据上面封装的打印函数,可以看出整体逻辑就是:根据传入的参数,先判断是否有空的数据,如果有空数据,则不能进行打印,如果都是有数据的情况,则进行路径的拼接,然后通过window.open的方式来进行调取打印路径从而实现打印功能。

window.open(url,'','width=400,height=400,menu=no,toolbar=no')调出窗口进行打印

for循环,延迟打印功能实现——闭包

printCode(row, obj, arr, d) {for (var i = 0; i < arr.length; i++) {(function (i) {setTimeout(() => {var data = {Type: "PrintBomLabel",GroupNo: d && d.groupNo || obj.groupNO || obj.groupNo,OrderNo: d && d.orderNO || obj.orderNO,partNo: row.partNo,mfg: row.mfg,package: row.pack,Parameter: row.parameter,Designator: row.designator,OutSystemRelationId: row.outSystemRelationId,proNum: arr[i].proNum,flag: obj.hasReplenish ? 1 : 0,id: arr[i].id}console.log(data);$WmsPrint.BomPoint(data);}, 500 * i);})(i)}
},

由于arr是一个数组,需要将数组中的每一项都拿出来进行打印,而且打印要有间隔,因此要用到循环,还要延迟。

如果在for循环中,调用函数,则很可能出现闭包问题,也就是作用域内,参数循环,但是函数未执行,当函数执行时,参数已变为最后一项。最终出现的结果就是执行多次最后一次参数。

为了能够解决这个闭包导致的问题,可以通过立即执行函数的方式来处理。

立即执行函数的写法

(function(i){//函数体
})(i)

for循环中的参数传入到立即执行函数中,然后用参数i接收,此时函数体中的参数i就是正常的参数了。

由于要延迟打印,则可以通过setTimeout(()=>{函数体},i*500)

上面代码中的$WmsPrint.BomPoint 就是打印封装的函数:

部分代码如下:

/*全局打印js
*/
//当前配置环境 修改此处切换环境
var httpUrl="xxxxxxxx?";
/* js工具 */
setQueryConfig=function(data) {var that = this;var _str = "";for (var o in data) {if (data[o] != -1) {if (data[o] == undefined) {window.alert('存在为空的数据');//that.$message({//    message: "存在为空的数据",//    type: 'error'//});return;}_str += o + "=" + data[o] + "&";}}var _str =encodeURI(_str.substring(0, _str.length - 1));try {     window.open(httpUrl + _str, "", "width=400,height=400,menu=no,toolbar=no");
}
catch (e) {console.msg("调用出现异常,请用ie或调整到兼容模式下打印" + e.name + e.message);}}
var $WmsPrint = {  ///点料打印BomPoint:function(data){var parmdata = {Type: "PrintBomLabel",GroupNo: data.GroupNo,              //订单包OrderNo: data.OrderNo,              //订单partNo:data.partNo,                 //型号mfg: data.mfg,                      //品牌package: data.package,              //封装Parameter: data.Parameter,          //参数Designator: data.Designator,        //位号OutSystemRelationId:data.OutSystemRelationId,proNum: data.proNum,              //数量flag: data.flag,                  //是否补料id: data.id,                      //点料Id}setQueryConfig(parmdata);      }
}

上面的打印方法是通过标签纸打印,因为标签纸的尺寸是比较小的,尺寸是400mmX400mm,因此再用window.open时,通过设置尺寸,来限制打印区域。

如果是要实现A4纸的打印,则首先要排版,自己写dom样式及数据渲染,然后调用window.print的方式来实现。

window.open打印功能相关推荐

  1. window.print()前端实现打印功能

    方法介绍 window.print()方法用于打印当前窗口的内容. 默认打印页面中body里的所有内容. 调用 print() 方法会产生一个打印预览弹框,让用户可以设置打印配置. 1. 打印方法 1 ...

  2. 打印功能window.print()

    打印功能window.print() 1. window.print()打印其实打印的是整个当前网页 2. 3. 样式问题 如果使用less,scss 是不会生效的 只能使用css语言格式, 就是不能 ...

  3. js使用window.print()实现打印功能

    js使用window.print()来实现打印功能 1.首先在需要打印的内容标签上面绑定ref <div ref="tableRef">需要打印的内容 </div ...

  4. window.print()方法实现打印功能,多出一张空白页

    项目内需要实现一个打印的功能,用了window.print()方法,但是在打印的时候总是多出一张空白页,偶然搜到了一篇文章,(https://blog.csdn.net/web_houzhanguo/ ...

  5. js设置html打印不分页,JS 使用 window对象的print方法实现分页打印功能

    最近做项目用到了web在线打印功能,经研究使用了JS自身支持的Window对象的打印方法,此种方法兼容性比较好,在IE和火狐浏览器下使用都没有问题. 1.但是网上好多案例都不支持分页功能,最后通过CS ...

  6. 关于window.print打印分页功能

    平常window.print分页一般打印时用到page-break-after:always; 打印的样式设置在 <style type="text/css" media=& ...

  7. 在Web中如何运用JavaScript实现打印功能

    <OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0>< ...

  8. Atitit.java swing打印功能 api  attilax总结

    Atitit.java swing打印功能 api  attilax总结 1. 打印方式有三种:2 1.1. 一是不经过任何修改,直接调用javascript中的window.print()打印.2 ...

  9. php报表数据打印机,通过打印机打印带打印功能的php表

    我有以下php表,我如何只在php表中添加打印功能?点击一个按钮,下面的表格通过打印机打印,我试过'CTRL P',我只得到页面的html部分示例页眉,页脚,导航栏,而不是结果php结果 echo & ...

最新文章

  1. 用python打造一款文件搜索工具,所有功能自己定义!
  2. java多图片上传json_[Java教程]SpringMVC框架五:图片上传与JSON交互
  3. python stm32-实现Python与STM32通信方式
  4. centos7.3上yum install nodejs
  5. 安装VMWare时 the system administrator has set policies to prevent this installation
  6. 一个39岁程序员的应聘被拒
  7. 七种常用特征工程技术
  8. 怎么修改antd mobile中picker样式_修改 iPhone 双信号方法,超级好玩
  9. 循环自相关函数和谱相关密度(四)——实信号、复信号模型下的QPSK信号循环谱推导
  10. 怎样考计算机教师资格证书,非师专生怎么考取计算机教师资格证书?
  11. MySQL 四种链接
  12. python流星雨代码_用python一起来看流星雨
  13. 计算机组成原理题集,计算机组成原理试题集含答案
  14. 2020年全球电动汽车展望
  15. 有道云笔记Markdown图片链接解决办法
  16. 搜狗推送工具之泛站程序实现泛收录
  17. 什么是UI设计?UI学习一般分几个阶段呢?
  18. 08-小蜜蜂单片机定时器
  19. 1-2 二十四点 (20 分)【Csp认证真题】
  20. 形象标识 新松机器人_新松机器人自动化股份有限公司

热门文章

  1. 如何自动备份文件到移动硬盘?
  2. PC连接汇川PLC方法
  3. U盘mp3移动硬盘“文件或目录损坏且无法读取”错误的修复
  4. CHROME扩展笔记之chrome.alarms定时器的使用
  5. python爬取流浪地球_Scrapy爬取猫眼流浪地球影评2----- 获取数据
  6. GZSFLbearingCLD
  7. 如何用matlab编写混合整数规划,MATLAB中的混合整数线性规划
  8. 2019参加Unite大会感悟
  9. rsa asia 2015 ppt
  10. 光纤测试仪:光纤插入损耗测试程序