1

我正在通过 Windows 7 开发一个 Java 程序,它使用通过 USB 连接的 POS 打印机。我从使用打印假脱机的普通 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...) {...}
4

1 回答 1

0

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

如果幸运的话,您将能够使用它来请求状态。如果不是,您将不得不使用 USB 类打印机的 GET_PORT_STATUS 请求来获取本页中解释的状态。

我还没有找到一个完整的工作示例。

于 2013-11-11T15:02:47.773 回答