6

私の要件は、クラウドベースのサービスを使用せずに 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」印刷プロトコルの問題は、プリンターからステータスを取得する方法がないことです。

それで、私は最近、プリンターからステータスを取得できるIPPLDRについて読みました。

Androidを使用してそれらを実装する方法を見つけようとしましたが、成功しませんでした。私はすでにこの回答を調べましたが、解決策を見つけることができませんでした。

AndroidでIPPまたはLDRを実装する方法について誰かが私を案内してくれると本当に助かります。

前もって感謝します!

4

1 に答える 1

1

IPP の一般的な使用法:

  1. 印刷ジョブが送信されると、プリンターはジョブ ID を返します。
  2. 現在のジョブ状態を取得するには、Get-Job-Attributes-Operation を使用します
  3. 属性 job-state が 9 (「完了」を意味する) になるまで待ちます。

確認する必要がある他の最終ジョブ状態があります: 中止またはキャンセル

プロトタイピングには、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
}

2020 年 5 月更新

ipp プロトコルの kotlin 実装を公開しました。

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

送信したら、印刷ジョブが終了するまで待つことができます。job.waitForTermination()

于 2015-05-11T07:00:50.703 に答える