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


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 相关文章推荐
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
Sep 20 Javascript
用jQuery模拟页面加载进度条的实现代码
Dec 19 Javascript
获取非最后一列td值并将title设为该值的方法
Oct 30 Javascript
JQuery的ready函数与JS的onload的区别详解
Nov 21 Javascript
JavaScript+CSS控制打印格式示例介绍
Jan 07 Javascript
我的Node.js学习之路(四)--单元测试
Jul 06 Javascript
Vue.js计算属性computed与watch(5)
Dec 09 Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
Mar 07 Javascript
关于jquery中attr()和prop()方法的区别
May 28 jQuery
JS实现选项卡效果的代码实例
May 20 Javascript
jQuery编写QQ简易聊天框
Aug 27 jQuery
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本地服务器分享
2013/02/19 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
jquery tools 系列 scrollable学习
2009/09/06 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
javaScript基础详解
2017/01/19 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python中的列表知识点汇总
2015/04/14 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
Python中关于浮点数的冷知识
2019/09/22 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
九年级数学教学反思
2014/02/02 职场文书
美丽人生观后感
2015/06/03 职场文书
小学生暑假安全公约
2015/07/14 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书