目次||

標準属性

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

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


OrientationRequested

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

aset.add(OrientationRequested.REVERSE_PORTRAIT);
OrientationRequestedオブジェクトは、設定可能な方向に対応する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, 2020, Oracle and/or its affiliates. All rights reserved.