<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

        最近一個禮拜調研了下斑馬打印機怎樣實現網絡打印。

        緣起:

          之前實現打印方式是直接使用USB接口連接PC,使用串口通訊提供一套打印服務,在系統界面配置相關參數,即可調用打印服務;

          后來業務需求變化,現場實施并沒有PC提供給打印機使用USB連接方式,因此,就開始做了這件事。

        調研后方案:

        硬件:一臺Zebra ZT210斑馬打印機、一個USR W610模塊、一根網線

        方案一:

          后端發送ZPL指令到打印機,封裝統一調用

        方案二(舍棄):

          使用本地斑馬打印機驅動調用打印機,普通打印Ctrl + P調起的界面(前端實現,此種方式有幾個難點:1.格式調整;2.二維碼或者條碼的生成,但這對于前端也不是什么難點,有實現的,相比下后端實現簡單)

        方案一實現過程:

        

       

       

        打印流程:

       

         有人的USR W610模塊實物(天線可以忽略,本次使用的網線,網口在電源線旁邊):

        USR W610:充當一個TCP Server,上電后,插上網線,輸入模塊后面的ip(賬號密碼:admin/admin)就可以訪問它的管理界面。若之前設置過ip,找根筆戳一下重置按鈕。設置ip和端口,后端使用socket進行連接時會使用。

        USR W610后臺界面:

       

      ·     后端核心代碼:

          def post(self, request):
              """新增對象
      
              Args:
                  request (rest_framework.request.Request): HTTP request
      
              Returns:
                  response(rest_framework.response.Response): HTTP response.
                  error_response(rest_framework.response.error_response): error_response
      
              """
              request_data = request.data
              template_name = request_data.get('template_name', '')
              if not template_name:
                  return error_response(reason='模板名稱不能為空',
                                        info='template_name is required',
                                        state=status.HTTP_400_BAD_REQUEST)
      
              function_name = request_data.get('function_name', '')
              if not function_name:
                  return error_response(reason='功能模塊名稱不能為空',
                                        info='function_name is required',
                                        state=status.HTTP_400_BAD_REQUEST)
      
              is_function_name_exist = PrinterConfig.objects.filter(function_name=function_name).exists()
              if not is_function_name_exist:
                  return error_response(reason='功能模塊名稱不存在',
                                        info='function_name is not exist',
                                        state=status.HTTP_400_BAD_REQUEST)
      
              is_template_name_exist = PrinterConfig.objects.filter(template_name=template_name).exists()
              current_dir = os.path.join(settings.BASE_DIR, 'print_template')
              is_template_name_in = template_name in os.listdir(current_dir)
              if not any([is_template_name_in, is_template_name_exist]):
                  return error_response(reason='模板名稱不存在',
                                        info='template_name is not exist',
                                        state=status.HTTP_400_BAD_REQUEST)
      
              file_path = os.path.join(current_dir, template_name)
              qr_code_file = open(file_path, 'r', encoding='utf-8')
              template_data = qr_code_file.read()
              template = Template(template_data)
              zpl = template.render(Context(request_data))
      
              # 攜帶ZPL指令向打印機發送http請求
              ip_port = PrinterConfig.objects.filter(template_name=template_name).values_list('printer_ip', 'printer_port')
              ip, port = ip_port[0][0], ip_port[0][1]
              if not all([ip, port]):
                  return error_response(reason='打印配置的IP或端口未配置',
                                        info='printer ip and port must be configured',
                                        state=status.HTTP_400_BAD_REQUEST)
      
              # print_server = 'http://' + str(ip) + ':' + str(port)
              client = None
              try:
                  # requests.post(print_server, data=zpl.encode('utf-8'))
                  client = socket.socket(socket.AF_INET, type=socket.SOCK_STREAM)
                  client.connect((ip, port))
                  client.send(zpl.encode('utf-8'))
                  # 打印機未連接!
              except Exception as other_except:  # pylint: disable=broad-except
                  except_info = other_except.args[0]
                  # except_info = other_except.args[0].args[0]
                  # if except_info == 'Connection aborted.':
                  if isinstance(except_info, tuple) and except_info == 'Connection aborted.':
                      return Response({'result': '打印成功,請確認'})
                  else:
                      logger.error(other_except)
                      return error_response(reason='打印失敗,請檢查打印配置是否正確',
                                            info=str(other_except),
                                            state=status.HTTP_400_BAD_REQUEST)
              finally:
                  client.close()
      
              return Response({'result': 'ok'})

        特殊說明:

        1、正如代碼所表現的,打印機不會給模塊響應,模塊也就不會給后端響應,打印成功會拋Connection aborted.異常,實際已經打印出來。但這里為什么要請確認,是因為在TCP連接正常情況下,即使把耗材取出,比如把標簽紙拿出去,也會打印成功,等換上紙后,打印任務隊列對接著打印,所以這個就需要現場人員確認了。

        2、模板文件里面的ZPL指令編寫,可以參考http://note.youdao.com/noteshare?id=05f00edb5f88cfe16543337f8c7f17aa&sub=77F69DD3BA7E4961A3435E9DFA7D15E5 也可以使用Zebra Designer工具進行設計生成.prn文件,文本打開即可看見ZPL指令。因為自動生成的.prn文件中ZPL指令是經過GFA加密過的,不便于使用模板語法替換,生成的內容也相比自己寫的多很多。工具界面如下:

       

       

       

       .prn生成的zpl指令示例:

       

       自己參考ZPL指令手冊寫的指令示例:

      ^XA
      ^CI28
      ^CW1,E:SIMSUN.TTF
      ^MD20
      ~SD20
      ^FO142,105
      ^BQN,2,10
      ^FD  {{qr_code_print}}
      ^FS
      ^XZ

       

         其他說明:zpl指令中有兩個值得注意的:SD   設置暗度:若打印字跡比較淡時設置            PR打印速率:若打印字跡比較稀時設置

      參考資料:

        http://www.rzrgm.cn/chengeng/p/7676046.html

        https://max.book118.com/html/2018/1006/8002046103001125.shtm

        https://www.usr.cn/Down/USR-W610_instructions.pdf

         

      posted on 2021-02-26 11:23  落葉雖美只活一世  閱讀(3591)  評論(0)    收藏  舉報
      Live2D
      主站蜘蛛池模板: 无码伊人66久久大杳蕉网站谷歌| 婷婷四虎东京热无码群交双飞视频 | 亚洲激情在线一区二区三区| 久久99精品久久久久久9| 国产午夜在线观看视频播放| 欧美肥老太牲交大战| 国产在线精品福利91香蕉| 人人爽人人模人人人爽人人爱| 国产精品欧美一区二区三区不卡| 动漫精品中文无码卡通动漫| 澳门永久av免费网站| 水城县| 性视频一区| 久久一区二区中文字幕| 韩国午夜福利片在线观看| 国产美女午夜福利视频| 久热这里只有精品在线观看| 一级做a爰片在线播放| 日韩精品人妻av一区二区三区| 欧美丰满熟妇xxxx性ppx人交| 国产AV影片麻豆精品传媒| 欧美乱大交xxxxx疯狂俱乐部| 亚洲综合精品香蕉久久网| 四虎国产精品免费久久| 国精偷拍一区二区三区| 日本高清一区二区三| 日韩激情无码av一区二区| 四虎永久地址WWW成人久久| 2021国产精品视频网站| 91亚洲国产成人久久精| 国产精品污双胞胎在线观看| 国产av无码国产av毛片| 一卡二卡三卡四卡视频区| 人妻少妇久久中文字幕一区二区| 国产高清吹潮免费视频| 97精品伊人久久大香线蕉APP| 亚洲欧洲∨国产一区二区三区| 日韩国产中文字幕精品| 成人片黄网站色大片免费毛片| 久久91精品牛牛| 人妻人人妻a乱人伦青椒视频 |