javax.print.attribute.standard
パッケージは、Java Print Service (JPS) APIのすべての標準属性を列挙します。 標準属性のほとんどは、IETF IPP (Internet Printing Protocol) 1.1仕様に定義されている属性です。 つまり、パッケージjavax.print.attribute.standard
で定義されている各IPP準拠の属性クラスはIPP属性カテゴリに対応し、(getName
によって返される)という名前はカテゴリの実際のIPP名です。 また、多くのクラス名は、Javaプログラミング言語のコーディング規則で許可される範囲で、できるかぎり細かくIPP名を反映しています。 さらに、カテゴリに定義される値は、IPPの値と同じです。 各属性カテゴリのIPPとの互換性については、API仕様を参照してください。
このセクションでは、開発者がもっとも頻繁に使用する可能性のある属性について説明します。 ここにリストされている属性を含め、一般的に使用される属性は、PrintRequestAttribute
を実装します。これは、印刷アプリケーションでは通常、PrintRequestAttribute
のロールである印刷ジョブ全体の印刷方法が指定されるためです。
The OrientationRequested
属性カテゴリを使用すると、用紙上のイメージングの方向を指定できます。 指定可能な属性値は次のとおりです: PORTRAIT
, LANDSCAPE
, REVERSE_PORTRAIT
およびREVERSE_LANDSCAPE
。 通常、OrientationRequested.PORTRAIT
はデフォルト値です。 このコード・スニペットは、セットへのOrientationRequested
属性の追加を示しています:
aset.add(OrientationRequested.REVERSE_PORTRAIT);
The OrientationRequested
オブジェクトは、可能な方向に対応するString
値をカプセル化する型セーフ列挙です。 これらの値は実際のIPPキーワードです。
一部の書式設定済みのドキュメントの種類(「Postscript」など)では、この属性カテゴリをサポートできないことがあります。書式設定済みのドキュメントの種類には、プリンタによって解釈されるプリンタ言語コマンドが埋め込まれており、これらのコマンドはクライアントの要求より優先されるためです。
Clientsは、PrintService.getSupportedAttributeValues(OrientationRequested.class, ...)
をコールして、特定の印刷サービスでサポートされる方向の値を検出できます。 このメソッドは、サポートされている値を列挙するOrientationRequested
型の配列を返します。
The Copies
属性カテゴリでは、印刷するコピー数を指定できます。 Copies
クラスは、リクエストされたコピー数を表す整数をカプセル化します。 このコード・スニペットでは、Copies
属性を5つのコピーに設定して属性セットに追加する方法を示します:
aset.add(Copies(5));
クライアントは、PrintService.getSupportedAttributeValues(Copies.class, ...)
をコールして、印刷サービスがサポートするコピーの範囲を検出できます。
このメソッドは、CopiesSupported
オブジェクトを返します。このオブジェクトは、サービスが処理できるコピーの範囲を表す整数値範囲をカプセル化します。 CopiesSupported
オブジェクトはPrintRequestAttribute
インタフェースを実装しないため、クライアントが印刷リクエストでCopiesSupported
属性を指定できないため、Copies
のかわりにCopiesSupported
を使用してgetSupportedAttributeValues
をコールすると、常にnullが返されます。
このコード・サンプルは、印刷サービスが5つのコピーの印刷をサポートしているかどうかを検出し、値5のコピーを持つCopies
属性を属性セットに追加する方法を示しています:
CopiesSupported copSupp = (CopiesSupported) service.getSupportedAttributeValues(Copies.class, null, null); if (copSupp != null && copSupp.contains(5)) { requestAttrSet.add(new Copies(5)); } else { // ... }
Media
is the IPP attribute that identifies the medium on which to print. Media
属性は理解すべき重要な属性ですが、比較的複雑です。
The Java Print Service APIでは、抽象クラスMedia
の3つのサブクラスを定義して、IPP仕様のオーバーロードされたMedia
属性を反映: MediaSizeName
、MediaName
およびMediaTray
。 すべてのMedia
サブクラスにはMedia
カテゴリがあり、各サブクラスで異なる標準属性値が定義されます。 たとえば、MediaTray
オブジェクトでは、Media
属性にMANUAL
の値を指定して、プリンタのマニュアル・トレイから文書を紙に印刷する必要があることを示すことができます。 このコード・スニペットは、セットへのMedia
属性の追加を示しています:
aset.add(MediaTray.MANUAL);
Media
属性のThe値は常にString
ですが、属性がオーバーロードされているため、その値によって、属性が参照するメディアのタイプが決まります。 たとえば、IPPの定義済みの属性値のセットには、「a4」と「top-tray」の値が含まれています。 Media
が値"a4"に設定されている場合、Media
属性は用紙のサイズを参照しますが、Media
が"top-tray"に設定されている場合、Media
属性は用紙ソースを参照します。 String
属性値は、このような多様なタイプのメディアを参照できるため、"company-letterhead"や"イエロー・レター紙"などの値を含むように属性セットを拡張できます。 もちろん、この方法でMedia
属性を拡張するには、このメディアで印刷するように構成された印刷サービスをアプリケーションが検出する必要があります。
ほとんどの場合、アプリケーションはMediaSizeName
またはMediaTray
を使用します。 MediaSizeName
クラスは、サイズ別にメディアを列挙します。 MediaTray
クラスは、プリンタの用紙トレイを列挙します。このトレイには、通常、メイン・トレイと手動フィード・トレイが含まれます。 IPP 1.1の仕様では、媒体のサイズとトレイを同時に指定できません。たとえば、アプリケーションから、手差しトレイからのA4サイズの用紙を要求することはできません。 今後のIPP仕様のリビジョンでは、同時に複数の種類の媒体を要求する方法が提供される可能性もあります。その場合は、JPS APIを拡張し、この変更を実装する予定です。
JPS APIには、IPP属性ではない2つのメディア関連のAttribute
クラスも含まれています: MediaSize
およびMediaPrintableArea
。
MediaSize
is not a request attribute; it is an enumeration of paper dimensions and a mapping to MediaSizeName
instances. 各MediaSizeName
インスタンスには通常、MediaSize
オブジェクトが関連付けられているため、クライアントはMediaSizeName
インスタンスが定義する用紙のディメンションを取得できます。 MediaSizeName
インスタンスのディメンションを決定するには、次をコールします:
MediaSize size = MediaSizeName.getMediaSizeForName(paper);
MediaPrintableArea
is used in a print request in conjunction with a compatible Media
to specify the area of the paper on which to print. プリンタのハードウェアには通常、印刷可能なページ領域が定義されており、ページ全体に印刷することはほとんどありません。 このため、アプリケーションでは、特定のサイズの媒体に定義されている印刷可能領域を認識し、印刷データをその領域に収める必要があります。
たとえば、5×7インチの用紙に対してサポートされる印刷可能領域を判定するには、アプリケーションは、このサイズの用紙に対応する媒体サイズ属性値を選択してから、印刷サービスに媒体サイズを照会する必要があります。
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(MediaSizeName.NA_5X7); MediaPrintableArea printableArea = (MediaPrintableArea)service. getSupportedAttributeValues(MediaPrintableArea.class, null, aset);
戻り値は、その用紙サイズに対してプリンタがサポートできる最大印刷可能領域です。
The Destination
属性を使用すると、印刷データをプリンタ・デバイスに送信するのではなく、ファイルにリダイレクトできます。 「ファイルに印刷する」オプションはユーザー・ダイアログでは非常に一般的ですが、スプールされたデータは、リダイレクト元のデバイスでしか解釈できないデバイス固有のラスターである可能性があるため、必ずしも使用できるとはかぎりません。 このため、Java印刷サービスAPIでは、クライアントから印刷サービスに照会し、出力をファイルに切り替えることができるかどうかを確認する必要があります。 印刷サービスによっては、特定のカテゴリをまったくサポートしない場合や、特定の値だけをサポートする場合があります。 たとえば、JPS APIは、ホスト・コンピュータ上で印刷データのフォーマットが行われないネットワーク環境で使用できるため、データをフォーマットするサービスがクライアントのローカル・ファイル・システムにアクセスできない可能性があるため、出力用のローカル・ファイルを指定できない場合があります。 Destination
属性は、宛先の値としてURLを取ります。これにより、ネットワーク・プリンタはFTPなどのプロトコルを使用してフォーマットされた印刷データをアップロードできます。 ただし、この属性をサポートするほとんどのプリンタはローカル環境の一部として動作するため、「file:」プロトコルのURLを受け入れることができます。 このコード・スニペットは、出力をc:
ドライブのout.prn
というファイルにリダイレクトします:
aset.add(new Destination("file:c:\out.prn"));
The SheetCollate
属性を使用すると、複数ページ・ドキュメントの複数のコピーを印刷するときに印刷ジョブを照合するかどうかを指定します。 たとえば、3ページのドキュメントを部単位で2部印刷する場合は、(1、2、3、1、2、3)として印刷されます。しかし、同じドキュメントを2部印刷するときに、部単位で印刷しない場合は、(1、1、2、2、3、3)として印刷されます。 この属性は、バージョン1.1のIPP仕様にありませんが、便利な属性で、ほとんどのプリンタでサポートされます。 次のコード例では、部単位で印刷するジョブを指定しています。
aset.add(SheetCollate.COLLATED);
Someプリンタ、特にハイ・エンド・プリンタは、用紙の両側に印刷できます。 Sides
属性を使用すると、アプリケーションは、通常の片面印刷のデフォルトではなく、両面印刷を指定できます。 両方印刷は、「duplex (両面印刷)」または「tumble (反転両面印刷)」と呼ばれる場合もあります。 これらの2つの値は、出力の方向によって区別されます。 Java印刷サービスAPIでは、「duplex (両面印刷)」は長辺で裏返す両面印刷で、「tumble (反転両面印刷)」は短辺で裏返す両面印刷のことです。 詳細は、Sides
のAPI仕様を参照してください。 このコード・スニペットは、ジョブが文書を両面印刷することを指定します:
aset.add(Sides.DUPLEX);
Fidelity
属性はIPPブール属性で、印刷サービスが印刷リクエストで指定された属性をサポートしていない場合に、印刷ジョブを拒否するかどうかを表します。 Fidelity
は、多くの開発者が考慮する必要がある属性ではありませんが、JPS APIのcontextにおける重要な属性です。 デフォルト値はFIDELITY_FALSE
です。これは、印刷サービスが印刷リクエストで指定された属性をサポートしていない場合に、印刷ジョブを拒否しないことを示します。 たとえば、アプリケーションで横方向での反転を指定し、プリンタが横方向での反転をサポートしないときは、Fidelity属性がtrueの場合、そのジョブは拒否されます。Fidelity属性がfalseの場合は、横長方向など、適切な代替方式に置き換えてジョブを実行します。 Fidelity
属性を使用すると、指定したとおりにドキュメントのみを印刷するか、プリンタがすべての属性をサポートしていない場合でも印刷するかをアプリケーションで決定できます。 次のコード例では、要求した属性をプリンタがサポートしない場合は、ジョブを拒否しています。
aset.add(Fidelity.FIDELITY_TRUE);
忠実性が重要な場合のために、Java印刷サービスAPIには、特定の印刷要求で何をサポートできるかをアプリケーションが正確に照会するための多くのツールが用意されています。 PrintService
インタフェースの様々な問合せメソッドを参照してください。