【发布时间】:2013-03-20 01:11:19
【问题描述】:
我正在为具有内置行式打印机的 Android 设备开发一个应用程序。我必须与这台打印机交互并使用它来打印收据上的详细信息,然后用裁纸器自动切割该收据。我在其中看到了一些 ESC 命令,但我不知道如何执行这些 ESC 命令。
我有关于卡西欧设备打印机的三个主要问题:
1.我使用了内置打印机的打印代码,但是打印后切刀没有激活
BuildinEx840 ex840 = new BuildinEx840();
int response = ex840.open();
System.out.println("ex840 open:" + response);
byte[] set = {
'N', 'A', 'R', 'E', 'S', 'H', 'S', 'H', 'A', 'R', 'M', 'A', (byte) 0x0d, (byte) 0x0a
};
try {
ex840.write(set);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
response = ex840.getEndStatus();
System.out.println("getEndStatus:" + response);
response = ex840.initCutter();
ex840.close();
System.out.println("initCutter:" + response);
} catch (Exception e) {
e.printStackTrace();
}
2。我不知道如何在 android 中向打印机发送 ESC 命令
下面有很多命令
ESC FF DataPrint,
[code] <1B>H<OC>H,
[Function] Print all the data in the print area collectively.
我们如何通过编程在android中执行这些ESC命令??
3.我不知道如何按要求的格式打印收据
有一些 ESC 命令可用于提供左右边距和一些其他命令。那么如何以某种格式打印数据,并可以更改文本的大小以及要打印的文本的其他一些设置。
感谢任何帮助。
【问题讨论】:
-
发送 ESC/POS 命令的常规方法是使用
ex840.write方法,您只需将它们作为章程发送,因此在您的 ESC FF 示例中,您将发送(char)27 + (char)12后跟要打印的文本(27 = 1B 十六进制,因此 [code] 部分告诉您发送 H,其中 H 表示十六进制)。所以你的集合会变成byte[] set={(char)27, (char)12, 'N','A' ...然后你可以把这些命令堆叠起来,例如ESC FF ESC nn Your Data获取您需要的格式。免责声明:我没有使用这款 Casio 打印机或 Android 的 ESC/POS,但这就是它在我使用过的所有其他语言/打印机中的工作方式。 -
对于 3.:嗯,您必须深入挖掘您的需求/要求,并通过 ESC 命令文档找到适合所需/所需格式的转义序列。这些必须合并到要打印的文本中,以便生成的打印输出包含按要求格式化的文本。
-
对于 1. 在切割器未切割后查看响应包含的内容会很有用。另外,我有 99% 的把握可以发送一个转义序列来剪纸。我会试试的。如果切割机发出“失败”的信号,你会怎么做?您只能发送命令“cut!”,您可能可以使用转义序列来执行此操作。
-
@TheBlastOne 感谢您的回复。当我使用上面的代码时,它只是在收据上打印文本,但切刀不工作。 ESC 命令也可用,但我不知道如何应用它们。有枚举类型,我不知道如何应用于剪纸类型的方法。
-
我觉得奇怪的是你调用了 initCutter 但没有进行剪切的方法。 (可能是initCutter不切而是init,需要调用不同的方法来切。)
标签: java android escaping point-of-sale thermal-printer