2011-04-13 72 views
0

嘿, 我需要在热发票打印机 打印发票我写了这个程序来做到这一点(见下文) 但是,我需要向打印机发送字符定位的原因值范围为0x80 - 0x102,但我发现它是不可能的,因为我不能发送一个字节这个值(这是无符号字节在java中不存在)java的发票打印CommPortIdentifier

有关如何将此值添加到字符串的任何想法将被发送到打印机? 感谢

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"); 
    } 
} 

回答

1

当然,你可以用十六进制值0x80发送一个字节。

,取值范围在Java byte是:

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

您可以在16进制发送值与\u逃逸,如:

print("\u0080"); // sends 0x80 to your thermal printer 
0

您可以在源写这样的性格使用Unicode转义,如

print("Eighty: \u0080\n"); 
+0

谢谢,但这似乎并没有做到这一点..我得到了我想要的信件,但补充了第二个字母,因为无符号字节类型的长度变化以及Unicode长度 – yaniv 2011-04-13 12:24:16

+2

您的函数使用getBytes()从字符串中获取数据,采用缺省编码,对于你感兴趣的字符显然是多字节的。你应该使用带有编码名称的getBytes()版本,并使用正确编码这些字符的东西 - 即“ISO-8859- 1'。 – 2011-04-13 12:50:50

+0

嘿,谢谢欧内斯特,但是看起来情节浓厚,我使用的打印机具有专有字符集。所以当我看到它时,我需要执行其中的一个,要么发送一个ascii而不是unicode(我找不到这样做的方式)或实现新的字符集(在这种情况下,我可以使用一些帮助:-) ),任何想法(ps我真的很感谢你的帮助,非常感谢:-)) – yaniv 2011-04-14 10:45:19