このセクションでは、開発者がもっとも頻繁に使用する可能性のある属性について説明します。ここに挙げた属性も含めて、頻繁に使用する属性では、PrintRequestAttributeを実装しています。印刷アプリケーションでは通常、印刷ジョブ全体の印刷方法を指定しますが、これはPrintRequestAttributeの役割に含まれるためです。
aset.add(OrientationRequested.REVERSE_PORTRAIT);OrientationRequestedオブジェクトは、設定可能な方向に対応するString値をカプセル化している、型保証された列挙です。これらの値は実際のIPPキーワードです。
一部の書式設定済みのドキュメントの種類(「Postscript」など)では、この属性カテゴリをサポートできないことがあります。書式設定済みのドキュメントの種類には、プリンタによって解釈されるプリンタ言語コマンドが埋め込まれており、これらのコマンドはクライアントの要求より優先されるためです。
クライアントは、次を呼び出すことによって、特定の印刷サービスでサポートされる方向の値を検出できます。
PrintService.getSupportedAttributeValues(OrientationRequested.class, ...).このメソッドによって、サポートされる値が列挙されたOrientationRequested型の配列が返されます。
aset.add(Copies(5));クライアントは、次を呼び出すことによって、印刷サービスでサポートされる印刷部数の範囲を検出できます。
PrintService.getSupportedAttributeValues(Copies.class, ...)このメソッドは、印刷サービスが処理できる印刷部数の範囲を表す整数値の範囲がカプセル化されたCopiesSupportedオブジェクトを返します。getSupportedAttributeValuesを呼び出すときに、Copiesの代わりにCopiesSupportedを指定すると、常にNULLが返されます。CopiesSupportedオブジェクトにはPrintRequestAttributeインタフェースが実装されていないため、クライアントが印刷要求にCopiesSupported属性を指定できないためです。
次のコード例は、印刷サービスが5部の印刷をサポートしているかどうかを検出し、5部の値を持つCopies属性を属性セットに追加する方法を示しています。
CopiesSupported copSupp = (CopiesSupported) service.getSupportedAttributeValues(Copies.class, null, null); if (copSupp != null && copSupp.contains(5)) { requestAttrSet.add(new Copies(5)); } else { ... }
Java印刷サービスAPIでは、IPP仕様内のオーバーロードされたMedia属性を反映する抽象クラスMediaの3つのサブクラスMediaSizeName、MediaName、およびMediaTrayが定義されます。すべてのMediaサブクラスには、Mediaカテゴリが割り当てられています。各サブクラスでは、Mediaカテゴリに対して、標準属性値を個別に定義しています。たとえば、MediaTrayオブジェクトは、ドキュメントをプリンタの手差しトレイからの用紙に印刷する必要があることを示すMANUALの値をMedia属性に指定できます。次のコード例では、Media属性を属性セットに追加しています。
aset.add(MediaTray.MANUAL);
Media属性の値は常にStringですが、この属性はオーバーロードされるため、その値によってこの属性が指す媒体の種類が決定されます。たとえば、IPPの定義済みの属性値のセットには、「a4」と「top-tray」の値が含まれています。Mediaが「a4」の値に設定されている場合、Media属性は用紙のサイズを指しますが、Mediaが「top-tray」に設定されている場合は給紙元を指します。String属性の値は、このようなさまざまな種類の媒体を指すことができるため、アプリケーションは、「company-letterhead」や「yellow letter paper」などの値を含むように属性セットを拡張できます。この方法でMedia属性を拡張するには、この媒体を使用して印刷するように構成された印刷サービスを、アプリケーション上で検出する必要があります。
ほとんどの場合、アプリケーションはMediaSizeNameまたはMediaTrayのどちらかを使用します。MediaSizeNameクラスには、媒体がサイズ別に列挙されています。MediaTrayクラスには、プリンタの用紙トレイが列挙されています。通常は、メイン・トレイと手差しトレイが含まれます。IPP 1.1の仕様では、媒体のサイズとトレイを同時に指定できません。たとえば、アプリケーションから、手差しトレイからのA4サイズの用紙を要求することはできません。今後のIPP仕様のリビジョンでは、同時に複数の種類の媒体を要求する方法が提供される可能性もあります。その場合は、JPS APIを拡張し、この変更を実装する予定です。
JPS APIにはまた、IPP属性ではない媒体関連の2つのその他の属性クラスMediaSizeとMediaPrintableAreaも含まれています。
MediaSize size = MediaSizeName.getMediaSizeForName(paper);
たとえば、5×7インチの用紙に対してサポートされる印刷可能領域を判定するには、アプリケーションは、このサイズの用紙に対応する媒体サイズ属性値を選択してから、印刷サービスに媒体サイズを照会する必要があります。
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(MediaSizeName.NA_5X7); MediaPrintableArea printableArea = (MediaPrintableArea)service. getSupportedAttributeValues(MediaPrintableArea.class, null, aset);戻り値は、その用紙サイズに対してプリンタがサポートできる最大印刷可能領域です。
aset.add(new Destination("file:c:\out.prn"));
aset.add(SheetCollate.COLLATED);
aset.add(Sides.DUPLEX);
aset.add(Fidelity.FIDELITY_TRUE);忠実性が重要な場合のために、Java印刷サービスAPIには、特定の印刷要求で何をサポートできるかをアプリケーションが正確に照会するための多くのツールが用意されています。PrintServiceインタフェースについては、各照会メソッドを参照してください。