JavaTM Platform
Standard Ed. 6

パッケージ javax.print.attribute

JavaTM Print Service の属性の型とそれらが属性セットに収集される方法を記述するクラスとインスタンスを提供します。

参照先:
          説明

インタフェースの概要
Attribute Attribute インタフェースは、クラスが印刷属性を表すことを示すために、任意およびすべての印刷属性クラスによって実装される基本インタフェースです。
AttributeSet AttributeSet インタフェースは、印刷属性セットのインタフェースを指定します。
DocAttribute DocAttribute インタフェースは、属性がドキュメントの設定を表示することを示すために、印刷属性クラスが実装するタグ機能インタフェースです。
DocAttributeSet DocAttributeSet インタフェースは、ドキュメントの属性のセット、つまり DocAttribute インタフェースを実装する印刷属性に対するインタフェースを指定します。
PrintJobAttribute PrintJobAttribute は、属性が Print Job の状態または Print Job のその他の特性を記述することを示すために、印刷属性クラスが実装するタグ機能インタフェースです。
PrintJobAttributeSet PrintJobAttributeSet インタフェースは、印刷ジョブ属性のセットに対するインタフェース、つまり、PrintJobAttribute インタフェースを実装する印刷属性を指定します。
PrintRequestAttribute PrintRequestAttribute インタフェースは、属性が必要な印刷ジョブの設定を表示することを示すために、印刷属性クラスが実装するタグ機能インタフェースです。
PrintRequestAttributeSet PrintRequestAttributeSet インタフェースは、印刷要求属性のセットに対するインタフェース、つまり PrintRequestAttribute インタフェースを実装する印刷属性を指定します。
PrintServiceAttribute PrintServiceAttribute インタフェースは、属性が Print Service の状態または Print Service のその他の特性を記述することを示すために、印刷属性クラスが実装するタグ機能インタフェースです。
PrintServiceAttributeSet PrintServiceAttributeSet インタフェースは、印刷ジョブ属性のセットに対するインタフェース、つまり、PrintServiceAttribute インタフェースを実装する印刷属性を指定します。
SupportedValuesAttribute SupportedValuesAttribute インタフェースは、属性がほかの属性でサポートされる値を記述することを示すために、印刷属性クラスが実装するタグ機能インタフェースです。
 

クラスの概要
AttributeSetUtilities AttributeSetUtilities クラスは、AttributeSets を操作する次の静的メソッドを提供します。
DateTimeSyntax DateTimeSyntax クラスは、日付と時刻を値とするすべての属性の一般的な実装を行う抽象基底クラスです。
EnumSyntax EnumSyntax クラスは、すべての「型保証された列挙」オブジェクトの一般的な実装を提供する抽象基底クラスです。
HashAttributeSet HashAttributeSet クラスは、ハッシュマップの特性を持つ AttributeSet 実装を提供します。
HashDocAttributeSet HashDocAttributeSet クラスは、その実装を HashAttributeSet クラスから継承し、DocAttributeSet インタフェースの意味上の制限を適用する属性セットを提供します。
HashPrintJobAttributeSet HashPrintJobAttributeSet クラスは、その実装を HashAttributeSet クラスから継承し、PrintJobAttributeSet インタフェースの意味上の制限を適用する属性セットを提供します。
HashPrintRequestAttributeSet HashPrintRequestAttributeSet クラスは、その実装を HashAttributeSet クラスから継承し、PrintRequestAttributeSet インタフェースの意味上の制限を適用します。
HashPrintServiceAttributeSet HashPrintServiceAttributeSet クラスは、その実装を HashAttributeSet クラスから継承し、PrintServiceAttributeSet インタフェースの意味上の制限を適用する属性セットを提供します。
IntegerSyntax IntegerSyntax クラスは、整数値を持つすべての属性の一般的な実装を提供する抽象基底クラスです。
ResolutionSyntax ResolutionSyntax クラスは、プリンタの解像度を示すすべての属性の一般的な実装を提供する抽象基底クラスです。
SetOfIntegerSyntax SetOfIntegerSyntax クラスは、負以外の整数値を持つすべての属性の一般的な実装を提供する抽象基底クラスです。
Size2DSyntax Size2DSyntax クラスは、2 次元のサイズを示すすべての属性の一般的な実装を提供する抽象基底クラスです。
TextSyntax TextSyntax クラスは、値が文字列であるすべての属性の一般的な実装を提供する抽象基底クラスです。
URISyntax URISyntax クラスは、値が URI (Uniform Resource Identifier) であるすべての属性の一般的な実装を提供する抽象基底クラスです。
 

