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

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


person farshid    schedule 29.04.2015    source источник


Ответы (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-последовательностей для всего, кроме переключения двойной ширины, двойной высоты и инверсии.

person David    schedule 29.04.2015
comment
большое спасибо за ваш ответ и редактирование. не могли бы вы помочь мне, как изменить шрифт принтера? с помощью set_font() или с помощью ‹*PTRFNT› или ‹ESC›m‹s›‹t›? и как загрузить шрифт принтера в POS? - person farshid; 30.04.2015
comment
Извините - я только что сделал этот проект, и поэтому шрифты SCREEN были на уме, но я вижу, что вы ясно спросили о шрифтах PRINTER. Я обновил ответ, чтобы он касался шрифтов ПРИНТЕРА. Если вы нашли ответ на ЭКРАННЫЙ шрифт полезным, задайте новый вопрос об экранных шрифтах, и я повторно опубликую его (это сделает НАМНОГО более аккуратным и аккуратным). Кроме того, пожалуйста, дайте мне знать, работает ли это решение для вас или нет. - person David; 30.04.2015
comment
как я могу использовать p3700_dnld_font_file на verix vx520? vx520 не может прочитать эту функцию - person farshid; 06.05.2015
comment
@farshid: я только что проверил это на Vx520, и все сработало отлично. Вы включаете принтер.h? Это должно быть в ваших библиотеках ACT. Для меня это C:\eVoAps\ACT2000\1.9.0\Include ТАКЖЕ, обратите внимание, что я обновил ответ - посмотрите, поможет ли вам новая информация вообще. - person David; 07.05.2015
comment
Я изменил шрифт принтера, но когда я печатаю, в ответ мой дисплейный шрифт показывает другую вещь и не использует правильный шрифт дисплея для отображения сообщения на экране. вы знаете, что я могу сделать для этого? большое спасибо за ваши ответы и рекомендации. - person farshid; 09.08.2015
comment
Этот код не должен иметь ничего общего с вашим экранным шрифтом. Экранные шрифты используют API set_font(""). Как отмечалось выше, вы должны опубликовать новый вопрос, если вам нужна помощь по экранным шрифтам, чтобы сохранить SO в чистоте. - person David; 10.08.2015
comment
как уменьшить ширину печатного шрифта? например, с DBL_HEIGHT печать будет удваивать высоту, есть ли у нас что-то, что вдвое по ширине печатает слово? - person farshid; 07.10.2015
comment
вы можете сделать двойную высоту, чтобы сделать его выше, и двойную ширину, чтобы сделать его шире, но если вы хотите сделать его меньше, вам нужно загрузить новый шрифт. - person David; 07.10.2015
comment
могу ли я использовать два разных шрифта на одной странице (например, первое слово с шрифтом1 и второе слово с шрифтом2), как я могу это сделать? я использую «p3700_dnld_font_file» и «p3700_select_font», он просто загружает и печатает второй загруженный файл шрифта. - person farshid; 15.10.2015
comment
я использую шрифт 8x14, но они не сливаются друг с другом, и между строками есть пробел, хотя ширина - полный пиксель - person farshid; 18.10.2015
comment
Вы знаете, в чем разница между p3700_print(printerHandler, buff) и write (printerHandler, buff, sizeof(buff))? - person Farshid.M; 19.04.2016
comment
Нет, хотя я не удивлюсь, если основное отличие будет только в том, что вам не нужно передавать в него размер баффа. Также может быть некоторая инициализация или что-то еще, что происходит за кулисами, - person David; 19.04.2016
comment
как работают escape-последовательности <ESC>m<c><r1>...<rn>? где я должен написать имя шрифта моего принтера? - person Farshid.M; 25.04.2016
comment
Извините, я не использую escape-последовательности, так что я действительно не знаю. - person David; 25.04.2016
comment
можете ли вы ответить на этот вопрос, пожалуйста: напечатать связанный символ - person Farshid.M; 16.05.2016