Python отправить команду escpos на проблему размера символа термопринтера - PullRequest
1 голос
/ 24 января 2020

Мне нужно отправить 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')

В первой строке я инициировал принтер, соответствующий ES C @ Во второй строке я хотел указать размер символа, равный 4x высоте и ширине (см. ссылки на do c). В третьей строке я распечатываю текст.

Проблема в том, что напечатанный текст имеет 4-кратную ширину, а не 4-кратную высоту. Я также попытался записать размер символа в виде двух команд

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

В этом случае мой текст распечатывается с 4-кратной высотой, а не 4-кратной шириной. Я почти уверен, что неправильно прочитал do c, но я не знаю, как еще мне написать команду, чтобы достичь высоты и ширины в 4 раза.

Также для GS существует примеров ! синтаксис в escpos, и там он, кажется, записан как GS! 0x11 для достижения ширины и высоты в 2 раза. Это, кажется, не имеет смысла из таблицы. Я знаю, что python -escpos существует, однако он не работает на windows 10 для моего USB-принтера.

1 Ответ

2 голосов
/ 24 января 2020

При чтении документов мне кажется, что вам придется использовать

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')
...