使用IPP(Internet打印协议)或LPR(行式打印机远程)在android中打印文件

时间:2015-05-08 04:52:45

标签: android printing ipp-protocol

我的要求是在不使用任何基于云的服务的情况下从Android设备打印文件。

我已经能够使用" Raw"来实现它。打印协议,只需将文件发送到打印机的端口 9100 的IP地址即可。以下是代码段:

 client = new Socket(ip,port); //Port is 9100
 byte[] mybytearray = new byte[(int) file.length()]; //create a byte array to file
 fileInputStream = new FileInputStream(file);
 bufferedInputStream = new BufferedInputStream(fileInputStream);
 bufferedInputStream.read(mybytearray, 0, mybytearray.length); //read the file
 outputStream = client.getOutputStream();
 outputStream.write(mybytearray, 0, mybytearray.length); //write file to the output stream byte by byte
 outputStream.flush();
 bufferedInputStream.close();
 outputStream.close();

" Raw"的问题打印协议是无法从打印机返回状态。

所以,我最近阅读了 IPP LDR ,我们可以从打印机上获取状态。

我试图找到一种使用android实现它们的方法,但没有成功。我已经通过了this answer,但没有找到我的解决方案。

如果有人可以指导我如何在android中实现IPP或LDR,那将会非常有帮助。

提前致谢!

2 个答案:

答案 0 :(得分:1)

IPP的一般用法:

  1. 提交打印作业后,打印机将返回作业ID
  2. 使用Get-Job-Attributes-Operation获取当前作业状态
  3. 等到属性作业状态等于9(表示“已完成”)
  4. 您应该检查其他最终工作状态:中止或取消

    对于原型设计,您可以使用ipptool(本机用于桌面):

    # ipptool -t -d job=482 ipp://192.168.2.113/ipp job.ipp
    {
    OPERATION Get-Job-Attributes
    GROUP operation-attributes-tag
    ATTR charset attributes-charset utf-8
    ATTR language attributes-natural-language en
    ATTR uri printer-uri $uri
    ATTR integer job-id $job
    }
    

答案 1 :(得分:0)

您可以使用任何实现本地打印机协议的Android-PrintService。您不必在应用程序中实施IPP。 不幸的是,现有的Service-Apps似乎并不完美。设置和打印都不像我期望的那样工作(与iOS打印相比)。

如果您仍想要实施IPP,请阅读此question's answer