目次 | 前へ | 次へ

標準属性

javax.print.attribute.standard パッケージには、Java 印刷サービス API のすべての標準属性が列挙されています。標準属性のほとんどは、IETF IPP (Internet Printing Protocol) 1.1 仕様に定義されている属性です。つまり、javax.print.attribute.standard パッケージに定義されている属性クラス (カテゴリ) は、すべて IPP に準拠しており、IPP 属性カテゴリに対応しています。その名前 (getName から返される名前) は、IPP 属性カテゴリの実際の IPP 名です。また、多くのクラス名は、IPP 名を反映しており、Java プログラミング言語で許可されるコーディング規則にできるだけ準拠しています。さらに、カテゴリに定義される値は、IPP の値と同じです。各属性カテゴリと IPP の互換性については、API 仕様を参照してください。

このセクションでは、開発者がもっとも頻繁に使用する可能性のある属性について説明します。ここに挙げた属性も含めて、頻繁に使用する属性では、PrintRequestAttribute を実装しています。印刷アプリケーションでは通常、印刷ジョブ全体の印刷方法を指定しますが、これは PrintRequestAttribute の機能に含まれるためです。


OrientationRequested

OrientationRequested 属性カテゴリを使用すると、用紙上の印刷方向を指定できます。指定できる属性値は、PORTRAIT、LANDSCAPE、REVERSE_PORTRAIT、および REVERSE_LANDSCAPE です。通常は、OrientationRequested.PORTRAIT がデフォルト値です。次のコード例では、OrientationRequested 属性を属性セットに追加しています。

aset.add(OrientationRequested.REVERSE_PORTRAIT);
OrientationRequested オブジェクトは、設定可能な方向に対応する String 値をカプセル化している、型保証された列挙です。これらの String 値は IPP キーワードです。

一部の書式設定済みのドキュメントの種類 (「Postscript」など) では、この属性カテゴリをサポートできないことがあります。書式設定済みのドキュメントの種類には、プリンタによって解釈されるプリンタ言語コマンドが埋め込まれており、これらのコマンドはクライアントの要求より優先されるためです。

クライアントは、次を呼び出すことによって、特定の印刷サービスでサポートされる方向の値を検出できます。

PrintService.getSupportedAttributeValues(OrientationRequested.class, ...).
このメソッドによって、サポートされる値が列挙された OrientationRequested 型の配列が返されます。

Copies

Copies 属性カテゴリを使用すると、印刷する部数を指定できます。Copies クラスには、要求した部数を示す整数がカプセル化されます。次のコード例では、部数を 5 に設定した Copies 属性を属性セットに追加しています。

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 { ...
}

Media

Media は、印刷する媒体を識別する IPP 属性です。Media 属性は理解すべき重要な属性ですが、使用方法は比較的複雑です。

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

MediaSize は要求属性ではなく、用紙寸法の列挙および MediaSizeName インスタンスへのマッピングです。各 MediaSizeName インスタンスは通常、MediaSize オブジェクトに関連付けられており、MediaSizeName インスタンスに定義されている用紙の寸法をクライアントから取得できます。MediaSizeName インスタンスから用紙寸法を取得するには、次のメソッドを呼び出します。

MediaSize size = MediaSizeName.getMediaSizeForName(paper);

MediaPrintableArea

MediaPrintableArea は、印刷する用紙の領域を指定するために、互換性のある Media と組み合わせて印刷要求で使用されます。プリンタのハードウェアには通常、印刷可能なページ領域が定義されており、ページ全体に印刷することはほとんどありません。このため、アプリケーションでは、特定のサイズの媒体に定義されている印刷可能領域を認識し、印刷データをその領域に収める必要があります。

たとえば、5 × 7 インチの用紙に対してサポートされる印刷可能領域を判定するには、アプリケーションは、このサイズの用紙に対応する媒体サイズ属性値を選択してから、印刷サービスに媒体サイズを照会する必要があります。

PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.NA_5X7);
MediaPrintableArea printableArea =
(MediaPrintableArea)service.
        getSupportedAttributeValues(MediaPrintableArea.class, null, aset);
戻り値は、その用紙サイズに対してプリンタがサポートできる最大印刷可能領域です。

Destination

