【发布时间】: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