このセクションでは、開発者がもっとも頻繁に使用する可能性のある属性について説明します。ここに挙げた属性も含めて、頻繁に使用する属性では、PrintRequestAttribute を実装しています。印刷アプリケーションでは通常、印刷ジョブ全体の印刷方法を指定しますが、これは PrintRequestAttribute の機能に含まれるためです。
aset.add(OrientationRequested.REVERSE_PORTRAIT);OrientationRequested オブジェクトは、設定可能な方向に対応する String 値をカプセル化している、型保証された列挙です。これらの 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 インタフェースについては、各照会メソッドを参照してください。