モジュール java.desktop
パッケージ javax.print

インタフェースDoc

既知のすべての実装クラス:
SimpleDoc

public interface Doc
インタフェースDocは、印刷ジョブのために1つの印刷データを供給するオブジェクトのインタフェースを指定します。 「Doc」は、印刷データの一部を意味する、短く発音しやすい用語です。 クライアントは、インタフェースDocを実装しているオブジェクトをプリント・ジョブに渡します。プリント・ジョブは、そのオブジェクトのメソッドを呼び出して、プリント・データを取得します。 Docインタフェースを使用すると、印刷ジョブを実行できます:
  • 印刷データが利用可能な形式または「docフレーバ」(DocFlavorクラス)を判別する。 docフレーバは、印刷データ形式(MIMEタイプ)および印刷データの送信元オブジェクトの表現クラスを指す。
  • docフレーバの表現クラスのインスタンスである、印刷データの表現オブジェクトを取得する。 取得後に、Print Jobは、表現オブジェクトから実印刷データを取得できる。
  • docの追加特性を指定する、またはdocに適用する処理命令を指定する印刷属性を取得する。 印刷属性は、パッケージjavax.print.attribute内で定義される。 docは、javax.print.attribute.DocAttributeSet内に格納された出力属性を返す。
インタフェースDocの実装における各メソッドは、メソッドが呼び出されるたびに常に同じオブジェクトを返すことができます。 これは、Print Jobまたはdocオブジェクトの他の呼出し側の場合、呼出し側が印刷データを取得する際、その印刷データ表現オブジェクトが、ストリームである印刷データ表現オブジェクトなどの印刷データを「消費する」ことを示します。 Print JobがgetPrintData()を呼び出してストリームを取得した後でgetPrintData()を呼び出すと、すでに読込み中の同じストリーム・オブジェクトが返されます。印刷データをもう一度最初から読み込む新規ストリーム・オブジェクトが返されることはありません このような動作を実行するdocオブジェクトを指定すると、docオブジェクトの実装を簡略化できます。これは、特定のdocが1つのPrint Job (複数の異なるPrint Jobではなく)に印刷データを送信することを考えると、理にかなっています。 (同一の印刷データを複数の異なるPrint Jobに送信する場合は、1つの印刷データ・ソースの最上位に複数の異なるdocオブジェクトを作成する必要があります)。

インタフェースDocは、かなりの実装の柔軟性を提供します。 docオブジェクトの構築時には、印刷データがすでに存在している場合があります。 この場合、docのメソッドにより返されるオブジェクトをdocのコンストラクタに提供し、前もってdoc内に格納しておくことで、呼出し時にそのまま返すだけで済みます。 また、docオブジェクトの構築時に印刷データがまだ存在していない場合もあります。 この場合、docオブジェクトは「レイジー」実装を提供できます。Print JobがgetPrintData()メソッドを呼び出した場合のみ、「レイジー」実装は印刷データ表現オブジェクト(や印刷データ)を生成します。

1つのdocに同時アクセス可能なクライアント・スレッド数に制限はありません。 したがって、インタフェースDocのすべての実装は、複数のスレッド・セーフであるように設計する必要があります。

ただし、Docから取得した印刷データの消費者は1人だけです。

印刷データがストリームとしてクライアントから取得される場合、DocgetReaderForText()またはgetStreamForBytes()メソッドをコールすることによって、または印刷データ・ソースがすでにInputStreamまたはReaderであるため、印刷サービスは、すべてのジョブ完了条件でクライアントに対してこれらのストリームを常にクローズする必要があります。 次の点に注意してください。 印刷データ自体がストリームの場合、サービスは常に印刷データを閉じます。 印刷データが別の方法でストリームとして要求可能で、終了前にストリームを取得済みの場合、サービスはストリームを閉じるだけです。 つまり、プリント・サービスがストリームとしてデータをリクエストしているとは限らないため、サービスに依存しているDoc実装者がサービスからのリクエストにレスポンスしてそのようなストリームを作成する必要があるという意味で、。