生产制造追溯系统之再说条码打印


Posted in Javascript onJune 03, 2019

前言

在之前的博客中我介绍了如何实现生产现场的条码打印,我们的生活中到处都是条码,一维码、二维码随处可见,更别说一家从事生产制造加工的工厂了,而条码种类繁多、离线打印等情况就直接导致了条码管控上的难度,甚至会出现较为严重的品质事件,上一个版本中我是通过Web应用程序调用 WinForm 中的函数进行打印,WinForm中嵌套了 WebBrowser 来浏览网页,通过这几年的实际运用,这个方法基本能够满足大部分需求,但还是美中不足,由于 WebBrowser 所示用的浏览器内核比较低,导致很多样式无法兼容,尽管网络上有一些方法去改变这个问题(比如webkit,cef,修改注册表等等),但总是或多或少有一些问题。

新的方案,告别 WinForm & WebBrowser

我们本次以生产线 卡通包装 工位为例,进行描述:

通常情况下,操作员会扫描多个彩盒条码,这个扫描的数量一个到多个不等,每一个彩盒上面都有一个唯一的条形码或二维码,当彩盒扫描完成以后需要结束装箱,此时系统应该直接将对应的卡通标贴打印出来,操作员从打印机上撕下卡通标贴并贴于卡通箱,在此之前我们需要提前将卡通标贴的打印模板制作出来并上传至系统中,操作界面如下,支持同一个产品打印多张标贴:

生产制造追溯系统之再说条码打印

此时,我们需要编写一个 Api 来获取服务器上面的模板文件以及需要打印出来的数据列表,关键代码如下:

string ServerUrl = XmlHelper.GetXmlReader(path, "Config", "Server");
  string Api = XmlHelper.GetXmlReader(path, "Config", "Api");
  //通过 API 获取模板文件*******************************************************************
  string _Btw_Url = Api + "?action=get_carton_label&carton_sn=" + _carton_sn;
  HttpHelper http_btw = new HttpHelper();
  //创建Httphelper参数对象
  HttpItem item_btw = new HttpItem()
  {
  URL = _Btw_Url,//URL必需项 
  ContentType = "application/json", 
  };
  HttpResult req_result_btw = http_btw.GetHtml(item_btw);  
  string btw_str = req_result_btw.Html;
  JObject obj_btw = (JObject)JsonConvert.DeserializeObject(btw_str);
  DataTable dt = Library.JsonLib.ToDataTable(obj_btw["msg"].ToString());
  //通过 API 获取模板文件*******************************************************************
WebClient web = new WebClient();  
  string _Api_Url = Api + "?action=get_carton_print_list&carton_sn=" + _carton_sn;
  HttpHelper http_data_list = new HttpHelper();
  //创建Httphelper参数对象
  HttpItem item_data_list = new HttpItem()
  {
  URL = _Api_Url,//URL必需项 
  ContentType = "application/json", 
  };
  HttpResult req_result_data_list = http_data_list.GetHtml(item_data_list); 
  string print_str = req_result_data_list.Html; 
  JObject obj = (JObject)JsonConvert.DeserializeObject(print_str);
  string _Key = obj["msg"]["key"].ToString();
  string _Value = obj["msg"]["value"].ToString(); 
  string splitKey = "*";
  string[] keys = _Key.Split(splitKey.ToCharArray(), StringSplitOptions.None);
  string[] values = _Value.Split(splitKey.ToCharArray(), StringSplitOptions.None);
  for (int i = 0; i < dt.Rows.Count; i++)
  {
  _file_url = ServerUrl + "app/cartonlabel/" + dt.Rows[i]["LABEL_FILE"].ToString();
  _file_name = System.Guid.NewGuid().ToString() + "_" + dt.Rows[i]["LABEL_FILE"].ToString();
  web.DownloadFile(_file_url, _directory + _file_name);
  _print();
  }

Api 编写完成之后我们进行发布,发布到本地指定一个文件夹留作备用,现在我们还差一步,那就是如何通过网页在客户端本地打印?大家都知道我们的网站是部署在服务器而非客户端本地的,但是打印的条码必须出现在客户端本地的打印机,此时你可以考虑通过网络共享打印机的办法来实现,但是这种方法非常不稳定,一些安全方面的设置就足以让你内流满面,因此我们可以考虑使用CassiniDev 来实现,大致思路如下:

  • 新建一个批处理或者其它类型的程序。
  • 在项目中引用CassiniDev 文件至。
  • 在本地new一个服务实例并启动。

通过如下代码即可启动该服务:

new Server(9001, "/", System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Service"), System.Net.IPAddress.Parse("127.0.0.1"), "", 0, false, false);

在包装之前我们将该服务启动起来,我做了一个简单的界面,如下图所示:

生产制造追溯系统之再说条码打印

此时,我们需要用到上一步发布的 Api,将发布的 Api 文件拷贝至Service目录,这个Service目录在这个批处理程序的根目录下面,至此所有的前期工作已经做完了,现在只需要调用本地这个Api 即可。我们选择 MO-00002 这个工单进行演示:

生产制造追溯系统之再说条码打印

生产制造追溯系统之再说条码打印

生产制造追溯系统之再说条码打印

下面开始扫描条码进行包装,该产品的包装容量为每一个卡通箱需要包装 4 个彩盒。

生产制造追溯系统之再说条码打印

生产制造追溯系统之再说条码打印

系统提示打印命令发送成功的时候,我们的打印机已经自动将标贴打印出来了,如下图所示:

生产制造追溯系统之再说条码打印

结论

相对之前的 WebBrowser,目前这种方式可以更好的兼容样式表,比如H5,再就是同一套系统不用分为网页端与客户端,尽管打开的是同一个网站;维护起来也要更加方便。

以上所述是小编给大家介绍的生产制造追溯系统之再说条码打印,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
XP折叠菜单&amp;仿QQ2006菜单
Dec 16 Javascript
JavaScript中两个感叹号的作用说明
Dec 28 Javascript
Node.js 的异步 IO 性能探讨
Oct 08 Javascript
jQuery中:submit选择器用法实例
Jan 03 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
基于javascript实现listbox左右移动
Jan 29 Javascript
Javascript获取图片原始宽度和高度的方法详解
Sep 20 Javascript
详解webpack 热更新优化
Sep 13 Javascript
Vue循环组件加validate多表单验证的实例
Sep 18 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 Javascript
简单了解vue中的v-if和v-show的区别
Oct 08 Javascript
微信小程序使用 vant Dialog组件的正确方式
Feb 21 Javascript
VUE安装使用教程详解
Jun 03 #Javascript
教你完全理解ReentrantLock重入锁
Jun 03 #Javascript
生产制造追溯系统之在线打印功能
Jun 03 #Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
Jun 03 #Javascript
深入理解 JS 垃圾回收
Jun 03 #Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 #Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
Jun 03 #Javascript
You might like
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
python正则中最短匹配实现代码
2018/01/16 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
教师找工作推荐信
2013/11/23 职场文书
服装创业计划书范文
2014/02/05 职场文书
本科毕业生自荐信
2014/06/02 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
学生犯错保证书
2015/05/09 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
解决mysql的int型主键自增问题
2021/07/15 MySQL
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS
python_tkinter事件类型详情
2022/03/20 Python
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