例外の概要
UnmodifiableSetException このセットが変更できないので要求されたオペレーションが実行できないことを示すためにスローされます。
 

パッケージ javax.print.attribute の説明

JavaTM Print Service の属性の型とそれらが属性セットに収集される方法を記述するクラスとインスタンスを提供します。

属性とは何か

印刷ジョブを設定する場合、クライアントは「印刷データ」と「処理命令」の 2 つを指定します。印刷データは、印刷される実際の内容です。処理命令は、使用するメディアの種類、印刷する部数、用紙の片面に印刷するか、両面に印刷するかなど印刷データの印刷方法をプリンタに指示します。クライアントは、Java Print Service API の属性の定義によってこれらの処理命令を指定します。

印刷データと処理命令は別個のエンティティーです。これは次のことを意味します。

処理命令は、印刷ジョブが要求を処理する方法を指定しません。 各処理命令は、印刷ジョブの結果の説明だけを行います。印刷ジョブは、処理命令により指定された結果を実現する方法を確定します。処理命令の項目を説明的に表現することにより、印刷ジョブの実装により多くの柔軟性が得られます。

属性のカテゴリと値

各プリンタには、さまざまなサイズの用紙に印刷する機能や複数の部数を印刷する機能など、いくつかの機能が備わっています。それぞれの機能には値の範囲があります。たとえば、プリンタの印刷方向を指定する機能には、値の範囲 [landscape, portrait] があります。印刷要求ごとに、機能に対してこれらの値の 1 つが設定されます。Java Print Service API は「属性カテゴリ」という用語を使ってプリンタの機能を参照し、「属性値」という用語を使って機能の値を参照します。

Java Print Service API では、属性カテゴリは、Attribute インタフェースを実装する Java クラスによって表されます。属性値は、このようなクラスまたはそのサブクラスの 1 つのインスタンスです。たとえば、印刷部数を指定するために、アプリケーションは希望する印刷部数を持つ Copies クラスのインスタンスを構築し、印刷要求の一部としてこの Copies インスタンスを使用します。この場合、Copies クラスは属性カテゴリを表し、Copies インスタンスは属性値を表します。

属性の役割

印刷ジョブをプリンタに送信するときに、クライアントはドキュメントの名前など印刷データの特性と両面印刷で部数 5 部など印刷データの印刷方法を説明する属性を提供します。印刷ジョブが複数の印刷データから構成される場合、最初のドキュメントは 8 x 11 インチのメディアを使用し、もう一つのドキュメントは 11 x 17 インチのメディアを使用するなど、異なる印刷データは異なる処理命令を持ちます。

プリンタが印刷ジョブの処理を開始すると、ジョブに関する追加情報が使用可能になります。 この情報には、「完了」または「待機」などジョブの状態とすでに印刷されたページ数が含まれます。このような情報も属性です。属性は、プリンタ名、プリンタの位置、および待機するジョブの数などプリンタ自体の情報も記述できます。

Java Print Service API は Attribute の 5 つのサブインタフェースを持つ異なる種類の属性を定義します。次にそれらを説明します。

各属性クラスは、これらのタグ機能サブインタフェースの 1 つまたは複数を実装して、属性が API のどの場所で使用されるかを指定します。各属性クラスが複数のタグ機能サブインタフェースを実装する場合は、属性を複数のコンテキストで使用できます。たとえば、メディア属性は、DocAttribute として 1 つの印刷ジョブの 1 つのドキュメントに適用することも、PrintRequestAttribute として印刷ジョブ全体に適用することもできます。低レベルの属性の中には、単独で使用されず、常に高レベルの属性に統合されるものもあります。これらの低レベルの属性クラスは、Attribute インタフェースだけを実装し、タグ機能サブインタフェースを実装することはありません。