Destination 属性を使用すると、印刷データをプリンタデバイスに送信するのではなく、ファイルにリダイレクトすることができます。「ファイルに印刷する」オプションはユーザーダイアログでは非常に一般的ですが、スプールされたデータは、リダイレクト元のデバイスでしか解釈できないデバイス固有のラスターである可能性があるため、必ずしも使用できるとはかぎりません。このため、Java 印刷サービス API では、クライアントから印刷サービスに照会し、出力をファイルに切り替えることができるかどうかを確認する必要があります。印刷サービスによっては、特定のカテゴリをまったくサポートしない場合や、特定の値だけをサポートする場合があります。たとえば、JPS API は、ネットワーク環境で使用できます。この場合、印刷データの書式設定がホストコンピュータ上で行われず、データを書式設定するサービスにクライアントのローカルファイルシステムに対するアクセス権がないときは、ローカルファイルを出力できないことがあります。Destination 属性では、出力先の値として URL が使用されます。このため、ネットワークプリンタでは、ftp などのプロトコルを使用して、書式設定済みの印刷データをアップロードできます。ただし、この属性をサポートするほとんどのプリンタはローカル環境の一部として動作するため、「file:」プロトコルの URL を受け入れることができます。次のコード例では、c: 上の out.prn と呼ばれるファイルに出力をリダイレクトしています。

aset.add(new Destination("file:c:\out.prn"));

SheetCollate

SheetCollate 属性を使用すると、複数ページで構成されるドキュメントの複数の部数を印刷するときに印刷ジョブで部単位で印刷するかどうかを指定できます。たとえば、3 ページのドキュメントを部単位で 2 部印刷する場合は、(1、2、3、1、2、3) として印刷されます。しかし、同じドキュメントを 2 部印刷するときに、部単位で印刷しない場合は、(1、1、2、2、3、3) として印刷されます。この属性は、バージョン 1.1 の IPP 仕様にありませんが、便利な属性で、ほとんどのプリンタでサポートされます。次のコード例では、部単位で印刷するジョブを指定しています。

aset.add(SheetCollate.COLLATED);

Sides

一部のプリンタ、特に高機能のプリンタでは、用紙の両面に印刷できます。Sides 属性を使用すると、通常のデフォルト値である片面印刷以外に、両面印刷を指定できます。両方印刷は、「duplex (両面印刷)」または「tumble (反転両面印刷)」と呼ばれる場合もあります。これらの 2 つの値は、出力の方向によって区別されます。Java 印刷サービス API では、「duplex (両面印刷)」は長辺で裏返す両面印刷で、「tumble (反転両面印刷)」は短辺で裏返す両面印刷のことです。詳細については、Sides に関する API 仕様を参照してください。次のコード例では、ドキュメントの両面印刷を指定しています。

aset.add(Sides.DUPLEX);

Fidelity

Fidelity 属性は、印刷サービスが印刷要求で指定されたどの属性もサポートしていない場合に印刷ジョブを拒否すべきかどうかを表す IPP の boolean 型の属性です。Fidelity 属性は、多くの場合、開発者は考慮する必要がありません。ただし、JPS API コンテキストでは、重要な属性です。デフォルト値は、FIDELITY_FALSE です。印刷サービスが印刷要求に指定された属性をサポートしない場合でも、印刷ジョブを拒否しないことを示します。たとえば、アプリケーションで横方向での反転を指定し、プリンタが横方向での反転をサポートしないときは、Fidelity 属性が true の場合、そのジョブは拒否されます。Fidelity 属性が false の場合は、横長方向など、適切な代替方式に置き換えてジョブを実行します。Fidelity 属性を使用して、指定したとおりにドキュメントを印刷するか、またはすべての属性をプリンタがサポートしない場合でも印刷するかを、アプリケーションから決定できます。次のコード例では、要求した属性をプリンタがサポートしない場合は、ジョブを拒否しています。

aset.add(Fidelity.FIDELITY_TRUE);
忠実性が重要な場合のために、Java 印刷サービス API には、特定の印刷要求で何をサポートできるかをアプリケーションが正確に照会するための多くのツールが用意されています。PrintService インタフェースについては、各照会メソッドを参照してください。

目次 | 前へ | 次へ

Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.
連絡先