用Java读取usb打印机状态

时间:2013-09-19 10:05:38

标签: java windows printing usb raw-data

我正在使用通过USB连接的POS打印机在Windows 7上开发Java程序。我开始使用普通的PrintJob使用打印线轴,但这还不够。我需要控制比驱动程序更多的东西。

所以我用我自己编写的所有命令发送原始数据。我已经实现了这一点,感谢 norbi771 在这里的回答Print Zebra ZM400 using Java。所以我在网络上共享了打印机,我正在创建一个OutputStream来将原始数据发送到\ localhost \ myprinter

这很好用,当我尝试打开InputStream来读取打印机状态时,我的问题出现了。此模型有一些命令可以询问某些状态,打印机可以立即回答。手册说:

只要收到数据序列,就会发送状态。打印机发送由一字节数据表示的当前状态。打印机在不确认主机是否可以接收数据的情况下发送状态。

然后,我能够发送原始数据(我使用相同的模式和URL进行打印),但是当我尝试读取状态时,我正在设置FileNotFoundException。 java.io.FileNotFoundException:\ localhost \ myprinter,(系统找不到指定的文件)。怎么可能找不到输入,但输出是的?

有人知道我怎么能读取打印机发送的信息?到目前为止,这是我的代码。我每隔5秒在一个线程中执行一次,因此不是“未准备好/已连接”的打印机。我甚至在创建InputStream之前尝试睡觉,但没有任何作用。有没有其他方法可以连接阅读它?

FileOutputStream os; FileInputStream is;
PrintStream ps = null; InputStreamReader reader = null;
char[] askStatus = {0x10, 0x04, 0x02};
String port = "\\\\localhost\\myprinter";
try {
    os = new FileOutputStream(port);
    ps = new PrintStream(os);

    ps.print(askStatus);
    ps.flush();
    //Everything fine until here
    //sleep(1000);

    is = new FileInputStream(port); //This line throws the Exception
    reader = new InputStreamReader(is);
    if (reader.ready()) {
    int status = reader.read();
    System.out.println("Status: " + Integer.toBinaryString(status));
    }
} catch (Ex...) {...}

1 个答案:

答案 0 :(得分:0)

您可能需要使用USB访问打印机,您需要JUSB之类的内容。我知道windows实现有一些使用libusb的限制。

如果你很幸运,你将能够使用它来请求状态。如果不是,您将不得不使用USB Class打印机的GET_PORT_STATUS请求来获取this page中所述的状态。

我还没有找到一个完整的例子。