目次||

標準属性

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のロールである印刷ジョブ全体の印刷方法が指定されるためです。


OrientationRequested

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型の配列を返します。


Copies

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

Media is the IPP attribute that identifies the medium on which to print. Media属性は理解すべき重要な属性ですが、比較的複雑です。

The Java Print Service APIでは、抽象クラスMediaの3つのサブクラスを定義して、IPP仕様のオーバーロードされたMedia属性を反映: MediaSizeNameMediaNameおよび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

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

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);

戻り値は、その用紙サイズに対してプリンタがサポートできる最大印刷可能領域です。


Destination

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

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

SheetCollate

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

aset.add(SheetCollate.COLLATED);

Sides

Someプリンタ、特にハイ・エンド・プリンタは、用紙の両側に印刷できます。 Sides属性を使用すると、アプリケーションは、通常の片面印刷のデフォルトではなく、両面印刷を指定できます。 両方印刷は、「duplex (両面印刷)」または「tumble (反転両面印刷)」と呼ばれる場合もあります。 これらの2つの値は、出力の方向によって区別されます。 Java印刷サービスAPIでは、「duplex (両面印刷)」は長辺で裏返す両面印刷で、「tumble (反転両面印刷)」は短辺で裏返す両面印刷のことです。 詳細は、SidesのAPI仕様を参照してください。 このコード・スニペットは、ジョブが文書を両面印刷することを指定します:

aset.add(Sides.DUPLEX);

Fidelity

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

aset.add(Fidelity.FIDELITY_TRUE);

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



目次||

Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved.