Python 发送 escpos 命令到热敏打印机字符大小问题

Python send escpos command to thermal printer character size issue

我需要将 escpos 发送到热敏收据打印机。我 运行 遇到指定字符大小的问题,[https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=34] 对此进行了描述。在 Python 我把这个命令写成

#ESC @ for initiate the printer
string = b'\x1b\x40'
#GS ! command in the doc corresponding to 4 times character height and width
string = string + b'\x1d' + b'\x21' + b'\x30' + b'\x03' 
string = string + bytes('hello world')

第一行我启动了ESC@对应的打印机 在第二行中,我想将字符大小指定为 4x 高度和宽度(请参阅文档链接)。 在第三行,我打印出文本。

问题是打印出的文本有 4 倍的宽度,但不是 4 倍的高度。我还尝试将字符大小写为两个命令

string = string + b'\x1d' + b'\x21' + b'\x30'
string = string + b'\x1d' + b'\x21' + b'\x03' 

在这种情况下,我的文本以 4 倍的高度而不是 4 倍的宽度打印出来。我很确定我误读了文档,但我不知道我还应该如何编写命令才能实现 4 倍的高度和宽度。

还有 examples GS 存在! escpos 中的语法,它似乎被写为 GS ! 0x11 实现 2 倍的宽度和高度。从 table 看来这似乎没有意义。我知道 python-escpos 存在,但它不适用于我的 USB 打印机的 windows 10。

通过阅读文档,在我看来你必须使用

b'\x1d' + b'\x21' + b'\x33' 

在高度和宽度上得到 4 倍放大。两个“3”表示放大倍数减一。第一个是宽度,第二个是高度。

所以问题似乎是您将宽度和高度拆分为两个字节。它们应该被收集到一个字节中。

所以,总共:

#ESC @ for initiate the printer
string = b'\x1b\x40'

#GS ! command in the doc corresponding to 4 times character height and width
string = string + b'\x1d' + b'\x21' + b'\x33' 
string = string + bytes('hello world')

或者换句话说:

def initialize():
    # Code for initialization of the printer.
    return b'\x1b\x40'

def magnify(wm, hm):
    # Code for magnification of characters.
    # wm: Width magnification from 1 to 8. Normal width is 1, double is 2, etc.
    # hm: Height magnification from 1 to 8. Normal height is 1, double is 2, etc.
    return bytes([0x1d, 16*(wm-1) + (hm-1)])

def text(t, encoding="ascii"):
    # Code for sending text.
    return bytes(t, encoding)

string = initialize() + magnify(4, 4) + text('hello world')