从嵌入式android打印到USB或预先选择的网络打印机

时间:2016-10-25 13:12:31

标签: android printing embedded

我的产品是使用嵌入式Android的工业测量仪器。仪器需要将结果打印到预先选择的网络打印机或USB打印机。仪器操作员不能承受标准的Android打印机界面,并且不接受云打印。我认为这种情况在嵌入式Android产品(例如POS热敏打印机)中相当普遍

我有代码可以在网络上找到可用的打印机并返回IP地址和端口号,我可以将纯ANSI文本写入打印机。但是,Unicode字符无法正确打印。还会打印一些其他非ANSI字符(一些欧洲字母变体)。我相信这是因为默认的“符号集”。

我的期望是我将使用PCL或IPP来控制打印机。所有以“@PCL”开头的文本都以纯文本格式打印。所有以ESC开头的文本都没有打印,但我没有任何理由相信这些命令正在被处理。

搜索'网页,我看到这个问题已被问过几次,但没有得到很好的回答。

我想知道我的Socket / InputStream / BufferedReader用法是否有问题。

有没有人为此用途设计过解决方案?

final char ESC = 0x1b;
final String UEL = ESC + "%-12345X";
final String CRLF = "\r\n";
Socket socket = new Socket(printer.getIpAddr(), 9100);
InputStream inputStream = socket.getInputStream();
DataOutputStream oStream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
write(oStream, UEL + "@PJL" + "\r\n");
write(oStream, "@PJL COMMENT some comments"  + CRLF);
write(oStream, "@PJL ECHO RRE" + CRLF);
write(oStream, UEL + "\r\n");
oStream.flush();

BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
int count = bufferedInputStream.available();

本地'write'方法从Java String创建一个UTF-8字节数组,并将字节写入流。请注意,对于这些字符,UTF-8是ANSI

1 个答案:

答案 0 :(得分:1)

首先,你确定打印机会说PJL和PCL吗? 一些特殊的打印机有自己的语言。

其次, 我认为你的PJL有一个额外的换行符。 似乎第一个PJL命令没有来自PJL逃逸的新行。

HP PJL参考手册中的PJL样本。

%–12345X@PJL COMMENT *Start Job* 
@PJL JOB NAME = "Sample Job #1" 
@PJL SET COPIES = 3 
@PJL SET RET = OFF 
@PJL ENTER LANGUAGE = PCL 
E. . . . PCL job . . . .E
~
%–12345X@PJL 
@PJL EOJ
%–12345X

PJL reference