Я хочу изменить шрифт внутреннего принтера Verifone vx520. Я написал свою программу на C и использовал Font Designer Tool для создания шрифта принтера. Я использовал команду <ESC>m<s><t>
для загрузки таблицы шрифтов, но я все еще не могу изменить шрифт принтера. Как мне это сделать?
Verifone vx520 изменить шрифт принтера
Ответы (1)
Вместо того, чтобы использовать прямые escape-последовательности, вы можете рассмотреть возможность использования функций «p3700_» на 520. В частности, вам понадобятся p3700_dnld_font_file() и p3700_select_font().
Согласно документации:
#include <printer.h>
short p3700_dnld_font_file(short handle, //the open printer handle
short h_font_file, //the open file handle
short font_table //font table to select
);
short p3700_select_font(short h_comm_port, // the open printer handle
short font_size, // size of the font
short font_table // font table to select
);
В документации также есть это как часть примерной программы (слегка измененной):
//Variable declarations
int handle; // file handle for the Printer
open_block_t parm; // structure to fill comm parameters for com port
int h_font_file; // handle to the font file
//open printer
handle = open("/dev/com4", 0);
//initialize printer
memset(&parm,0,sizeof(parm));
parm.rate = Rt_19200; // ITP is always set to 19200 baud
parm.format = Fmt_A8N1 | Fmt_auto |Fmt_RTS; // ITP is always set at 8N1
parm.protocol = P_char_mode;
parm.parameter = 0;
set_opn_blk(handle, &parm);
SVC_WAIT(200);
p3700_init(handle, 6);
SVC_WAIT(100);
// Download a 16x16 printer font file containing 128 chars from offset 0 to 127
h_font_file = open("16x16.pft", O_RDONLY);
// download the printer font file at font table 1
p3700_dnld_font_file (handle, h_font_file, 1);
strcpy((char *)printBuf,(const char *)"Printing 16x16 Font\n\n");
p3700_print(handle, printBuf);
p3700_select_font(handle, 0x01, 1);
// 0x01 corresponds to 16x16 font size
p3700_print(handle, printBuf);
Я проверил это как с функциями печати p3700_, так и с функциями p3300_, и обе они работают нормально. Несколько замечаний по устранению неполадок:
- Убедитесь, что в вашем коде есть
#include <printer.h>
- При сохранении файла шрифта выберите правильный тип принтера. Если вы используете вызовы функций
p3700
, сохраните принтер как тип "Verix 37xx". Если вы используете вызовыp3300
, сохраните как "Verix 33xx". - Если вы копируете пример кода, вам нужно убедиться, что ваш собственный размер шрифта равен 16x16, и что вы сохранили его в таблице шрифтов 1 (выберите таблицу шрифтов в том же диалоговом окне, где вы выбираете тип принтера). Если вы делаете что-то другое, вам нужно будет соответствующим образом изменить
p3700_select_font
. - Обязательно не забудьте загрузить шрифт в терминал.
- Проверьте возвращаемые значения функции. Например,
open
должен возвращать положительный номер дескриптора файла, аp3700_dnld_font_file
должен возвращать количество загруженных символов шрифта и т. д.
Здесь аналогичный вопрос и ответ относительно печати графики.
Если вы хотите придерживаться escape-последовательностей, я не уверен, откуда вы берете <ESC>m<s><t>
. 23230_Verix_V_Operating_system_programmers_Manual показывает:
<ESC>m<c><r1>...<rn>; Downloads fonts into memory.
а потом
<ESC>l<s><t>; Selects font table for printing and downloading.
Лично я стараюсь избегать escape-последовательностей для всего, кроме переключения двойной ширины, двойной высоты и инверсии.
set_font("")
. Как отмечалось выше, вы должны опубликовать новый вопрос, если вам нужна помощь по экранным шрифтам, чтобы сохранить SO в чистоте.
- person David; 10.08.2015
DBL_HEIGHT
печать будет удваивать высоту, есть ли у нас что-то, что вдвое по ширине печатает слово?
- person farshid; 07.10.2015
p3700_print(printerHandler, buff)
и write (printerHandler, buff, sizeof(buff))
?
- person Farshid.M; 19.04.2016
<ESC>m<c><r1>...<rn>
? где я должен написать имя шрифта моего принтера?
- person Farshid.M; 25.04.2016