Java Print Service API は、Internet Printing Protocol (IPP) バージョン 1.1 の属性にモデル化されている標準属性クラスのグループを定義します。標準属性クラスは、実際の属性クラスを保持するために、パッケージ javax.print.attribute に定義された汎用機能とは概念的に区別されるサブパッケージ javax.print.attribute.standard にあります。

属性セット

通常、クライアントは、印刷ジョブの送信の際に複数の処理命令を提供する必要があります。たとえば、クライアントは A4 のメディアサイズと横長の印刷方向を指定する必要があります。複数の処理命令を送信するために、クライアントは Java Print Service API が AttributeSet インタフェースで表現する属性セットに属性を収集する必要があります。

AttributeSet インタフェースは、Map インタフェースに類似しています。これは値に対するキーのマッピングを提供します。 ここでは、各キーは一意であり、複数の値を保持することはできません。ただし、AttributeSet インタフェースは Java Print Service API のニーズをサポートするように設計されています。AttributeSet には、次が必要になります。

  1. AttributeSet の各キーはカテゴリに対応し、キーの値はキーによって表されるカテゴリに属する属性値の 1 つだけをとることができる。このため、Map と異なり、AttributeSet はキーの使用可能な値を制限する。つまり、属性カテゴリはそのカテゴリに属さない属性値を設定できない
  2. 同じカテゴリからの 2 つの属性が同じセットに存在することはできない。たとえば、属性のコレクションは、これら 2 つの属性がプリンタに矛盾した命令を与えるため、「一方向」属性と「両方向」属性の両方を保持することはできない
  3. Attribute インタフェースを実装する属性だけがセットに追加できる

javax.print.attribute パッケージには、属性セットのインタフェースの具象実装として HashAttributeSet が含まれます。HashAttributeSet はハッシュマップに基づく属性セットを提供します。この実装を使用するか、または AttributeSet インタフェースの独自の実装を提供することができます。

Java Print Service API は、「属性の役割」セクションで説明されているとおり、4 種類の属性の 1 つだけを保持するように制限されている属性セットの次の 4 つの特殊化を提供します。

ここでは 4 種類の属性セットだけがリストされていますが、5 種類の属性があることに注意してください。SupportedValuesAttribute インタフェースは、別の属性でサポートする値を提供する属性を表示します。サポートする値の属性は属性セットには統合されないため、これらを定義する属性セットのサブインタフェースはありません。

一部のコンテキストでは、属性セットは読み込み専用の場合がありますが、これはクライアントが属性セットの内容を検査することはできるが変更できないことを意味します。別のコンテキストでは、属性セットが読み込み、書き込み可能の場合がありますが、これはクライアントが属性セットの内容の検査と変更の両方を行うことができることを意味します。読み込み専用の属性セットの場合、変更操作を呼び出すと、UnmodifiableSetException がスローされます。

javax.print.attribute パッケージには、次の各属性セットのサブインタフェースの具象実装の 1 つが含まれます。

これらのクラスのすべては、HashAttributeSet を拡張し、属性セットが対応する種類の属性を保持することだけが可能になる制限を適用します。

属性クラスの設計

属性値は、整数値または列挙値など小さい不可分なデータ項目です。Java Print Service API は、属性値を表すために int など基本データ型を使用しません。 その理由は次のとおりです。 型保証とすべての属性を均等に表すために、Java Print Service API は各属性カテゴリを Copies クラス、Sides クラス、および PrinterResolution クラスなどのクラスとして定義します。各属性クラスは、属性の値を保持する 1 つ以上の基本データ項目をラップします。属性セットの操作は、属性を追加するとき、同じカテゴリ内に既存の属性を検出するとき、およびそのカテゴリに付与された属性を検索するときに、頻繁に属性カテゴリのオブジェクト間の比較を行います。属性カテゴリはクラスによって表されるので、属性値の速い比較は Class.equals メソッドによって行えます。

Java Print Service API には多数の属性カテゴリが含まれますが、属性値の異なる型はほんの少ししかありません。ほとんどの属性は、整数値、整数型の範囲、テキスト、整数値の列挙など少数のデータ型によって表せます。カテゴリが受け入れる属性値の型は、属性の抽象構文と呼ばれます。一貫性を提供し、コードの重複を減らすために、Java Print Service API は抽象構文クラスを定義して各抽象構文を表し、可能な場合には、これらのクラスは標準属性の親としていつでも使用できます。抽象構文クラスは次のとおりです。

