2012-04-16 100 views
1

如何通過python2.7連接併發送數據到以太網收據打印機Epson-T88V,我已經手動設置了以太網打印機的IP地址,實用軟件通信也成功。 如何檢測並連接到這些打印機併發送數據進行打印。在Python中是否有和以太網連接模塊? 使用多個以太網打印機和單獨的數據從一個系統同時打印,我使用的Windows XP和Python 2.7 我已經添加打印機作爲我的默認打印機,我如何訪問此TCP/IP打印機 希望我我很清楚 謝謝。如何通過python連接到以太網打印機?

+2

「以太網打印機」? – 2012-04-16 05:24:41

回答

1
import usb 
from PIL import Image 
import time 
import os, sys 
import win32print 
from constants import * 
from exceptions import * 
class Escpos: 
    """ ESC/POS Printer object """ 
    handle = None 
    device = None 

    def __init__(self,interface=0, in_ep=0x100, out_ep=0x01) : 
     self.interface = interface 
     self.in_ep  = in_ep 
     self.out_ep = out_ep 
     if sys.version_info >= (3,): 
      raw_data = bytes ("This is a test\n", "utf-8") 
     else: 
      raw_data = "This is Shiva's test\n\n\n\n\n\n\n\n\n\n" 

     self.hPrinter = win32print.OpenPrinter ("Auto EPSON TM-T88V ReceiptE4 on SYSTEM") 
     self.handle = win32print.OpenPrinter ("EPSON TM-T88V") 
    def _raw(self, msg): 
     try: 
      self.hJob = win32print.StartDocPrinter (self.hPrinter, 1, ("test of raw data", None, "RAW")) 
      self.hJob = win32print.StartDocPrinter (self.handle, 1, ("test of raw data", None, "RAW")) 
      try: 
       win32print.WritePrinter(self.handle, msg) 
       win32print.WritePrinter(self.hPrinter, msg) 
       win32print.EndDocPrinter (self.handle) 
       win32print.EndDocPrinter (self.hPrinter) 
      finally: 
       print self.hJob 
     finally: 
      print self.hJob 

    def _check_image_size(self, size): 
     """Check and fix the size of the image to 32 bits""" 
     if size % 32 == 0: 
      return (0, 0) 
     else: 
      image_border = 32 - (size % 32) 
      if (image_border % 2) == 0: 
       return (image_border/2, image_border/2) 
      else: 
       return (image_border/2, (image_border/2) + 1) 


    def _print_image(self, line, size): 
     i = 0 
     cont = 0 
     buffer = "" 

     self._raw(S_RASTER_N) 
     buffer = "%02X%02X%02X%02X" % (((size[0]/size[1])/8), 0, size[1], 0) 
     self._raw(buffer.decode('hex')) 
     buffer = "" 

     while i < len(line): 
      hex_string = int(line[i:i+8],2) 
      buffer += "%02X" % hex_string 
      i += 8 
      cont += 1 
      if cont % 4 == 0: 
       self._raw(buffer.decode("hex")) 
       buffer = "" 
       cont = 0 


    def image(self, img): 
     """Parse image and then print it""" 
     pixels = [] 
     pix_line = "" 
     im_left = "" 
     im_right = "" 
     switch = 0 
     img_size = [ 0, 0 ] 

     im_open = Image.open(img) 
     im = im_open.convert("RGB") 

     if im.size[0] > 512: 
      print "WARNING: Image is wider than 512 and could be truncated at print time " 
     if im.size[1] > 255: 
      raise ImageSizeError() 

     im_border = self._check_image_size(im.size[0]) 
     for i in range(im_border[0]): 
      im_left += "0" 
     for i in range(im_border[1]): 
      im_right += "0" 

     for y in range(im.size[1]): 
      img_size[1] += 1 
      pix_line += im_left 
      img_size[0] += im_border[0] 
      for x in range(im.size[0]): 
       img_size[0] += 1 
       RGB = im.getpixel((x, y)) 
       im_color = (RGB[0] + RGB[1] + RGB[2]) 
       im_pattern = "1X0" 
       pattern_len = len(im_pattern) 
       switch = (switch - 1) * (-1) 
       for x in range(pattern_len): 
        if im_color <= (255 * 3/pattern_len * (x+1)): 
         if im_pattern[x] == "X": 
          pix_line += "%d" % switch 
         else: 
          pix_line += im_pattern[x] 
         break 
        elif im_color > (255 * 3/pattern_len * pattern_len) and im_color <= (255 * 3): 
         pix_line += im_pattern[-1] 
         break 
      pix_line += im_right 
      img_size[0] += im_border[1] 

     self._print_image(pix_line, img_size) 


    def barcode(self, code, bc, width, height, pos, font): 
     """ Print Barcode """ 
     # Align Bar Code() 
     self._raw(TXT_ALIGN_CT) 
     # Height 
     if height >=2 or height <=6: 
      self._raw(BARCODE_HEIGHT) 
     else: 
      raise BarcodeSizeError() 
     # Width 
     if width >= 1 or width <=255: 
      self._raw(BARCODE_WIDTH) 
     else: 
      raise BarcodeSizeError() 
     # Font 
     if font.upper() == "B": 
      self._raw(BARCODE_FONT_B) 
     else: # DEFAULT FONT: A 
      self._raw(BARCODE_FONT_A) 
     # Position 
     if pos.upper() == "OFF": 
      self._raw(BARCODE_TXT_OFF) 
     elif pos.upper() == "BOTH": 
      self._raw(BARCODE_TXT_BTH) 
     elif pos.upper() == "ABOVE": 
      self._raw(BARCODE_TXT_ABV) 
     else: # DEFAULT POSITION: BELOW 
      self._raw(BARCODE_TXT_BLW) 
     # Type 
     if bc.upper() == "UPC-A": 
      self._raw(BARCODE_UPC_A) 
     elif bc.upper() == "UPC-E": 
      self._raw(BARCODE_UPC_E) 
     elif bc.upper() == "EAN13": 
      self._raw(BARCODE_EAN13) 
     elif bc.upper() == "EAN8": 
      self._raw(BARCODE_EAN8) 
     elif bc.upper() == "CODE39": 
      self._raw(BARCODE_CODE39) 
     elif bc.upper() == "ITF": 
      self._raw(BARCODE_ITF) 
     elif bc.upper() == "NW7": 
      self._raw(BARCODE_NW7) 
     else: 
      raise BarcodeTypeError() 
     # Print Code 
     if code: 
      self._raw(code) 
     else: 
      raise exception.BarcodeCodeError() 


    def text(self, txt): 
     """ Print alpha-numeric text """ 
     if txt: 
      self._raw(txt) 
     else: 
      raise TextError() 


    def set(self, align='left', font='a', type='normal', width=1, height=1): 
     """ Set text properties """ 
     # Align 
     if align.upper() == "CENTER": 
      self._raw(TXT_ALIGN_CT) 
     elif align.upper() == "RIGHT": 
      self._raw(TXT_ALIGN_RT) 
     elif align.upper() == "LEFT": 
      self._raw(TXT_ALIGN_LT) 
     # Font 
     if font.upper() == "B": 
      self._raw(TXT_FONT_B) 
     else: # DEFAULT FONT: A 
      self._raw(TXT_FONT_A) 
     # Type 
     if type.upper() == "B": 
      self._raw(TXT_BOLD_ON) 
      self._raw(TXT_UNDERL_OFF) 
     elif type.upper() == "U": 
      self._raw(TXT_BOLD_OFF) 
      self._raw(TXT_UNDERL_ON) 
     elif type.upper() == "U2": 
      self._raw(TXT_BOLD_OFF) 
      self._raw(TXT_UNDERL2_ON) 
     elif type.upper() == "BU": 
      self._raw(TXT_BOLD_ON) 
      self._raw(TXT_UNDERL_ON) 
     elif type.upper() == "BU2": 
      self._raw(TXT_BOLD_ON) 
      self._raw(TXT_UNDERL2_ON) 
     elif type.upper == "NORMAL": 
      self._raw(TXT_BOLD_OFF) 
      self._raw(TXT_UNDERL_OFF) 
     # Width 
     if width == 2 and height != 2: 
      self._raw(TXT_NORMAL) 
      self._raw(TXT_2WIDTH) 
     elif height == 2 and width != 2: 
      self._raw(TXT_NORMAL) 
      self._raw(TXT_2HEIGHT) 
     elif height == 2 and width == 2: 
      self._raw(TXT_2WIDTH) 
      self._raw(TXT_2HEIGHT) 
     else: # DEFAULT SIZE: NORMAL 
      self._raw(TXT_NORMAL) 


    def cut(self, mode=''): 
     """ Cut paper """ 
     # Fix the size between last line and cut 
     # TODO: handle this with a line feed 
     print "The Cut mode is",mode 
     self._raw("\n\n\n\n\n\n") 
     if mode.upper() == "PART": 
      print "The Cut mode PartCut is true" 
      self._raw(PAPER_PART_CUT) 
     else: # DEFAULT MODE: FULL CUT 
      self._raw(PAPER_FULL_CUT) 


    def cashdraw(self, pin): 
     """ Send pulse to kick the cash drawer """ 
     if pin == 2: 
      self._raw(CD_KICK_2) 
     elif pin == 5: 
      self._raw(CD_KICK_5) 
     else: 
      raise CashDrawerError() 


    def hw(self, hw): 
     """ Hardware operations """ 
     if hw.upper() == "INIT": 
      self._raw(HW_INIT) 
     elif hw.upper() == "SELECT": 
      self._raw(HW_SELECT) 
     elif hw.upper() == "RESET": 
      self._raw(HW_RESET) 
     else: # DEFAULT: DOES NOTHING 
      pass 


    def control(self, ctl): 
     """ Feed control sequences """ 
     if ctl.upper() == "LF": 
      self._raw(CTL_LF) 
     elif ctl.upper() == "FF": 
      self._raw(CTL_FF) 
     elif ctl.upper() == "CR": 
      self._raw(CTL_CR) 
     elif ctl.upper() == "HT": 
      self._raw(CTL_HT) 
     elif ctl.upper() == "VT": 
      self._raw(CTL_VT) 
2

您應該看看使用pkipplibwxpython庫。

+0

感謝您的回覆我正在嘗試與pkipplib,但它需要在安裝中提高「錯誤:無法找到vcvarsall.bat」 – Prasanth 2012-04-16 08:48:07

+0

對不起,我沒有使用pycups我自己所以不能回答這個問題。 – BluesRockAddict 2012-04-16 21:43:15

+0

@alexmartelli: - 你有什麼想法或鏈接來幫助我在這個 – Prasanth 2012-04-25 10:33:52

相關問題