Javaで特定のIPPプリンターに印刷する方法はありますか?私が見つけたすべてのサンプルコードとチュートリアルは、次のようなものを使用して、特定のタイプのドキュメントを印刷する方法に焦点を当てています。
DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A4);
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(flavor, aset);
if (pservices.length > 0) {
DocPrintJob pj = pservices[0].createPrintJob();
try {
FileInputStream fis = new FileInputStream("test.ps");
Doc doc = new SimpleDoc(fis, flavor, null);
pj.print(doc, aset);
} catch (FileNotFoundException fe) {
} catch (PrintException e) {
}
}
このスニペットは、ドキュメントを印刷できる最初に見つかったプリンターに印刷するだけです。私の場合、URIでプリンターを検索したいのですが、PrintServiceLookup
これをサポートしていないようです。PrintServiceAttributeSet
の代わりにPrintRequestAttributeSet
、を使用して属性を追加しようとしましたPrinterURI
が、プリンターが返されません。ルックアップサービスは、そのURIを持つプリンターを探すのではなく、宛先URIを変更できるプリンターを探しているのではないかと思います。
PrintService
最後の手段として、によって返されるすべてのを列挙することを考えましlookupPrintServices
たが、URIはどの属性にも含まれていません。プリンター名はありますが、URIが必要です。
背景として、私のWebアプリは、現在のユーザーに基づいて、特定のプリンターにバーコードを印刷する必要があります。各ユーザーは、CUPSサーバー上のプリンターを指すプリンターURIに関連付けられています。私が持っている情報はプリンターURIだけであり、プリンター名をURIまたはURIのサブストリングと一致するように制限することはできません。
編集:少し明確にするために、データをレンダリングする必要はありません。blobを特定のプリンターにコピーするだけです。私が理解できない部分は、IPPURIによってプリンターを識別する方法です。