gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:55 52 4
gpt4 key购买 nike

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

我已经能够使用“原始”打印协议(protocol) 实现它,即通过简单地将文件发送到端口9100 的打印机IP 地址。下面是代码 fragment :

 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();

“原始”打印协议(protocol)的问题是无法从打印机取回状态。

所以,我最近读到有关 IPPLDR 的内容,我们可以使用它们从打印机获取状态。

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

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

提前致谢!

最佳答案

IPP 的一般用法:

  1. 提交打印作业后,打印机返回作业 ID
  2. 使用 Get-Job-Attributes-Operation 获取当前作业状态
  3. 等到属性 job-state 等于 9(表示“完成”)

您还应该检查其他最终作业状态:已中止或已取消

对于原型(prototype)设计,您可以使用 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
}

更新 5/2020

我已经发布了 ipp 协议(protocol)的 kotlin 实现。

https://github.com/gmuth/ipp-client-kotlin

提交后,您可以等待打印作业终止:job.waitForTermination()

关于android - 使用 IPP(Internet 打印协议(protocol))或 LPR(远程行式打印机)在 android 中打印文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30116008/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com