Печать счета-фактуры Java CommPortIdentifier с проблемой неподписанных байтов - PullRequest
0 голосов
/ 13 апреля 2011

Эй, мне нужно напечатать счета-фактуры на термопринтере. Я написал эту программу, чтобы сделать это (см. Ниже). Однако по причинам локализации мне нужно отправить на принтер символы со значениями в диапазоне 0x80 - 0x102, но я нахожуэто невозможно, поскольку я не могу отправить байт с этими значениями (это беззнаковые байты, которых нет в java)

Есть идеи, как добавить эти значения в строку, которая будет отправлена ​​на принтер ???Спасибо

import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.UnsupportedCommOperationException;
import java.io.IOException;
import java.io.OutputStream;

public class SimpleWrite {
    static CommPortIdentifier portId;
    static SerialPort serialPort;
    static OutputStream outputStream;

        public static void print(String messageString){
        try {
            portId = CommPortIdentifier.getPortIdentifier( "COM1");
            serialPort = (SerialPort) portId.open("SimpleWrite", 2000);
            outputStream = serialPort.getOutputStream();
            serialPort.setSerialPortParams( 9600,
                                            SerialPort.DATABITS_8,
                                            SerialPort.STOPBITS_1,
                                            SerialPort.PARITY_NONE);
            outputStream.write(messageString.getBytes());
            serialPort.close();
        }catch (IOException e) {                        System.out.println(e.getMessage());
        }catch (PortInUseException e) {                 System.out.println(e.getMessage());
        }catch (UnsupportedCommOperationException e) {  System.out.println(e.getMessage());
        }catch (NoSuchPortException e) {                System.out.println(e.getMessage());}
    }

    public static void main(String[] args) throws IOException{
        print("Hello , world \n\r");
    }
}

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Конечно, вы можете отправить байт с шестнадцатеричным значением 0x80.

Диапазон значений для byte в Java:

-128 .. 127   (in decimal)
0x00 .. 0xff  (in hexadecimal)

Вы можете отправлять значения в шестнадцатеричном формате с помощью экранирования \u, например:

print("\u0080");   // sends 0x80 to your thermal printer
0 голосов
/ 13 апреля 2011

Вы можете написать такой символ в своем источнике, используя escape-код Unicode, например

print("Eighty: \u0080\n");
...