Verifone vx520 изменить шрифт принтера

Я хочу изменить шрифт принтера Verifone vx520. Я написал свою программу на C и использовал Font Designer Tool для создания шрифта принтера. Я использовал <ESC>m<s><t> Команда загрузить таблицу шрифтов, но я все еще не могу изменить шрифт принтера. Как мне это сделать?

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_, и они оба работают нормально. Несколько замечаний по устранению неполадок:

  1. Убедитесь, что есть #include <printer.h> в вашем коде
  2. При сохранении файла шрифта выберите правильный тип принтера. Если вы используете p3700 вызовы функций, сохранить как тип принтера "Verix 37xx". Если вы используете p3300 звонки, затем сохраните как "Verix 33xx".
  3. Если вы копируете пример кода, вам нужно убедиться, что ваш нестандартный размер шрифта составляет 16x16, и сохранить его в таблице шрифтов 1 (выберите таблицу шрифтов в том же диалоговом окне, где вы выбираете тип принтера). Если вы делаете что-то другое, вам нужно изменить p3700_select_font соответственно.
  4. Обязательно не забудьте скачать шрифт в терминал.
  5. Проверьте возвращаемые значения функции. Например, 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-последовательностей для всего, кроме переключения двойной ширины, двойной высоты и инверсии.

Другие вопросы по тегам