Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > печать_на_чековый_принтер_из_Java


Автор: Tireks 18.1.2014, 23:33
Здравствуйте.

Есть термопринтер vkp80, на который необходимо выводить печать через com порт.
Вот мануал по коммандам принтера: http://files.mail.ru/C153ED9FAAC14C1C98AF43CB3F2108E3

в мануле есть пример печати:

{set notch distance}
$1D $E7 $00 $00
{print text}
TICKET 1 $0A FIRST LINE $0A SECOND LINE $0A
{cut aligment}
$1D $F8
{cut}
$1B $69

Вот кусок кода, спомощью которого подключаюсь к принтеру и пвтаюсь печатать:

Код

import jssc.SerialPort;
    import jssc.SerialPortException;

    public class Test {

    public static void main(String[] args) {

    SerialPort serialPort = new SerialPort("/dev/ttyS0");

    try {

    serialPort.openPort();

        serialPort.setParams(SerialPort.BAUDRATE_19200,
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);

    serialPort.writeBytes("TICKET 1, 0x0A, FIRST LINE, 0x0A, SECOND LINE, 0x0A".getBytes());

    serialPort.closePort();
    }
    catch (SerialPortException ex) {
    System.out.println(ex);
    }
    }
    }



Насколько я понял принтер получает комманды виде шестнадцетиричного кода.
В моём случае принтер печатает сплошником строчку TICKET 1, 0x0A, FIRST LINE, 0x0A, SECOND LINE, 0x0A без форматирования.

Может, кто сталкивался с подобной задачей? Подскажите, как послать в принтер набор шестнадцетиричных комад, чтобы принтер в свою очередь правильно их интерпретировал.
Кстати принер понимает ещё ASCII кодировку. 


Автор: Mirkes 21.1.2014, 19:59
Цитата(Tireks @  18.1.2014,  23:33 Найти цитируемый пост)
 serialPort.writeBytes("TICKET 1, 0x0A, FIRST LINE, 0x0A, SECOND LINE, 0x0A".getBytes());

Вообще-то это гениально! Вы ему сунули текстовую строку, он ее напечатал.
Если нужно форматирование, то 0x0A должно быть байтом а не элементом текстовой строки smile
Думаю можно так
Код

serialPort.writeBytes("TICKET 1 \n FIRST LINE  \n SECOND LINE \n".getBytes());

Скорее всего запятые не нужны, но тут я могу ошибаться.
А вот конец строки нужно передавать кодом, а не текстовым представлением кода smile

Автор: Tireks 2.2.2014, 15:26

Да, понял. ВОт так работает:
Код

byte[] b = new byte[]{0x0A};
serialPort.writeBytes(b);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)