2016-10-25 100 views
0

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

我有代码可以在网络上找到可用的打印机并返回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(); 

本地“写”方法创建从Java字符串以UTF-8字节数组并写入字节到流中。请注意,对于这些字符,UTF-8是ANSI

回答

0

首先,您确定打印机说PJL和PCL? 一些特殊的打印机有自己的语言。第二, 我认为你的PJL有一个额外的换行符。 似乎第一个PJL命令没有PJL转义符的换行符。

来自HP PJL参考手册的样本PJL。

 
%–[email protected] 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 
~ 
%–[email protected] 
@PJL EOJ 
%–12345X 

PJL reference