热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

这篇文章主要介绍了生产制造追溯系统之再说条码打印,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

前言

在之前的博客中我介绍了如何实现生产现场的条码打印,我们的生活中到处都是条码,一维码、二维码随处可见,更别说一家从事生产制造加工的工厂了,而条码种类繁多、离线打印等情况就直接导致了条码管控上的难度,甚至会出现较为严重的品质事件,上一个版本中我是通过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 

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,再就是同一套系统不用分为网页端与客户端,尽管打开的是同一个网站;维护起来也要更加方便。

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


推荐阅读
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
  • 微信小程序支付官方参数小程序中代码后端发起支付代码支付回调官方参数文档地址:https:developers.weixin.qq.comminiprogramdeva ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 开发笔记:前端之前端初识
    开发笔记:前端之前端初识 ... [详细]
  • 本文探讨了在使用 ClickOnce 部署方式时遇到的自动更新失败问题,包括本地安装与服务器安装的不同表现,并提供了详细的解决方案。 ... [详细]
  • 本文详细介绍了Python的multiprocessing模块,该模块不仅支持本地并发操作,还支持远程操作。通过使用multiprocessing模块,开发者可以利用多核处理器的优势,提高程序的执行效率。 ... [详细]
  • 解析 HTTP 头 'Vary: Accept-Encoding' 的作用与重要性
    本文详细探讨了 'Vary: Accept-Encoding' HTTP 头的作用,即指导缓存系统(如代理服务器和 CDN)根据不同的编码需求存储和提供适当的资源版本,确保不同类型的客户端能够接收到适合自己的内容。 ... [详细]
  • Spring Boot 初学者指南(第一部分)
    本文介绍了Spring Boot框架的基础知识,包括其设计理念、主要优势以及如何简化传统的J2EE开发流程。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 本文探讨了在UIScrollView上嵌入Webview时遇到的一个常见问题:点击图片放大并返回后,Webview无法立即滑动。我们将分析问题原因,并提供有效的解决方案。 ... [详细]
  • h5调用本地摄像头和麦克风一
    h5调用本地摄像头和麦克风一,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了如何使用Python爬取妙笔阁小说网仙侠系列中所有小说的信息,并将其保存为TXT和CSV格式。主要内容包括如何构造请求头以避免被网站封禁,以及如何利用XPath解析HTML并提取所需信息。 ... [详细]
author-avatar
Sek_5123_533_477
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有