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


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 相关文章推荐
JavaScript 继承详解(四)
Jul 13 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
Mar 28 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
javascript限制文本框输入值类型的方法
May 07 Javascript
深入浅析javascript立即执行函数
Oct 23 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
May 26 Javascript
BootStrap智能表单实战系列(七)验证的支持
Jun 13 Javascript
Bootstrap CSS组件之导航条(navbar)
Dec 17 Javascript
对vue v-if v-else-if v-else 的简单使用详解
Sep 29 Javascript
JavaScript迭代器的含义及用法
Jun 21 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
Jun 02 Javascript
vuex刷新后数据丢失的解决方法
Oct 18 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学习之正则表达式
2011/04/17 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
JQuery魔力之$(&quot;tagName&quot;)与selector
2012/03/05 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
Python标准异常和异常处理详解
2015/02/02 Python
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
Python 远程开关机的方法
2020/11/18 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
python 实现端口扫描工具
2020/12/18 Python
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
经销商会议欢迎词
2014/01/11 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS