-1

问题

我们正在做一个更大的项目,我们需要打印 POS 收据。我们可以通过浏览器进行打印,但问题是我们无法进行剪切或部分剪切。

Win32 API

我们已经尝试过使用 Win32 API,它也可以正常工作,但我们找不到告诉收据打印机“剪切”的命令。

我们用win32尝试了以下方法:

from win32 import win32api
import win32print
txt = " Hello test ".encode()
p = win32print.OpenPrinter("EPSON TM-T20II Receipt")
job = win32print.StartDocPrinter (p, 1, ("test of raw data", None, "RAW"))
win32print.StartPagePrinter (p)
win32print.WritePrinter (p, txt)
win32print.EndPagePrinter (p)
win32print.ClosePrinter(p)

我们尝试使用这些命令结束打印,但没有任何运气。

win32print.EndDoc(p)
win32print.EndPagePrinter(p) 
win32print.EndDocPrinter(p11)

其他命令

然后我们发现其他网页说我们应该向打印机发送一个特定的命令,以进行切割。在这种方法中,我们必须以不同的方式初始化打印机。我们做了一些尝试来做到这一点。

p = printer.Usb( 0x04b8 , 0x0202 )

这给出了错误NoBackendError,通过安装解决了 libusb-win32-devel-filter-1.2.6.0.exe,然后我们得到了USBNotFoundError

然后我们尝试了

p = Usb( 0x04b8 , 0x0202 , 0 , profile="TM-T20II")

其中说:Unexpected keyword argument 'profile'

我们做了一点解决这个问题,但没有成功。

然后我们写道:

from escpos.connections import getUSBPrinter
p = getUSBPrinter()(idVendor= 0x1504,
                    idProduct= 0x0006,
                    inputEndPoint= 0x82,
                    outputEndPoint= 0x01)

出现错误:Cable isn’t plugged in。尝试安装libusb-win32过滤器,再次没有运气。

回到win32 Api,找到这些链接: C# CUSTOM VKP80iii Paper Ejector/Paper Cut 什么是剪纸命令? https://mike42.me/blog/what-is-escpos-and-how-do-i-use-it

好的,现在的心态是对 pos 打印发出命令。我们知道 pos 打印的命令不是我们最好的,但我们的想法是文本通过命令发送到打印机:

    1. 试试
      ○ cutTxt = "0001 1100 0101 1000 0000 0101 0000 0001 0100 0101
      0000 0101".encode()
    1. 试试
      ○ cutTxt = bytearray("28 80 5 1 69 5", "utf-8")
    1. 试试
      ○ GS = str( 29 )
      ○ ESC = str( 27 )
      ○ cutTxt = ""
      ○ cutTxt = ESC + "@"
      ○ cutTxt += GS + "V"
  • 后面是
    ○ win32print.WritePrinter (p, cutTxt)
    它只是打印了我们写到打印机的内容

设置

最后但并非最不重要的一点是,我们在计算机上找到了 pos 打印机,进入设置,看看是否有一些设置我们可以更改以使其切割。你猜对了,我们没有成功。但是我们尝试打印一些测试打印,并且这样做时,它可以毫无问题地进行部分剪切。

4

1 回答 1

0

对于全切

win32print.WritePrinter(p, b'\x1dV\x00')

对于部分切割

win32print.WritePrinter(p, b'\x1dV\x01')
于 2019-12-11T03:22:50.703 回答