如何通過python2.7連接併發送數據到以太網收據打印機Epson-T88V,我已經手動設置了以太網打印機的IP地址,實用軟件通信也成功。 如何檢測並連接到這些打印機併發送數據進行打印。在Python中是否有和以太網連接模塊? 使用多個以太網打印機和單獨的數據從一個系統同時打印,我使用的Windows XP和Python 2.7 我已經添加打印機作爲我的默認打印機,我如何訪問此TCP/IP打印機 希望我我很清楚 謝謝。如何通過python連接到以太網打印機?
1
A
回答
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
+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
相關問題
- 1. 可以通過藍牙連接android手機到打印機嗎?
- 2. 如何通過Android連接網絡打印機?
- 3. 如何通過JAVA連接服務器到打印機
- 4. 是否可以通過藍牙連接iphone到打印機?
- 5. 我正嘗試在VB.NET中通過以太網打印熱敏打印機
- 6. 檢查通過以太網C連接#
- 7. Android Studio通過以太網連接ADB
- 8. Python通過套接字連接訪問遠程打印機
- 9. 如何讓網站直接連接到打印機?以便它可以直接打印訂單
- 10. 如何通過將linux pc連接到電線的打印機端來將數據發送到打印機?
- 11. 通過網絡直接打印到打印機(如POS打印機)的最佳方式是什麼?
- 12. 如何:關閉計算機通過以太網使用vb.net連接
- 13. 如何通過一個以太網端口連接到兩個以太網網絡?
- 14. 如何直接打印到通過.net桌面應用程序連接到串行端口的打印機
- 15. 如何連接或打印到ESC/POS打印機?
- 16. 通過互聯網打印到遠程打印機
- 17. 通過指定打印機名稱打印到打印機 - Javascript
- 18. 無法連接到POS打印機通過TCP 9100
- 19. 通過移動應用程序到打印機的TCP連接
- 20. 用Windows Mobile通過以太網連接到Windows CE 6.0
- 21. 通過以太網電纜將AndroidThings連接到adb
- 22. 通過以太網連接到iPhone模擬器
- 23. 我如何可以打印到標籤打印機從網頁
- 24. 從Zebra打印機通過套接字連接接收郵件
- 25. 通過交換機通過以太網將嵌入式系統連接到主機
- 26. 可以通過打印機打印點陣用PHP打印
- 27. 使用Java在Printronix T5000r上通過以太網打印
- 28. 如何檢查打印機是否通過Java連接到您的PC?
- 29. 如何與打印機連接
- 30. 如何通過網頁操作網絡打印機?
「以太網打印機」? – 2012-04-16 05:24:41