我的产品是使用嵌入式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
答案 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