Как добавить пользовательский набор символов в термопринтер с помощью Escape-последовательности?

Я хочу добавить набор символов хинди в свой термопринтер (модель Gprinter: GP-U80030I), используя управляющую последовательность (ESC/POS). Я прочитал Escape-команды из руководства по программе. В какой последовательности я должен посылать команды на принтер. Используемые команды:

ESC % n
ESC & y c1 c2 [x1 d1...d(y X x1)]...[xk d1...d(y X xk)]
ESC ? n

Я отправляю значения ascii на принтер (например, ESC - 27, % - 38 и т. д.).


person Vijay Maradkar    schedule 07.11.2016    source источник


Ответы (1)


Начните с чего-то вроде этого:

 private void defineChars() {
        int[] cmd = new int[5 + 37] ; // already set to 0
        cmd[0] = 0x1b; // ESC
        cmd[1] = 0x26; // &
        cmd[2] = 0x03; // y - height
        cmd[3] = 'A'; // starting char to define, c1, 'A' ..
        cmd[4] = 'A'; // c2, ending character, in this case we define only one
        cmd[5] = 12; // x1, dots in horizontal direction

        int shift = 6;

        // fill the matrix as you wish..
        // 'A' -> black square
        for (int i = 0; i < 36; i++) {
            cmd[i + shift] = 0xff;
        }
        sendCommand(cmd);

    }

Не забудьте впоследствии активировать пользовательские шрифты с помощью команды:

private void setCustomChars(boolean set) {
        //select user defined chars
        sendCommand(0x1B, 0x25, (set) ? 1 : 0);
    }

Теперь, когда вы отправляете символ «A» на принтер, он будет печатать ваш пользовательский символ (черный квадрат, потому что все биты установлены на 1).

person kometonja    schedule 17.11.2016
comment
Я надеюсь, что это поможет мне печатать арабские символы, но я боюсь, что английские символы, которые сейчас печатаются отлично, пострадают после того, как я установлю или изменю код символа. это повлияет? - person Naz141; 21.03.2018
comment
В этом случае символ «А» будет перезаписан другим символом, да. Вы можете заменить специальные символы, которые вы не будете использовать, например, в диапазоне 33-64. Или вы можете использовать функцию defineArabChars() и resetArabChars() и переключать свои кодировки при необходимости. - person kometonja; 21.03.2018