【问题标题】:Sending ESC/POS command to printer using serial port使用串口向打印机发送 ESC/POS 命令
【发布时间】:2017-08-01 11:51:19
【问题描述】:

我有一台热敏打印机。我正在重新编写 SDK。 我正在使用 pi4j 库通过串口发送 ESC/POS 命令。 我的问题是我不知道如何将整数发送到打印机,因为 pi4j 库不接受整数

这是我的功能

public void printAndFeed(String str, int feed) throws IOException {
    //escInit();
    serial.write(str);
    //output extra paper          ESC d n
    serial.write((char) 0x1B);
    serial.write("d");
    serial.write(feed);
}

错误在这里

serial.write(feed);

以及命令参考:

ESC d n [名称] 打印并输入 n 行 [格式] ASCII ESC d n Hex 1B 64 n 十进制 27 100 n [范围] 0≤n≤255 [说明] 打印数据 打印缓冲区并馈送 n 行。 [注释] •此命令设置 打印起始位置到行首。 •此命令 不影响 ESC 2 或 ESC 3 设置的行距。 •最大 进纸量为 1016 mm {40"}。如果进纸安装座(n×行 间距)超过 1016 毫米 {40"},打印机进纸 纸张只有 1016 mm {40"}。[参考] ESC 2(默认行 间距),ESC 3(设置行间距)

pi4j 参考 http://pi4j.com/apidocs/com/pi4j/io/ser ...电子字符...-

我试过这个: 代码可以接受:

            char[] F = new char[]{0x1B,'d',11};
            serial.write(F);

但它不接受这个

            char[] F = new char[]{0x1B,'d',feed};
            printer.write(F);

【问题讨论】:

  • write() 方法是否有接受byte[] 的版本?
  • 我同意@Yazan 所说的:您应该发送字节(通过OutputStream 类型的接口)而不是字符/字符串(通过Writer)。您发布到 pi4j 参考的链接已损坏,所以我不知道这是否可能。
  • 是的,作者接受 byte[],这是工作链接:pi4j.com/apidocs/com/pi4j/io/serial/SerialDataWriter.html
  • @Yazan 我试过字节,没有错误。你这个代码是正确的吗?字节[] B1=新字节[] {0x1B,'d',(byte)feed};打印机.write(B1);
  • 是的,Ammar,我认为这就是您发送命令所需的方式,只需确保“d”正确转换为字节,否则我建议使用 "d".getBytes() 并将其插入您的 B1数组

标签: java raspberry-pi


【解决方案1】:

@Yazan,@Mike Harris 非常感谢您的帮助。 我按照他们的建议将所有整数转换为字节 代码是(如果有人遇到这个并需要帮助)

int feed=11; byte [] B=new byte[] {0x1B,'d',(byte)feed}; printer.write(B);

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 2015-02-18
    • 2020-11-16
    • 2015-08-20
    • 2017-10-21
    • 2020-05-07
    • 2011-02-19
    • 2017-05-18
    相关资源
    最近更新 更多