使用打印机命令语言在Apex3上打印字符串

时间:2019-07-27 15:46:26

标签: android thermal-printer

如何使用打印机命令语言或SDK在Apex3上打印字符串?

我为Android应用程序创建了一个库,以在移动热敏打印机上打印位图图像: 使用适当的SDK的Apex3、3nStar,PR3,Bixolon,Sewoo LK P30。 它工作正常,但速度很慢,每张30厘米长的票证需要20到40秒才能打印(取决于打印机的类型)。 对于3nStar和Apex3,我开始进行改进以加快打印速度。

对于3nStar,我开发了一个类,该类可打印标题徽标和带有西班牙语字符的带格式文本。 (票证不同部分的对齐方式和字体不同) 因此,该票证看起来与位图图像非常相似,但是打印时间仅为6秒。 现在,我必须使用Apex3进行相同的操作。在这里我被卡住了。

我如何在3nStar上处理字符串:

我发送outputStream字节,这些字节是打印机要执行的命令。

outputStream.write(some_bytes)

第一个命令始终是

{0x1b, 0x74, 40} //Esc t ( -- [ISO8859-15 (Latin9)]

打印西班牙语字符。

然后循环使用n个字符串:

我选择一种字体

{0x1B, 0x21, 0x00}//Esc ! 0 -- 0 is normal, 8 is bold etc.

更改最后一个字节时,我将打印不同的字体:普通,粗体,两种高度,两种宽度以及组合字体。

接下来我选择一个路线

{0x1b, 0x61, 48} //Esc a 48 for left, 49 for center, 50 for right

然后,我使用ISO_8859_1将字符串转换为字节,以打印西班牙语字符并写入outputStream。

outputStream.write(messageString.getBytes(StandardCharsets.ISO_8859_1))

要发送的最后一个字节是

{0x0a} // Move on next line

上述方法不适用于Apex3,我也无法使用 http://www.old.adtech.pl/upload/Extech_Printer_Command_Language%20Rev_H_05062009.pdf 即使在该书的第1页上写了适合Apex3的内容。 我想我错过了一些东西,我开始看看如何使用Android_SDK_ESC_V1.01.17.01PRO.jar的某些SDK功能来做到这一点 但是我更喜欢直接写字节。

1 个答案:

答案 0 :(得分:0)

我从中发现的答案 manual

与我为3nStar描述的方法的短暂差异是:

1)在打印之前设置一个字符集

ESC F 1 //Esc t - for 3nStar

2)例如,为文本设置字体

ESC K 1 3 CR //ESC F 1 - for 3nStar

3)发送一行对齐的文字

对于3nStar,我可以在发送文本之前使用对齐命令,例如

ESC 1 49 //Centering

但是对于Apex3,我必须知道取决于字体类型的行长,还取决于打印字符串的长度, 然后我得到

freeSpace = (lineLength - printingString)

并在一行的开头设置空格(右对齐),  最后(左对齐)或将它们居中(居中)。

因此,对于两种类型的打印机,我使用相同的逻辑,仅在3个地方有所不同。  由于实际代码包括几百行代码的几类,因此简化了说明。