抽象構文クラスは、それを使用する属性に依存しません。実際、印刷を何も行わないアプリケーションは、抽象構文クラスを使用できます。ほとんどの標準抽象クラスは、抽象構文クラスの 1 つを拡張していますが、属性クラスはこれらのクラスの 1 つの拡張も要求されません。抽象構文クラスは、多くの属性クラスによって共有される簡易実装を単に提供するだけです。

各属性クラスは、直接的または間接的に Attribute インタフェースを実装し、それを印刷属性としてマークします。また、特定のコンテキストで、制限された属性セットに表示される属性クラスは、1 つ以上の Attribute のサブインタフェースを実装します。また、ほとんどの属性クラスは、適切な抽象構文クラスを拡張して実装を取得します。Sides 属性クラスを次のように考えてください。

public class Sides extends EnumSyntax implements DocAttribute, PrintRequestAttribute, PrintJobAttribute { public final Object getCategory() { return Sides.class; } ... }

すべての属性クラスは Attribute を実装するので、すべての属性クラスは、属性カテゴリを返す getCategory メソッドの実装を提供する必要があります。Sides の場合、getCategory メソッドは Sides.class を返します。getCategory メソッドは、最終的に標準属性クラスの任意のベンダー定義サブクラスが同じカテゴリに表示されるようにします。すべての属性オブジェクトはいったん構築されると不変であり、このため属性オブジェクトの参照を自由に渡すことができます。異なる属性値を取得するには、異なる属性オブジェクトを構築してください。

ベンダーの属性

Java Print Service API は、ベンダーが次を実行できるように設計されています。 属性の新しい値を定義する場合は、クライアントで任意の値を持つ属性のインスタンスを実行時に構築できます。ただし、EnumSyntax の抽象構文クラスを使用する列挙属性は、コンパイル時に使用可能なすべての属性値を、属性クラスの単独インスタンスとして指定します。これは、新しい列挙値を実行時に構築できないことを意味します。標準列挙属性に対してべンダー固有の新しい値を定義する場合、ベンダーは新しい単独インスタンスを指定する新しい属性クラスを定義する必要があります。新しい属性値が標準属性値と同じカテゴリの中に入るようにするには、新しい属性クラスを標準属性クラスのサブクラスにしなければなりません。

新しい属性カテゴリを定義する場合、ベンダーは新しい属性クラスを定義します。この属性クラスは、標準属性クラスと同じように、Attribute またはそのサブインタフェースの 1 つを実装し、抽象構文クラスを拡張します。ベンダーは既存の抽象構文クラスを使用することも、新しい抽象構文クラスを定義することもできます。ベンダーが定義した新しい属性は、AttributeSet などのような Attribute が使用されるところではどこでも使用できます。

属性の使用

一般的な印刷アプリケーションでは、印刷要求属性は通常クライアントが指定する属性型であるため、PrintRequestAttributeSet を使用します。次の例は、印刷要求属性の属性セットを作成し、指定された属性によってドキュメントを印刷できるプリンタの検出を示しています。

FileInputStream psStream; try { psstream = new FileInputStream("file.ps"); } catch (FileNotFoundException ffne) { } if (psstream == null) { return; } //Set the document type. See the DocFlavor documentation for //more information. DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT; Doc myDoc = new SimpleDoc(pstream, psInFormat, null); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(new Copies(5)); aset.add(MediaSize.A4); aset.add(Sides.DUPLEX); PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); if (services.length > 0) { DocPrintJob job = services[0].createPrintJob(); try { job.print(myDoc, aset); } catch (PrintException pe) {} }

注:javax.print API では、メソッドへの null 参照パラメータ指定は、ドキュメントに意味が明記されている場合を除いては不正であることに注意してください。これに反する使用は無効なコーディングであり、すぐにまたはあとで実行時の例外が生ずる結果になります。IllegalArgumentException および NullPointerException は、このような場合の典型的で許容できる実行時の例外の事例です。

導入されたバージョン:
1.4

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。