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')
我需要将 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')