Epson ESCPOS печатает символ Dani sh с помощью команды ES C R n - PullRequest
0 голосов
/ 25 апреля 2020

Я использую термопринтер Epson TM-T20II, и мне нужно распечатать квитанцию ​​с символами Дани sh (æ, ø, å). Код ESCPOS для выбора языка символов описан здесь . Мой код Python такой, как показано ниже

import win32print
import six
#create some raw data
rawdata = b'\x1b\x40' #Instantiate the printer ESC @
rawdata = rawdata + b'\x1b\x52\x10' #Select the Danish II character set as in documentation ESC R 
where n = 10
rawdata = bytes('Print æ,ø,å', 'utf-8') + b'\n' + b'\x1d\x56' + six.int2byte(66) + b'\x00' #print 
some text and cut

#Creating the printing job in Windows 10 and send the raw text to the printer driver
printer = win32print.OpenPrinter('EPSON TM-T20II Receipt')
hJob = win32print.StartDocPrinter(printer, 1, ("Test print", None, "RAW"))
win32print.WritePrinter(printer, rawdata)
win32print.EndPagePrinter(printer)
win32print.ClosePrinter(printer)

Моя проблема в том, что я напечатал какой-то странный символ. Также я установил принтер на Dani sh II, удерживая кнопку подачи и пока принтер включен. Что я пропустил?

1 Ответ

1 голос
/ 26 апреля 2020

В настоящее время вы можете попробовать изменить приведенную ниже спецификацию кодирования с utf-8 на cp865 .

rawdata = bytes('Print æ,ø,å', 'utf-8') + b'\n' + b'\x1d\x56' + six.int2byte(66) + b'\x00' #print  

Если это не сработает, следует прекратить использование win32print и переключиться на pyserial.
Также необходимо переключить режим принтера, удалить расширенный драйвер принтера и установить серийный принтер драйвер порта.
Затем прикладная программа должна создать все данные печати, используя необработанные команды ESC / POS.

Причина в следующем.


Вы можете получить расширенный драйвер принтера для TM-T20II и руководство и образец программы здесь.
EPSON Расширенный драйвер принтера для TM-T20II

В соответствии с примером программы «Шаг 1« Печать шрифта устройства »», чтобы отправить необработанную команду ESC / POS на принтер, необходимо выбрать определенный c шрифт устройства.

Печать «Hello APD» со шрифтом устройства и автоматическая проверка квитанции.

Ядро исходного кода в C ++ выглядит следующим образом.

CDC dc;
/*
 * Create the device context for the printer
 */
if(! dc.CreateDC(EPS_DRIVER_NAME, EPS_PRINTER_NAME, NULL, NULL) )
{
    AfxMessageBox(_T("Printer is not available."));
    return;
}

dc.StartDoc(&di);

/*
 * Perform the printing of the text
 */
CFont font, *old;
font.CreatePointFont(95, "FontA11", &dc);
old = dc.SelectObject(&font);
dc.TextOut(20, 10, "Hello APD!");
dc.SelectObject(old);
font.DeleteObject();

dc.EndPage();
dc.EndDoc();
dc.DeleteDC();

Вот как это выглядит в VB.

Dim printFont As New Font("Lucida Console", 8, FontStyle.Regular, GraphicsUnit.Point) ' Substituted to FontA Font

e.Graphics.PageUnit = GraphicsUnit.Point

' Print the string at 6,4 location using FontA font.
e.Graphics.DrawString("Hello APD!", printFont, Brushes.Black, 6, 4)

' Indicate that no more data to print, and the Print Document can now send the print data to the spooler.
e.HasMorePages = False

Разве это не очень трудно или невозможно перенести их на win32print Python?
API win32print, похоже, не может настраивать шрифты в середине печати. ​​
Модуль win32print

И StartDocPrinter и WritePrinter имеют следующее объяснение.
win32print.StartDocPrinter

Обратите внимание, что драйвер принтера может игнорировать запрошенный тип данных.

win32print.WritePrinter

Подходит для копирования raw Postscript или HPGL файлов на принтер ,

Команда ESC / POS не является необработанным PostScript или HPGL, и расширенный драйвер принтера EPSON не обязательно отправляет такие данные с вызовом win32print.

...