(57)【要約】【課題】  負荷分散印刷等で、プリントキューがプリンタデバイスの変更に伴い変更されるような形態で、プリントキューの変更をアプリケーションで追跡するには、アプリケーションの負荷が大きくなるという問題点があった。【解決手段】  負荷分散印刷でジョブが移動した場合に、ジョブ情報にアプリケーションが印刷を行ったプリンタ名と、そのとき発行された移動前のジョブＩＤを設定し、印刷完了や印刷ジョブのエラー等のイベントが発生した際に、ジョブ情報内の印刷を行ったプリンタ名を参照し、対応するプリントキューからアプリケーションにイベントを通知する。その際、移動前のジョブＩＤと、排紙が行われたプリンタ名も通知する。【選択図】  図２０
2005332227.tif 000002
【特許請求の範囲】
【請求項１】
複数の印刷装置に印刷ジョブを送信可能な情報処理装置であって、
アプリケーションから投入された第１プリントキューに登録された印刷ジョブの出力の代替として、第２プリントキューから前記登録された印刷ジョブを出力するようにする制御手段と、
前記第２プリントキューに登録された印刷ジョブの情報に前記第１プリントキュー及び前記印刷ジョブのジョブＩＤを関連付ける手段と、
前記第２プリントキューから出力された印刷ジョブの状態の変化を、前記ジョブＩＤを合わせて、前記関連付けら得た第１プリントキューを介して前記アプリケーションに通知するようにする通知制御手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記アプリケーションの通知には、さらに、印刷出力の排紙が行なわれたプリンタ識別情報が含まれることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
複数の印刷装置に印刷ジョブを送信可能な情報処理装置であって、アプリケーションから投入された印刷ジョブで、前記印刷装置に送信する前記印刷ジョブを識別するためのジョブＩＤを発行すると共に前記アプリケーションにジョブＩＤを通知する発行手段と、
前記複数の印刷装置に対応する複数のプリントキューについて、前記複数のプリントキューのうち何れか１つを基本プリントキューとして設定し、前記基本プリントキュー以外のプリントキューをバックアッププリントキューとして設定するプリントキュー設定手段と、
前記基本プリントキューに登録された前記印刷ジョブ情報に対応するバックアップジョブ情報を生成して、前記バックアッププリントキューに登録するバックアップジョブ登録手段と、
前記基本プリントキューおよび前記バックアッププリントキューのそれぞれにおいて、印刷ジョブ情報が登録されている場合には、優先的に前記印刷ジョブ情報に基づくジョブを対応する印刷装置に出力し、印刷ジョブ情報が登録されておらず、バックアップジョブ情報のみが登録されている場合には、そのバックアップジョブ情報を印刷ジョブ情報に変更して変更後のジョブ情報に基づくジョブを対応する印刷装置に出力するジョブ制御手段と、
前記ジョブ制御手段により、バックアップジョブ情報を印刷ジョブ情報に変更する際に、変更後の印刷ジョブ情報に、変更前の印刷ジョブ情報のジョブＩＤと、基本プリントキューに対応するプリンタ識別情報を参照可能にせしめる設定手段と、
印刷装置に出力された印刷ジョブの状態変化のイベントが発生した場合に、前記変更後の印刷ジョブ情報に前記設定手段により設定されているプリンタ識別情報を参照して、そのプリンタ識別情報に対応するプリントキューを介して前記アプリケーションに前記イベントを通知する手段と、
前記通知するイベントに前記変更前のジョブＩＤと排紙が行われたプリンタ識別情報とを含むことを特徴とする情報処理装置。
【請求項４】
前記基本プリントキューおよび前記バックアッププリントキューにおいて、登録されている前記印刷ジョブ情報およびそれに対応するバックアップジョブ情報の何れか１つが印刷装置への出力対象とされた場合には、出力の対象とならなかった前記印刷ジョブ情報またはそれ対応するバックアップジョブ情報を前記基本プリントキューおよび前記バックアッププリントキューから削除する削除手段を有することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記プリンタ識別情報は、プリンタ名であることを特徴とする請求項３又は４に記載の情報処理装置。
【請求項６】
前記印刷ジョブの状態変化には、印刷終了、印刷ジョブのエラーが含まれることを特徴とする請求項３から５の何れかに記載の情報処理装置。
【請求項７】
複数の印刷装置に印刷ジョブを送信可能な情報処理装置における印刷ジョブの管理方法であって、アプリケーションから投入された第１プリントキューに登録された印刷ジョブの出力の代替として、第２プリントキューから前記登録された印刷ジョブを出力するようにする制御ステップと、
前記第２プリントキューに登録された印刷ジョブの情報に前記第１プリントキュー及び前記印刷ジョブのジョブＩＤを関連付けるステップと、
前記第２プリントキューから出力された印刷ジョブの状態の変化を、前記ジョブＩＤを合わせて、前記関連付けら得た第１プリントキューを介して前記アプリケーションに通知するようにする通知制御ステップと、
を有することを特徴とする管理方法。
【請求項８】
複数の印刷装置に印刷ジョブを送信可能な情報処理装置であって、アプリケーションから投入された印刷ジョブで、前記印刷装置に送信する前記印刷ジョブを識別するためのジョブＩＤを発行すると共に前記アプリケーションにジョブＩＤを通知する発行ステップと、
前記複数の印刷装置に対応する複数のプリントキューについて、前記複数のプリントキューのうち何れか１つを基本プリントキューとして設定し、前記基本プリントキュー以外のプリントキューをバックアッププリントキューとして設定するプリントキュー設定ステップと、
前記基本プリントキューに登録された前記印刷ジョブ情報に対応するバックアップジョブ情報を生成して、前記バックアッププリントキューに登録するバックアップジョブ登録ステップと、
前記基本プリントキューおよび前記バックアッププリントキューのそれぞれにおいて、印刷ジョブ情報が登録されている場合には、優先的に前記印刷ジョブ情報に基づくジョブを対応する印刷装置に出力し、印刷ジョブ情報が登録されておらず、バックアップジョブ情報のみが登録されている場合には、そのバックアップジョブ情報を印刷ジョブ情報に変更して変更後のジョブ情報に基づくジョブを対応する印刷装置に出力するジョブ制御ステップと、
前記ジョブ制御ステップにより、バックアップジョブ情報を印刷ジョブ情報に変更する際に、変更後の印刷ジョブ情報に、変更前の印刷ジョブ情報のジョブＩＤと、基本プリントキューに対応するプリンタ識別情報を参照可能にせしめる設定ステップと、
印刷装置に出力された印刷ジョブの状態変化のイベントが発生した場合に、前記変更後の印刷ジョブ情報に前記設定ステップにおいて設定されているプリンタ識別情報を参照して、そのプリンタ識別情報に対応するプリントキューを介して前記アプリケーションに前記イベントを通知するステップと、
前記通知するイベントに前記変更前のジョブＩＤと排紙が行われたプリンタ識別情報とを含むことを特徴とする管理方法。
【請求項９】
請求項７又は８の何れかに記載の管理方法をコンピュータに実行させるためのプログラム。
【請求項１０】
請求項９に記載のプログラムをコンピュータ可読の形態で記憶した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の印刷装置を効率よく利用するための印刷処理技術に関するものである。
【背景技術】
【０００２】
従来から、文書を大量に印刷する必要のある状況において、１つの高速大量印刷装置を使用して大量印刷を行なうのではなく、複数の低価格中速印刷装置に印刷負荷を分散し、それら並列に動作させることにより安価に高速印刷を実現する負荷分散印刷システムが存在する。
【０００３】
また、個別に印刷ジョブの印刷確認を行なう業務システムのようなアプリケーションソフト（以下、単にアプリケーションと称する）は、印刷を行った際に、印刷完了や、印刷ジョブのエラー、印刷ジョブの削除等の確認を行っている。
【特許文献１】特開平０６−２５９２０６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、負荷分散印刷等で、プリントキューがプリンタデバイスの変更に伴い変更されるような形態で、プリントキューの変更をアプリケーションで追跡するには、アプリケーションの負荷が大きくなるという問題点があった。
【０００５】
一方、印刷ジョブを投入したプリントデバイスにかかっている負荷が大きい場合に、他の負荷が低いプリントデバイスに印刷ジョブが移動することがあるため、上記アプリケーションが印刷ジョブの行方を確認するためには、単に印刷ジョブを投入したプリントキューを監視するだけでは困難であり、また、印刷される全てのプリントキューを監視しても印刷ジョブを識別するためのジョブＩＤが、印刷ジョブが移動することによって変化してしまうことがあるため、印刷ジョブを追跡することができないという問題があった。
【０００６】
また、負荷分散印刷システムにおいても、ジョブＩＤの変化を管理するといった処理が必要となっていた。
【０００７】
本発明は上記の課題を解決するためになされたもので、負荷分散印刷等のプリントキューの変更及び変更に伴う印刷ジョブの再登録が行なわれるような形態で、アプリケーションにとって、効率よく、印刷ジョブの状態の追跡を行なえる仕組みを提供することを目的とする。
【０００８】
特に、印刷確認を行なう業務システムのようなアプリケーションが印刷ジョブを追跡することが可能にすることを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、負荷分散印刷でジョブが移動した場合に、ジョブ情報にアプリケーションが印刷を行ったプリンタ名と、そのとき発行された移動前のジョブＩＤを設定し、印刷完了や印刷ジョブのエラー等のイベントが発生した際に、ジョブ情報内の印刷を行ったプリンタ名を参照し、対応するプリントキューからアプリケーションにイベントを通知する。その際、移動前のジョブＩＤと、排紙が行われたプリンタ名も通知する。
【発明の効果】
【００１０】
本発明によれば、印刷確認を行なう業務システムのようなアプリケーションは、印刷ジョブを投入したプリントキューを監視するだけで、分散先の印刷ジョブを把握することが可能となり、印刷完了通知、出力先の通知、印刷ジョブのエラー通知、印刷ジョブの削除、再印刷等の印刷ジョブの操作が容易に可能となる。
【００１１】
さらに、印刷ジョブの監視手段が簡略化されるため、上記アプリケーションおよび、負荷分散印刷システム双方の処理負荷を軽減することが可能となる。
【発明を実施するための最良の形態】
【００１２】
（第１の実施の形態）
以下に、図面を参照して、この発明の好適な実施の形態を例示的に詳しく説明する。ただし、この実施の形態に記載されている構成要素はあくまで例示であり、この発明の範囲をそれらのみに限定する趣旨のものではない。
【００１３】
なお、本明細書において、印刷データとはＰＤＬ等で記述された画像データであり、印刷ジョブ情報は、印刷データを出力したいプリンタ、印刷データの格納場所、及び印刷方法に関する情報であり、印刷ジョブは、印刷データと印刷ジョブ情報とを組み合わせたものである。
【００１４】
＜概要＞
本実施形態に係るプリントシステムは、プリントデバイス１台に対して、対応するプリントキューを備える。そして、複数のプリントデバイスに対応するプリントキューの何れか１つが基本プリントキューとして設定され、それ以外のプリントキューはバックアッププリントキューとして設定される。本実施形態では基本プリントキューを単にプリントキューと称し、基本プリントキューに対応するプリントデバイスを負荷分散用プリントデバイスと称する。また、バックアッププリントキューに対応するプリントデバイスをバックアッププリントデバイスと称する。アプリケーションが最初に印刷をする、基本プリントキューに対応するプリンタ名をオリジナルプリンタ名と称する。
【００１５】
アプリケーションが本発明のプリントシステムに対し印刷指示を行なうと、プリントシステムは印刷ジョブ情報を生成し、発行したジョブＩＤをアプリケーションに通知する。アプリケーションはそのジョブＩＤを元に印刷ジョブの管理を行なうことが可能となる。
【００１６】
プリンタドライバで生成された印刷ジョブの印刷ジョブ情報は、プリントシステム上でジョブＩＤを元に上記生成された印刷ジョブ情報と関連付けられ、優先的に基本プリントキューに登録され、同時にその印刷ジョブ情報のバックアップとしてのジョブ情報がバックアッププリントキューに生成される。この印刷ジョブ情報に対応するバックアップジョブ情報のことを、本実施形態では仮想ジョブ情報と称し、これと比較する意味で、バックアップではない通常の印刷ジョブ情報を実ジョブ情報と称する。実ジョブ情報は、印刷データの格納場所を含むが、仮想ジョブは、印刷データとの直接の関連性はなく、その代わりに実ジョブ情報の識別情報（実ジョブＩＤ）を含む。これにより、仮想ジョブ情報から実ジョブ情報を導き出すことができる。また、基本プリントキューに登録された実ジョブ情報のジョブＩＤを、オリジナルジョブＩＤと称する。
【００１７】
バックアッププリントキューを含む全てのプリントキューは、概念的に実ジョブ情報用のキュー（実ジョブキュー）と仮想ジョブ情報用のキュー（仮想ジョブキュー）に分かれている。ユーザが印刷ジョブの状態を確認するために一般的な方法でプリントキューを参照した場合には、仮想ジョブキューはユーザインタフェースには表示されず、実ジョブキューのみが表示される。従って、ユーザは通常、実ジョブ情報の状態のみを認識可能である。
【００１８】
負荷分散印刷の指示があると、その指示に含まれる印刷ジョブ情報を、プリントキュー内の実ジョブキューに実ジョブ情報として登録し、実ジョブ情報内に、オリジナルプリンタ名、オリジナルジョブＩＤを設定し、他の全てのバックアッププリントキュー内の仮想ジョブキューには、その実ジョブ情報に対応する仮想ジョブ情報を生成する。そして、プリントキュー内の実ジョブキューにおいて、先に登録された実ジョブ情報が全て対応するプリントデバイスに送信される前に、何れかのバックアッププリントキュー内の実ジョブキューが空になると、そのバックアッププリントキュー内の仮想ジョブキューに登録された仮想ジョブ情報が、対応する実ジョブ情報を引き継いで、実ジョブ情報に切り替わり、実ジョブキューに登録される。その際、オリジナルプリンタ名およびオリジナルジョブＩＤも設定する。そしてその直後、その実ジョブ情報に含まれる格納場所に格納された印刷データとともに、プリントデバイスに送信される。
【００１９】
印刷ジョブのエラーや印刷完了等のイベントが発生すると、プリントシステムでは印刷ジョブ情報内のオリジナルプリンタ名を参照し、オリジナルプリンタ名に対応する基本プリントキューからアプリケーションにイベントを通知する。また、イベントにはオリジナルジョブＩＤおよび排紙先プリンタ名を含む。
【００２０】
また、上記方法によってアプリケーションは自身が印刷指示をしたプリントキューを監視するだけで、印刷ジョブに起こったイベントの通知を受けることが可能となり、イベントに含まれるオリジナルジョブＩＤを参照することで、容易に印刷ジョブの管理を行なうことが可能となる。
【００２１】
＜システム構成＞
図１は、本発明の実施形態に係るプリントシステムの全体構成を示すブロック図である。本プリントシステムは、情報処理装置としてのプリントサーバ１０１と、印刷装置（プリントデバイス）としてのネットワークプリンタ１０２〜１０５と、クライアント（コンピュータ）１０７、１０８とを含み、これらが互いに接続されていることにより、全体としてネットワークを構成している。
【００２２】
プリントサーバ１０１には、印刷制御プログラムが実行可能に格納されており、本プリントシステムに含まれるネットワークプリンタ１０２〜１０５を管理する機能のほか、ネットワークで使用されるファイルを蓄積したり、ネットワークの使用状態を監視したりする機能を有する。具体的には、プリントサーバ１０１は、自身により印刷ジョブを作成し、ネットワークプリンタ１０２〜１０５に転送する機能と、クライアント１０７で生成された印刷データを受信し、その印刷データを含む印刷ジョブを生成してスケジューリング処理によりネットワークプリンタ１０２〜１０５に転送する機能と、クライアント１０７、１０８で作成され、そこにスプールされている印刷ジョブに対してスケジューリング処理を行い、クライアント１０７、１０８からネットワークプリンタ１０２〜１０５に直接印刷ジョブを転送するよう指示する機能とを有する。プリントサーバ１０１は、必ずしもプリンタの管理に特化したコンピュータである必要はなく、プリント管理機能を備えた汎用のコンピュータであればよく、他のコンピュータとの関係でクライアントとして機能してもよい。
【００２３】
ネットワークプリンタ１０２〜１０５は、プリントサーバ１０１やクライアント１０７から、印刷データを含む印刷ジョブを受信し、受信した印刷ジョブを解析して印刷する物理的な装置としてのプリントデバイスである。ネットワークプリンタ１０２〜１０５としては、電子写真方式を採用したレーザービームプリンタやインクジェット方式を採用したインクジェットプリンタや熱転写方式を利用したプリンタ等、あらゆる方式の印刷装置を採用することができる。
【００２４】
クライアント１０７、１０８は、プリントサーバ１０１との関係でクライアントとして機能するコンピュータである。
【００２５】
なお、本プリントシステムに含まれる装置間の通信は、イーサネット（登録商標）ケーブルなどを利用した有線通信でもよいし、電波や光などを利用した無線通信でもよい。
【００２６】
＜プリントサーバ及びクライアントの構成＞
図２は、図１に示したプリントサーバ１０１及びクライアント１０７、１０８のハードウェア構成を説明するブロック図である。プリントサーバ１０１及びクライアント１０７、１０８は、ハードウェア構成上、特別な差異はないため、ここでは代表的に、プリントサーバ１０１の構成について説明する。
【００２７】
図２において、ＣＰＵ２００は、ＨＤ（ハードディスク）２０５に格納されているアプリケーションプログラム、プリンタドライバプログラム、ＯＳや印刷制御プログラム等を読出して実行し、ＲＡＭ２０２にプログラムの実行に必要な情報、ファイル等を一時的に格納制御を行なうための制御手段である。
【００２８】
ＲＯＭ２０１は、基本Ｉ／Ｏプログラム等のプログラム、文書処理の際に使用するフォントデータ、テンプレート用データ等の各種データを記憶する記憶手段である。ＲＡＭ２０２は、ＣＰＵ２００の主メモリやワークエリア等として機能する一時記憶手段である。
【００２９】
ＦＤ（フロッピー（登録商標）ディスク）ドライブ２０３は、後述する図５に示すように記憶媒体としてのＦＤ２０４に記憶されたプログラム等を本コンピュータシステムにロードするための記憶媒体読み込み手段である。なお、プリントサーバ１０１及びクライアント１０７、１０８は、ＦＤドライブ２０３に代えて、或いはＦＤドライブ２０３と共に、他の記憶媒体読込手段を備えてもよい。他の記憶媒体としては、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＰＣカード、ＤＶＤ、ＩＣメモリカード、ＭＯ、メモリスティック等、コンピュータが読み取り可能なあらゆる記憶媒体が挙げられる。
【００３０】
ＨＤ２０５は、大容量メモリとして機能する外部記憶手段であり、アプリケーションプログラム、プリンタドライバプログラム、ＯＳ、印刷制御プログラム、及び関係プログラム等を格納している。さらに、スプール手段であるスプーラはここに確保される。なお、プリントサーバ１０１ではスプール手段としてサーバスプーラが確保され、クライアントではスプール手段としてクライアントスプーラが確保される。
【００３１】
キーボード２０６は、ユーザがプリントサーバ１０１やクライアント１０７、１０８に対して、デバイスの制御コマンドの命令等を入力指示するための指示入力手段である。
【００３２】
ディスプレイ２０７は、キーボード２０６から入力したコマンドや、プリンタ１０２〜１０５の状態等を表示する表示手段である。尚、実際にはプリントサーバ１０１及びクライアント１０７、１０８上で稼動するオペレーティングシステムを介して表示手段に表示指示がなされ、このオペレーティングシステムに本印刷処理プログラムによりリソースファイルの表示指示が行われ、後述する各表示が実現される。２０８はシステムバスであり、プリントサーバ１０１またはクライアント１０７，１０８としてのコンピュータ内のデータの流れを司るものである。
【００３３】
またインタフェース２０９は、入出力手段であり、プリントサーバ１０１またはクライアント１０７，１０８は、インタフェース２０９を介してネットワーク上の他の装置とのデータのやり取りを行なう。
【００３４】
＜メモリマップ等の説明＞
図３は、図２に示したＲＡＭ２０２のメモリマップの一例を示す図であり、印刷制御プログラムが、ＲＡＭ２０２にロードされ実行可能となった状態のメモリマップである。  図５は、図２に示したＦＤドライブ２０３に対して挿入されるＦＤ２０４との関係を示す図であり、図２と同一のものには同一の符号を付してある。同図において、ＦＤ２０４には、印刷制御プログラム及び関係データを格納している。
【００３５】
印刷制御プログラム及び関係データは、予めＦＤ２０４からＨＤ２０５にインストールされて、ＨＤ２０５からＲＡＭ２０２にロードするようにしてもよいしＦＤ２０４から直接ＲＡＭ２０２にロードして実行させてもよい。さらに、印刷制御プログラムをＲＯＭ２０１に記憶しておき、これをメモリマップの一部となすように構成し、直接ＣＰＵ２００で実行することも可能である。また、以上の各装置と同等の機能を実現するソフトウェアをもって、ハードウェア装置の代替として構成することもできる。
【００３６】
印刷制御プログラムは、クライアントにおいては、印刷ジョブの印刷先の変更を指示したり、印刷順序を変更したりする指示をするための制御を行なう。一方、プリントサーバにおいては、印刷ジョブの順序制御を行ったり、印刷ジョブの印刷終了や印刷先変更要求などを通知したりする。また、印刷制御プログラムは、クライアントにインストールされるモジュールと、プリントサーバにインストールされるモジュールとを別々に含んでいてもよいし、ひとつの印刷制御プログラムが、実行される環境によりクライアント用として機能したり、プリントサーバ用として機能したりするようにしてもよい。あるいは、一台のコンピュータに、クライアント用の機能を持つモジュールとプリントサーバ用として機能するモジュールとをともにインストールし、同時にあるいは時分割で、擬似的に平行動作させる構成も可能である。
【００３７】
３０１は基本Ｉ／Ｏプログラムを記憶するための領域である。基本Ｉ／Ｏプログラムは、装置（プリントサーバ１０１またはクライアント１０７，１０８）の電源がＯＮされたときに、ＨＤ２０５からＯＳがＲＡＭ２０２に読み込まれ、ＯＳの動作を開始させるＩＰＬ（イニシャルプログラムローデイング）機能などを有しているプログラムである。
【００３８】
３０２はＯＳ（オペレーティングシステム）を記憶する領域であり、３０３は印刷制御プログラムを記憶する領域である。３０４は、関係データを記憶する領域である。３０５はワークエリアで、ＣＰＵ２００が各種のプログラムを実行するための領域である。
【００３９】
図４は、図２に示したＦＤ２０４のメモリマップの一例を示す図である。図４において、４００はＦＤ２０４のデータ内容であり、データの情報を示すボリューム情報４０１と、ディレクトリ情報４０２と、印刷制御プログラム４０３と、その関係データ４０４を含んでいる。
【００４０】
＜プリントシステムのソフトウェア構成＞
次に、本プリントシステムのソフトウェア構成について説明する。図６Ａは、サーバ１０１或いはクライアント１０７，１０８におけるソフトウェア構成の一例を示す図である。それぞれの構成間の矢印は、アプリケーションから発行された描画コマンドを含む印刷ジョブが、どのように処理されるかを示したものである。また、各ブロックで示されたソフトウェア構成は、図２のＣＰＵ２００によって実行され、所望の機能を実現する。
【００４１】
通常、Ｍｉｃｒｏｓｏｆｔ  Ｗｏｒｄ（登録商標）などの一般的なアプリケーションプログラム６０１は印刷の指示を受け付けると、一連の描画コマンドをＯＳを介して生成する。ＯＳを介して生成された描画コマンドを受け取ったＰＤＬドライバ６０２は、一連の描画コマンドに基づいてネットワークプリンタ１０２〜１０４で解釈可能なＰＤＬファイルを含む印刷ジョブを生成する。なお、以下の説明ではＰＤＬドライバを例に説明を行なうが、これに限定されるものではなく、例えば、ＢＤＬ（Ｂａｎｄ  ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）や、圧縮ビットマップを作成するプリンタドライバ、或いは、アプリケーション及びＯＳによりプリンタドライバを介さずに印刷データを生成する形態などにも適用可能であることはいうまでもない。
【００４２】
ＰＤＬドライバ６０２は、プリントデバイスへ印刷ジョブを送信するためにＯＳが用意したジョブ制御ポートモニタ６０８ではなく、ジョブ制御ポートモニタ６０４に送信すべく、生成した印刷ジョブをスプーラ６０３に渡す。
【００４３】
ここではＯＳをウィンドウズ（登録商標）と仮定しているのでスプーラ６０３はウィンドウズ（登録商標）スプーラである。ただし、本発明を適用するコンピュータのＯＳはＷｉｎｄｏｗｓ（登録商標）に限定されるものではなく、描画命令を備えるものであれば他のＯＳも適用可能であることは言うまでもない。
【００４４】
スプーラ６０３は、ユーザがユーザインタフェースを介して選択し指示したポートモニタ６０４、６０８に印刷ジョブを渡して、ネットワークプリンタ１０２〜１０４等のプリントデバイスに送信させる手順をとる（矢印ａ）。ここでは、ユーザはあらかじめ負荷分散印刷用のポートモニタ６０４（以降、ジョブ制御ポートモニタと略記）を指定して印刷を指示したものとして説明を進める。
【００４５】
また、プリンタドライバインタフェースを介して設定された用紙サイズ、ステープル指示等の印刷設定情報も、ジョブ制御ポートモニタ６０４に送信される。
【００４６】
ジョブ制御ポートモニタ６０４は、印刷ジョブをそのままプリントデバイス１０２〜１０４に送信するのではなく、負荷分散印刷用のプリントサービス６０５（以降、ジョブ制御プリントサービスと称する）に送信する（矢印ｂ）。
【００４７】
ジョブ制御プリントサービス６０５は、転送された印刷ジョブ及びデバイスの状態を管理する機能を備える。特にプリントデバイスとデータ転送元とがピアツーピアで接続され直接印刷ジョブをプリントデバイスに投入する場合には、プリントデバイスから通知されるデバイス状態やジョブの状態などの情報を管理したり、また、プリントデバイスに対して所定の命令をする機能も備える。これは、複数のネットワークプリンタ１０２〜１０４のデバイス情報やジョブ情報を管理する機能に相当する。そして、印刷ジョブの順序管理機能（負荷分散印刷機能）に基づき順番が到来した印刷ジョブをネットワークプリンタ１０２〜１０４に転送する（矢印ｃ、ｄ）。
【００４８】
ここで、ジョブ制御プリントサービス６０５が実現する印刷ジョブの順序管理機能について詳しく説明する。この順序管理機能には、複数のプリントデバイスに対応する複数のプリントキューのうち、負荷分散印刷用として設定されたプリントデバイスに対応するプリントキュー以外のプリントキューをバックアッププリントキューとして設定するプリントキュー設定機能と、
ジョブ制御ポートモニタ６０４から転送された印刷ジョブ情報を負荷分散印刷用プリントキュー（基本プリントキューとも呼ぶ）に登録する印刷ジョブ登録機能と、
負荷分散印刷用プリントキューに登録された印刷ジョブ情報に対応するバックアップジョブ情報を生成して、バックアッププリントキューに登録するバックアップジョブ登録機能と、
負荷分散印刷用プリントキュー及びバックアッププリントキューのそれぞれを管理し、印刷ジョブ情報が登録されているプリントキューにおいては、優先的に印刷ジョブ情報を対応する印刷装置に送信し、印刷ジョブ情報が登録されておらず、バックアップジョブ情報のみが登録されているプリントキューでは、そのバックアップジョブ情報を印刷ジョブ情報に変更して対応する印刷装置に送信するジョブ制御機能と、
負荷分散印刷用プリントキュー及びバックアッププリントキューにおいて、登録されている印刷ジョブ情報及びそれに対応するバックアップジョブ情報の何れか１つが印刷装置に送信された場合には、送信の対象とならなかった印刷ジョブ情報またはそれに対応するバックアップジョブ情報を全てのプリントキューから削除する削除機能と、
を含む。
【００４９】
プリントマネージャ６０９は、ユーザが、ジョブ制御プリントサービス６０５内部でプリントジョブがどのような状態にあるかを調べたり、プリントジョブを操作したりするためのユーザインタフェースを提供するプログラムである。プリントマネージャ６０９は、ジョブ制御プリントサービス６０５のソフトウェアのインタフェース（ＡＰＩ：Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を介して、ジョブ制御プリントサービス６０５と情報・指示をやり取りしている。
【００５０】
そして、主に、ジョブ制御プリントサービス６０５が管理するネットワークプリンタ１０２〜１０４の状態情報をイベントとして取得する機能を備える。イベントの通知の種別としては、トナー残量が少なくなった警告、クライアントとデバイスとの通信障害、メモリ不足、排紙トレイ満載などのエラー／警告情報の通知や、エラー状態から正常状態に復帰した正常情報の通知などが想定される。ここでのジョブ制御プリントサービス６０５はネットワークを介して通信可能な各デバイス（印刷装置）の印刷実行中、電力制御状態、障害情報（紙ジャム）等のステータスを監視する機能を備える。
【００５１】
更に詳細な処理としては、プリントマネージャ６０９がジョブ制御プリントサービス６０５に対してデバイスを指定したイベントを発行し、ジョブ制御プリントサービス６０５は発行されたイベントに基づくデバイスのステータスを監視して、監視に基づく結果をプリントマネージャ６０９に通知する。
【００５２】
マネージメントコンソール６１０は、ソフトウェアがアクセスするためのＡＰＩを介して、ジョブ制御プリントサービス６０５と情報・指示をやり取りすることで、サーバ１０１またはクライアント１０７，１０８の全体を監視することができる。
【００５３】
また、ジョブ制御プリントサービス６０５は、デバイス情報コントロールモジュール６０６を用いて各ネットワークプリンタ１０２〜１０４と通信を行い、各プリンタ内の印刷ジョブや動作状態に関する情報を入手したりする機能を明示したものでありジョブ制御プリントサービス６０５に含めるように考えても良い。
【００５４】
一方、負荷分散印刷を行なわず、一般的なオペレーティングシステムに標準で搭載されるようなプリント機能を利用する場合においては、ＰＤＬプリンタドライバ６０２で生成されたＰＤＬファイルはスプーラ６０３からジョブ制御ポートモニタ６０８を経て（矢印ｅ）、ネットワークプリンタ１０２〜１０４に転送される（矢印ｆ）。
【００５５】
次に、図６Ａを用いて説明したシステムの変形例について、図６Ｂを参照して説明する。図６Ｂは、負荷分散印刷に必要な機能を、クライアント１０７，１０８とサーバ１０１とが分担し、それぞれが協力し合って実現する場合について表わしたものである。具体的には、クライアント１０７、１０８で作成し、サーバ１０１側のプリントキューに登録された印刷ジョブ情報に対し、プリントサーバ１０１がスケジューリング行なう場合のデータの流れを示している。なお、図６Ａと同じ構成は同じ符号で表わしている。
【００５６】
図６Ｂのシステムでは、クライアント１０７，１０８は、マネージメントコンソール６１０やデバイス情報コントロールモジュール６０６をもつ必要はなく、サーバ１０１がそれらを有することにより、一括してプリントデバイスのデバイス情報を管理する。また、サーバ１０１は、ジョブ制御サーバ６１２を有し、デバイス情報コントロールモジュール６０６を用いて各プリントデバイス１０２〜１０４と通信を行い、各プリンタ内の印刷ジョブや動作状態に関する情報を入手したり、操作を行ったりする。入手した情報は、ジョブ制御プリントサービス６０５に渡し共有すことができる。
【００５７】
また、ジョブ制御サーバ６１２は、個々のクライアント１０７、１０８上のジョブ制御プリントサービス６０５がプリントデバイス１０２〜１０４に印刷ジョブを送信するタイミングを集中制御（スケジューリング）する。ジョブ制御サーバ６１２は基本的にジョブ制御プリントサービス６０５と同様の機能を備えており、論理的にジョブ制御プリントサービス６０５とジョブ情報を共有している。ここでジョブ情報とは、印刷対象となるドキュメント名や、印刷ジョブのＩＤや、印刷ジョブが投入されたプリンタ名など、印刷ジョブの各種属性情報である。
【００５８】
つまり、図６Ａで説明した、印刷ジョブの順序管理機能（負荷分散印刷制御機能）は図６Ｂではサーバ１０１のみに設けられていてもよく、クライアント１０７，１０８で生成された一旦保持される印刷ジョブを、どういう順序でどのプリントデバイスへ投入すべきかが、ジョブ制御サーバ６１２からジョブ制御プリントサービス６０５に通知される。ジョブ制御プリントサービス６０５ではジョブ制御サーバ６１２からの指示に従い、印刷ジョブをネットワークプリンタ１０２〜１０４に対して転送する。
【００５９】
なお、プリントシステムのソフトウェア構成は、図６Ａ、図６Ｂに限定されるものではなく、その他の様々な構成でも本発明を実現可能である。例えば、クライアントが、アプリケーション６０１からジョブ制御サポートモニタ６０４までの構成のみを備え、ジョブ制御プリントサービス６０５、プリントマネージャ６０９、マネージメントコンソール６１０、デバイス情報コントロールモジュール６０６をサーバ１０１が備えていてもよい。
【００６０】
＜印刷ジョブの流れ＞
次に、図７を用いてアプリケーション６０１からプリントデバイスまでの印刷ジョブの流れについて説明する。ここで、図６Ａと同じソフトウェア構成について同じ参照番号を付与しており、その機能については詳説しない。
【００６１】
図７に示すように、概念的には、ＰＤＬドライバ６０２、スプーラ６０３、ジョブ制御ポートモニタ６０４は、プリントデバイス１０２〜１０４ごとに用意されている。ＯＳがウィンドウズ（登録商標）の場合には、これらをまとめてウィンドウズ（登録商標）プリントシステム７００と称する場合もある。
【００６２】
ジョブ制御プリントサービス６０５には、プリントデバイス１０２〜１０４に対応する数のプリントキュー７０１、７０１Ａ、７０１Ｂ及び出力ポート７０２、７０２Ａ、７０２Ｂが含まれている。この出力ポートには対応する印刷装置のＩＰアドレス又は名前解決（ＤＮＳ：Ｄｏｍａｉｎ  Ｎａｍｅ  Ｓｙｓｔｅｍ）で使用されるネームが関連付けられている。そして、このＩＰアドレス又はネームに基づきジョブの送信先が特定されジョブの送信（出力）が行なわれる。プリントキューは、ある所定のジョブが投入された１つの基本プリントキュー７０１と複数のバックアッププリントキュー７０１Ａ、７０１Ｂとに分類されている。なお、本実施形態では、物理的な装置であるプリントデバイス単位にプリントキューを設定することとしているが、本願発明はこれに限定されるものではなく、論理プリンタ単位にプリントキューを設定してもよい。つまり、複数のプリントデバイスに対して１つの論理プリンタを設定して、その論理プリンタについて１つのプリントキューを設定しても良いし、更には、１つのプリントデバイスに対して複数の論理プリンタを設定して、その複数の論理プリンタのそれぞれに対してプリントキューを設定してもよい。
【００６３】
負荷分散印刷を行なう場合、アプリケーション６０１は、負荷分散印刷の設定を持つプリンタを指定して印刷指示を発行する。この印刷指示に基づいてＰＤＬドライバ６０２によって生成された印刷ジョブがジョブ制御ポートモニタ６０４からジョブ制御プリントサービス６０５に渡されると、その印刷ジョブ情報は、まずプリントキュー７０１に保持され、同時に、その印刷ジョブ情報に対応する仮想ジョブ情報がバックアッププリントキュー７０１Ａ、７０１Ｂに生成される。そして、それらのジョブのうち何れか１つがプリントデバイス１０２〜１０４に送られる。バックアッププリントキューに対応するプリントデバイスは、バックアッププリンタと呼ばれ、ユーザが指定したプリントデバイスが混雑している場合などに利用される予備的なプリントデバイスを指す。
【００６４】
＜各種の情報の内容＞
Ｉ．プリントキューの実ジョブキューと仮想ジョブキュー
図８は、プリントキュー７０１内の実ジョブキュー８０１と仮想ジョブキュー８０２を示す図である。実ジョブキュー８０１と仮想ジョブキュー８０２は、負荷分散印刷処理を行なう場合に使用する、印刷ジョブ情報を管理するキューである。そして、各論理プリンタ毎に図８に示されるような実ジョブキューと仮想ジョブキューとから構成されるプリントキューが対応付けられることとなる。また、１つの印刷装置に対して論理プリンタが１つの場合には、図８に示されるプリントキューは印刷装置に対応するプリントキューに相当することとなる。そしてこのプリントキューがあると時は基本プリントキューとなり、ある時はバックアッププリントキューとして機能する。
【００６５】
上述したように、実ジョブ情報は、印刷データそのものは含まないが、スプールファイル名などの印刷データへのリンクを含む印刷ジョブ情報で、実ジョブキューで管理される。また、仮想ジョブ情報は実ジョブ情報へのリンク（実ジョブ情報のＩＤ）を含み、印刷データはもちろんのこと、印刷データへのリンクも含まない。そして、仮想ジョブ情報は、仮想ジョブキューで管理される。
【００６６】
ＩＩ．プリントキュー情報
図９は、プリントキュー７０１で受け付けた印刷ジョブの動作を決めるプリントキュー情報を示す図である。ここで、プリントキュー情報の設定内容の、プリンタ名、プリンタドライバ名、プリントタイプ、及びバックアッププリンタ名について説明する。なお、図９の情報は図６Ａのようなシステム形態では、ジョブ制御プリントサービス６０５において保持され、図６Ｂのようなシステム形態ではジョブ制御プリントサービス６０５及びジョブ制御サーバ６１２の双方において共有して保持されるものとする。
【００６７】
プリンタ名は、Ｗｉｎｄｏｗｓ（登録商標）のプリンタオブジェクトの名前を示しており、プリンタオブジェクト毎に異なる名前であり、プリンタオブジェクトを識別することができる。このプリンタ名を介して本印刷制御プログラムとＯＳとが対話できる。プリンタドライバ名は、プリンタオブジェクトに設定されているプリンタドライバの名前である。プリントタイプは、プリントキューで受け付けた印刷ジョブの動作を決定する設定である。バックアッププリンタ名は、負荷分散印刷処理などの場合に使用される負荷分散印刷するためのプリンタの名前である。プリントタイプに負荷分散印刷の設定がなされていて、プリントキュー７０１で印刷ジョブを受け付けると、後述する方式によって受け付けたプリントキュー（負荷分散プリントキューとする）とプリントキュー情報に設定されている複数のバックアッププリンタの中から、先に転送可能なプリンタに印刷ジョブを移動し、複数のプリンタの中で印刷の負荷を分散する処理を行なう。
【００６８】
ＩＩＩ．実ジョブ情報
図１０は、プリントキュー７０１の実ジョブキューに登録される印刷ジョブ情報を示す図である。図１０の情報は図９と同様に図６Ａのようなシステム形態では、ジョブ制御プリントサービス６０５において保持され、図６Ｂのようなシステム形態ではジョブ制御プリントサービス６０５及びジョブ制御サーバ６１２の双方において共有して保持される。
【００６９】
実ジョブは、所定の記憶領域にスプールされた印刷データを含む印刷ジョブであり、出力ポートに送られて実際に転送処理が行われプリンタで出力される印刷ジョブである。実ジョブ情報は、実ジョブに含まれる各種の設定情報であり、プリントキュー７０１に登録される。
【００７０】
以下、実ジョブ情報の設定内容（ドキュメント名、ジョブＩＤ、プリントタイプ、仮想ジョブＩＤ、オリジナルジョブＩＤ、オリジナルプリンタ名、スプールファイル名）について説明する。
【００７１】
ドキュメント名はアプリケーション７０１が印刷するジョブ（印刷データファイル）の名前である。
【００７２】
ジョブＩＤは実ジョブ情報に割り振られる任意のＩＤでジョブを識別するためのＩＤである。プリントキュー７０１が印刷ジョブを受け付けるとそのジョブにジョブＩＤを割り当てる。
【００７３】
プリントタイプは、図９と同様であり実ジョブの動作を決定する情報で、負荷分散印刷などの情報が設定される。プリントキュー７０１が実ジョブ情報を受け付けると、プリントタイプから情報を取得し実ジョブ情報のプリントタイプに設定する。
【００７４】
仮想ジョブＩＤは、負荷分散印刷処理を行なう場合に作成される仮想ジョブ情報のＩＤを設定する。複数の仮想ジョブ情報が発生する場合には、仮想ジョブＩＤは複数設定される。
【００７５】
オリジナルジョブＩＤは、基本プリントキューに投入された最初の実ジョブのＩＤを指しており、実ジョブが生成されるとき、仮想ジョブが実ジョブに変化するときに設定される。
【００７６】
オリジナルプリンタ名は、基本プリントキューに対応するプリンタの名前であり、最初にアプリケーションから印刷指示が投入されるプリンタの名前である。尚、オリジナルプリンタ名としては、オリジナルのプリントキューに対応する識別情報であれば、名称に限らず様々なものが適用できる。また、プリンタキューとプリンタ名とが対応するので、プリンタ識別情報とはプリンタキュー識別情報と定義することもできる。
【００７７】
スプールファイル名は、アプリケーションデータに基づき作成された印刷データからなるスプールファイルの名前であり、所定の記憶部に記憶されたスプールファイルを特定するために利用される。スプールファイル名の代わりにスプールファイルＩＤを採用するようにしても良い。実ジョブ情報に基づくジョブ出力が対応する印刷装置に対して行なわれる場合に、前記実ジョブ情報に関連付けられたスプールファイル名に基づき特定される印刷データが印刷装置に対して出力されるべく出力ポートに書きこまれる
ＩＶ．仮想ジョブ情報
図１１は、プリントキュー７０１の仮想ジョブキューに登録される仮想ジョブ情報を示す図である。図１１の情報は図９、１０と同様に図６Ａのようなシステム形態では、ジョブ制御プリントサービス６０５において保持され、図６Ｂのようなシステム形態ではジョブ制御プリントサービス６０５及びジョブ制御サーバ６１２の双方において共有して保持される。
【００７８】
仮想ジョブ情報は、負荷分散の実ジョブ情報と関連する情報で、負荷分散印刷処理でスケジュール管理するために必要な情報である。
【００７９】
以下、仮想ジョブ情報の設定内容のドキュメント名、ジョブＩＤ、プリントタイプ、実ジョブＩＤについて説明する。
【００８０】
ドキュメント名は、仮想ジョブ情報に対応する実ジョブ情報の印刷対象ドキュメント名であり、仮想ジョブ情報が作られるときに、実ジョブ情報からコピーされる。
【００８１】
ジョブＩＤは仮想ジョブ情報を識別するためのＩＤで、仮想ジョブ情報が作成されるときに設定される情報である。
【００８２】
プリントタイプは、仮想ジョブ情報に対応する実ジョブのプリントタイプであり、仮想ジョブが作成されるときに、実ジョブ情報のプリントタイプからコピーされる。
【００８３】
実ジョブＩＤは、仮想ジョブ情報と関連する実ジョブ情報のＩＤであり、仮想ジョブ情報が作成されるときに設定される情報である。
【００８４】
尚、図１１中には、図１０において説明した印刷データを特定するためのスプールファイル名が含まれていないが、事前に仮想ジョブ情報にスプールファイル名を含めるようにして、後述する実ジョブ情報の変更の際に、この事前に関連付けられたスプールファイル名を用いるようにしても良い。
【００８５】
＜負荷分散処理＞
本実施形態の負荷分散印刷処理では、アプリケーションが印刷指示を行ったプリンタの負荷分散印刷設定に従って、負荷分散プリンタのプリントキューに実ジョブ情報を、バックアッププリンタのバックアッププリントキューに仮想ジョブを生成し、その中で、転送開始指示（スケジュールアップ）の早い印刷ジョブがプリントデバイスに転送される。
【００８６】
図１９は、本実施形態の負荷分散処理の、アプリケーション６０１の印刷指示からジョブ登録処理までのジョブ制御プリントサービス６０５における処理を示すフローチャートである。図２１、図２２の参照を示すが、各図の説明は後述する。
【００８７】
ステップＳ１９０１において、アプリケーション６０１が本実施形態の負荷分散印刷システムにおいて基本プリントキュー（ここでは、プリントキュー７０１）に印刷する場合、通常の印刷とは違い、アプリケーション６０１はＷｉｎ３２ＡＰＩ（図２２、２２０１）を通じてＧＤＩ（図２２、２２０２）に印刷指示するのではなく、本発明のアプリケーションインタフェースであるＡＰＩを通してジョブ制御プリントサービス６０５にドキュメント名 “ＡＢＣ”の印刷指示を行なうことで、ジョブ制御プリントサービス６０５が印刷指示を受け付ける（図２１シーケンス２１０４、図２２矢印ｂ）。
【００８８】
ステップＳ１９０２では、印刷指示を受け付けたジョブ制御プリントサービス６０５は該印刷指示に対応する印刷ジョブ情報（図１０）を生成し、ジョブＩＤ（ここではこのジョブ情報のジョブＩＤを「７」とする）を発行する。この段階ではジョブ情報にはジョブＩＤのみ設定されている。
【００８９】
ステップＳ１９０３において、ドキュメント名（ここでは“ＡＢＣ”）にジョブＩＤ（ここでは「７」）を付加し、ＡＰＩを通してＧＤＩ２２０２に印刷開始を指示する（図２１シーケンス２１０５、図２２矢印ｃ）。このとき、使用するドキュメント名としては、元のドキュメント名とジョブＩＤが判別できるものであれば形式は問わない。
【００９０】
ジョブ制御プリントサービス６０５はステップＳ１９０４において、アプリケーション６０１に発行したジョブＩＤ（ここでは「７」）を返す（図２１シーケンス２１０７、図２２矢印ｅ）。
【００９１】
これらの処理によって、本発明の負荷分散印刷システムが管理するジョブＩＤをアプリケーション６０１に通知することが可能となる。
【００９２】
その後、アプリケーション６０１では通常の印刷処理と同じようにＧＤＩ２２０２に対して印刷データの転送開始、印刷データの転送、印刷データの転送終了を繰り返し行い（図２１シーケンス２１０８、２１０９…、図２２矢印ｆ、ｇ…）、すべての印刷が完了すると、ジョブ制御プリントサービス６０５に対して印刷終了を指示する。
【００９３】
ステップ１９５０において、ジョブ制御プリントサービス６０５はアプリケーション６０１から印刷終了を受け取る（図２１シーケンス２１１２、図２２矢印ｌ）。そしてステップＳ１９０６において、ＧＤＩに対して印刷終了を指示する（図２１シーケンス２１１３、図２２矢印ｍ）。
【００９４】
これでアプリケーション６０１の印刷処理は終了となる。
【００９５】
図１２は、本実施形態の負荷分散印刷処理の印刷データ受付から仮想ジョブ作成までの処理を示すフローチャートである。
【００９６】
図１３は、図１２のフローチャートの処理を説明した図である。図１３では、プリントキュー７０１の実ジョブキュー８０１にジョブＩＤが「１」の実ジョブ情報、別のプリントデバイスに対応するバックアッププリンタ７０１Ａに実ジョブキュー８０１ＡにジョブＩＤが「５」の実ジョブ情報があり、それぞれの実ジョブ情報に対応する印刷データを、プリントデバイスへ転送中であるという前提で説明している。尚、このジョブＩＤ「５」の実ジョブ情報は、例えば他のクライアントから発行されたジョブがバックアッププリントキュー７０１Ａに対応するプリントキューを基本プリントキューとして印刷指示を行った場合に登録されるものに対応する。その場合には、プリントキュー７０１および７０１Ｂが夫々バックアッププリントキューとされ夫々のバックアッププリントキューにおける仮想ジョブキューに仮想ジョブ情報が登録される。
【００９７】
アプリケーション６０１からの印刷が終了すると、ステップＳ１２０１において、ジョブ制御プリントサービス６０５は、スプーラ６０３、ジョブ制御ポートモニタ６０４経由で印刷ジョブを受け付ける（図２２矢印ｐ）。このとき、印刷ジョブのドキュメント名とは“ＡＢＣ＃ＪＩＤ７”である。
【００９８】
ジョブ制御プリントサービス６０５では、ステップＳ１２０２において、受け付けた印刷ジョブのドキュメント名に付加されているジョブＩＤ（ここでは「７」）を基にジョブ制御プリントサービス６０５が管理するジョブ情報を検索する。
【００９９】
ステップＳ１２０３において、ジョブ制御プリントサービス６０５は、検索したジョブＩＤ「７」のジョブ情報と受け付けた印刷ジョブを関連付け、印刷ジョブ情報のプリントキューに印刷ジョブを登録し、ステップＳ１２０４において、プリントキュー７０１は印刷ジョブを受け付ける。このとき、ジョブ制御ポートモニタ６０４から得たスプールファイル名を印刷ジョブ情報に設定する。
【０１００】
ステップＳ１２０５において、プリントキュー情報から、プリンタ名、プリントタイプを得て印刷ジョブ情報に設定し、プリントタイプを参照し、負荷分散印刷であるかを確認する。負荷分散印刷であれば、ステップＳ１２０６に処理を移行する。負荷分散印刷でなければ、ステップＳ１２１４に進む。ステップＳ１２０６では、複数のプリントキューのうちのジョブが投入されたプリンタのプリントキューが基本プリントキューとして設定され、この基本プリントキューの実ジョブキューに受け付けた印刷ジョブの実ジョブ情報を作成し、各情報を設定する。
【０１０１】
ここで、ドキュメント名はジョブ制御ポートモニタからジョブを受け付けるときに取得したドキュメント名（ここでは“ＡＢＣ＃ＪＩＤ７”）からジョブＩＤを取り除いたもの（ここでは“ＡＢＣ”）に設定し、ジョブＩＤはジョブ情報を作成するときに生成したジョブＩＤ（ここでは「７」）に設定する。また、オリジナルジョブＩＤにジョブＩＤ（ここではジョブＩＤ「７」）を設定し、オリジナルプリンタ名にプリンタ名（ここではプリンタ名「７０１」）を設定する。
【０１０２】
本実施の形態の場合には、プリントキュー情報のプリントタイプは負荷分散印刷であるため、実ジョブ情報のプリントタイプには、負荷分散印刷が設定される。ステップＳ１２０７において作成された実ジョブ情報をプリントキュー７０１の実ジョブキュー８０１に登録する（図１３のジョブＩＤ「７」のジョブ）。ステップＳ１２０８において、プリントキュー情報のバックアッププリンタ名を取得する。複数設定されている場合には、複数のバックアッププリンタ名を取得する。そして、バックアッププリンタ名に対応するプリントキューがバックアッププリントキューとして設定される。
【０１０３】
次に、ステップＳ１２０９において、取得した複数のバックアッププリンタ名の各々から特定されるバックアッププリントキュー順に、仮想ジョブ情報を作成し、各情報を設定する。
【０１０４】
ドキュメント名は、実ジョブ情報のドキュメント名から情報を取得し設定する。ジョブＩＤは仮想ジョブ情報を作成するときに生成し設定する。プリントタイプは、実ジョブ情報のプリントタイプの情報から取得し設定する。実ジョブＩＤは実ジョブ情報のジョブＩＤから取得し設定する。
【０１０５】
ステップＳ１２１０において、実ジョブ情報の仮想ジョブＩＤに仮想ジョブ情報のジョブＩＤを設定する。仮想ジョブは複数発生する場合があるため、仮想ジョブが作成される順に仮想ジョブＩＤ１、仮想ジョブＩＤ２、…と設定していく。
【０１０６】
ステップＳ１２１１において仮想ジョブ情報を仮想ジョブキュー８０２Ａに登録する（図１３のジョブＩＤ「８」のジョブ）。
【０１０７】
ステップＳ１２１２において、ステップＳ１２０８で取得したバックアッププリンタ（バックアッププリントキュー）が残っていれば、ステップＳ１２０９に処理を移行する。
【０１０８】
図１３では、ステップＳ１２０８で取得したバックアッププリンタが２つある場合を想定して説明しているため、仮想ジョブ情報は、２つ作成され、夫々、仮想ジョブキュー８０２Ａ、８０２ＢにジョブＩＤが「８」と「９」の仮想ジョブが作成され、実ジョブ（ジョブＩＤ  が７）の実ジョブ情報に関連付けられた仮想ジョブには、「８」と「９」のジョブＩＤが設定される。また、ジョブＩＤが「８」と「９」の仮想ジョブ情報内の実ジョブＩＤには、「７」が設定される。
【０１０９】
ステップＳ１２１２において、ステップＳ１２０８で取得したバックアッププリンタが残っていなければ、ステップＳ１２１３に移行し、作成した実ジョブと全ての仮想ジョブのスケジュール要求を発行する。
【０１１０】
図１４は、各プリントキュー７０１、７０１Ａ、７０１Ｂの各々から発行されるアクションに対するスケジュール処理を示す図である。ジョブ制御プリントサービス６０５における処理に相当する。
【０１１１】
ステップＳ１４０１では、各プリントキューのスケジュールの管理を行い、何れかのプリントキューにジョブを登録したモジュール（例えばジョブ制御ポートモニタ）からのスケジュール要求、印刷ジョブの送信完了（出力ポートからの、プリンタデバイスへ印刷データを送信終了したことを示す情報）、印刷ジョブの削除、印刷ジョブの完了（最終ページ排紙通知）、デバイス復帰通知（例えば電源ＯＦＦからＯＮ状態になった場合になど、動作不可能な状態から動作可能な状態に移行したことを示すイベント）などのアクションを監視する。各プリントキューに対する、上記アクションが発生すると、ステップＳ１４０２に処理を移行し、アクションが発生しない場合は、ステップＳ１４０１で待機処理を行なう。ここで、スケジュール要求のアクションは例えばジョブ制御ポートモニタから発生される。またジョブの削除は、プリントマネージャ６０９から発生される。また、印刷ジョブの送信完了及び印刷ジョブの完了はプリンタデバイスからの通知に応じて出力ポートを介して発生される。無論これに限定はされない。
【０１１２】
ステップＳ１４０２において、上記アクションが発生したプリントキュー（７０１、７０１Ａ、７０１Ｂの何れか）を確認し、実ジョブキュー（８０１、８０１Ａ、８０１Ｂの何れか、仮想ジョブキュー（８０２、８０２Ａ、８０２Ｂの何れか）の順に検索し、何らかのジョブ情報が存在していればステップＳ１４０３に処理を移行し、ジョブ情報が無ければステップＳ１４０１に移行する。
【０１１３】
ステップＳ１４０３において、ネットワークプリンタ１０２〜１０４のうち、ステップＳ１４０１において所定のアクションが発生したプリントキューに対応するネットワークプリンタの動作ステータスを取得する。例えば、印刷ジョブの完了のアクションに応じてステータスを取得するようにする。
【０１１４】
また、ステップＳ１４０３におけるデバイスステータスの取得で、デバイス制御コントロールモジュール６０６を介したポーリングを行い、このポーリングと所定のアクションの発生によるデバイスステータスの取得を併用するようにすれば、より迅速にプリンタデバイスが転送可能な動作ステータスになったか否かを調べることができる。
【０１１５】
ステップＳ１４０４において前のステップにおいて取得されたステータスに基づいて、現在対象となっているプリントキューに対応するネットワークプリンタに印刷データを転送可能かどうかを判断する。ここでデータ転送可能ないと判断される動作ステータスとしては、例えば(1)紙無しやトナー無しなど消耗品不足を伴わない状態や、(2)画像記録を継続できない例えばジャム（紙詰まり）などの障害が発生している状態や、(3)印刷データを送信するチャネルがオフラインである状態や、(4)プリンタ側（ネットワークボードも含む）でこれ以上受信バッファに余裕がなくビジーの状態などが挙げられる。また、この(1)乃至(5)のステータスを任意に組み合わせてそれをデータ転送可能でないと判断するステータスとするようにしても良い。
【０１１６】
ステップＳ１４０４において、アクション発生の対象となっているネットワークプリンタに印刷データを転送可能であれば、ステップＳ１４０５に処理を移行し、転送不可能であれば、処理をステップＳ１４０１に移行する。
【０１１７】
ステップＳ１４０５において、ステップＳ１４０２で見つけたジョブに対して、スケジュールアップ要求を発行し、処理をステップＳ１４０１に移行する。
【０１１８】
この時、実ジョブが見つかっていれば、仮想ジョブよりも先に実ジョブに対してスケジュールアップ要求を発行する。つまり、登録の順番に係わらず、実ジョブを仮想ジョブよりも優先する。
【０１１９】
次に、図１４のフローチャートの処理に基づき特にプリントキュー７０１でスケジュールアップ要求を受け付けてから、ネットワークプリンタ１０２〜１０４に印刷データを送信するまでの処理の流れについて説明する。図１５は、プリントキュー７０１での負荷分散印刷処理について示すフローチャートである。また、図１６、図１７は、図１５のフローチャートに関連した処理を表した図である。
【０１２０】
負荷分散印刷では、予め設定された親のプリンタの実ジョブキューに実ジョブが登録され、バックアッププリンタの仮想ジョブキューに仮想ジョブが登録される。１つのプリントキューにおいて、これらのジョブの中で早くスケジュールアップ要求を受け付けた印刷ジョブがネットワークプリンタ１０２〜１０４に転送される。
【０１２１】
ステップＳ１５０１では、スケジュール要求（スケジュールアップ）を受け付けたか判断する。スケジュールアップを受け付けると処理をＳ１５０２に移行し、スケジュールアップが来なければステップＳ１５０１で待機する。
【０１２２】
ステップＳ１５０２では、スケジュールアップを受け付けた印刷ジョブが負荷分散ジョブかどうかを判断する。ジョブ情報のプリントタイプの情報を取得し、プリントタイプが負荷分散印刷であれば、ステップＳ１５０３に処理を移行する。負荷分散印刷でなければ、ステップＳ１５１１に処理を移行し、実ジョブに登録された実ジョブ情報に基づく印刷ジョブがネットワークプリンタに転送される。
【０１２３】
ステップＳ１５０３では、スケジュールアップのジョブが仮想ジョブであるか、実ジョブであるかを判断する。仮想ジョブであれば、ステップ１５０４に処理を移行し、実ジョブであればステップＳ１５１３に処理を移行する。
【０１２４】
ここで、仮想ジョブのスケジュールアップをユーザに通知してもよい。つまり、ユーザが指定した負荷分散プリントデバイスではなく、バックアッププリントデバイスにおいて印刷が実行されることを通知すれば、ユーザは印刷結果が出力されるプリンタを特定することができ、利便性が高い。
【０１２５】
ステップＳ１５０４において、実ジョブ情報を参照するために仮想ジョブ情報中の実ジョブＩＤを取得する。ステップＳ１５０５では、ステップＳ１５０４で取得した実ジョブＩＤを用いて実ジョブ情報を参照し、実ジョブ情報に含まれる仮想ジョブＩＤを取得する。
【０１２６】
ステップＳ１５０６では、ステップＳ１５０５で取得した仮想ジョブＩＤから、スケジュールアップ要求が発生した仮想ジョブ以外の同内容の仮想ジョブを認識し、スケジュールアップ要求を受けていない送信の対象とならなかった他の仮想ジョブを、順に削除する（図１６の矢印ｇ）。
【０１２７】
ステップＳ１５０７において、ステップＳ１５０５で取得した仮想ジョブで、ステップＳ１５０６で削除していない仮想ジョブが残っていればステップＳ１５０６に処理を移行し、仮想ジョブが残っていなければ、ステップＳ１５０８に処理を移行する。これにより、スケジュールアップ要求が発生した仮想ジョブと同内容の他の全ての仮想ジョブを削除する。
【０１２８】
ステップＳ１５０８、Ｓ１５０９、Ｓ１５１５では、スケジュールアップ要求が発生した仮想ジョブを実ジョブに切り替える処理を行なう。そしてこの切り替える処理により仮想ジョブ情報が実ジョブ情報になり、変更前の実ジョブ情報に基づくジョブの送信は行なわないようになる。
【０１２９】
まず、ステップＳ１５０８において、仮想ジョブ情報を、実ジョブキュー８０１Ｂに登録する（図１６の矢印ｈ）。この時点で操作対象のジョブに関連した仮想ジョブ情報は全て無くなる。さらに、ステップＳ１５０９において、その仮想ジョブ情報中の実ジョブＩＤから対応する実ジョブ（ここではプリントキュー７０１に登録された実ジョブＩＤ「７」の実ジョブ）を特定し、その実ジョブ情報を取得し、実ジョブキュー８０１Ｂ内の仮想ジョブ情報（ここではＩＤ「９」）に情報をコピーする。この時点で、実ジョブキュー８０１Ｂには、ＩＤ「９」の実ジョブが格納されることになる。
【０１３０】
また、ステップＳ１５１５において、該実ジョブ（ここでは実ジョブキュー８０１に登録されたジョブＩＤ「７」の実ジョブ）から、オリジナルジョブＩＤ（ここでは、ジョブＩＤ「７」）、オリジナルプリンタ名（ここでは、プリンタ名「７０１」）をコピーし、新しく生成された実ジョブ（ここでは、実ジョブキュー８０１Ｂに格納されたＩＤ「９」の実ジョブ）に設定する。尚、オリジナルプリンタ名は、元々最優先で印刷出力が行なわれるべきであった実ジョブキュー、ありは、プリンタ名を特定可能なものであればよく、プリンタ識別情報であれば、適宜適用することができる。
【０１３１】
更にステップＳ１５１０において、スケジュールアップ要求が発生した仮想ジョブ情報の実ジョブＩＤに登録されていた実ジョブ（ここではプリントキュー７０１に登録された実ジョブＩＤ「７」の実ジョブ情報）を削除する（図１６の矢印ｉ）。これらの処理の結果、図１７のような状況となる。そして、ステップＳ１５１１において、元々実ジョブの印刷ジョブ或いは実ジョブに変更された印刷ジョブを対応するネットワークプリンタに転送する。この転送について、より具体的に説明すると、最終的に対象となる図１０の実ジョブ情報（ステップＳ１５０３でＮｏと判断された実ジョブ情報、或いは、ステップＳ１５０９において切り替えられた実ジョブ）から特定されるスプールファイル名の印刷データが、自ジョブ情報が登録されている実ジョブキュー（プリントキュー）に対応する論理プリンタの出力ポートに関連付けられたＩＰアドレス又は名前解決に利用するネームに基づき行なわれる。
【０１３２】
そして、ジョブの転送が終了したらステップＳ１５１２でジョブの送信終了の通知を行なう。尚、図１６の矢印ｉの処理が実行し終えるまで二つの実ジョブが存在するが、図１６の矢印g〜図１６の矢印ｉの処理を一筆書きのプログラム（コンテキストチェンジを発生させない）にするようにすれば問題は無い。無論、図１６の矢印ｉとhの処理順序を逆にするようにしても良い。また、上に説明では不要となった仮想ジョブ情報及び実ジョブ情報を削除するよう説明してきたが、例えば、不要になったジョブ情報にそれを示すフラグを付加して、付加後のジョブ情報を対応する印刷装置に送信するようにし、プリンタ側でフラグを参照し受信したジョブ情報を破棄するようにしても良い。
【０１３３】
負荷分散処理により発生した実ジョブと複数の仮想ジョブの内、スケジュールアップを受けたジョブが実ジョブの場合には、ステップＳ１５０３からステップＳ１５１３に移行する。ステップ１５１３では、実ジョブ情報から全ての仮想ジョブ情報を取得し、ステップＳ１５１４においてすべての仮想ジョブを削除し、ステップＳ１５１１においてスケジュールアップを受け付けた実ジョブを対応するネットワークプリンタに転送する。尚、上にも説明したようにステップＳ１５０６や、ステップＳ１５１４において実ジョブ或いは仮想ジョブを削除するように説明したが、スケジュールアップ要求を受けていない他のジョブ（実ジョブ或いは仮想ジョブ）に基づく印刷データが無いジョブ情報のみをネットワークプリンタに転送し、ネットワークプリンタにおいて削除するようにしても良い。
【０１３４】
一方。ステップＳ１５０２においてスケジュールアップを受けた印刷ジョブのプリントタイプが負荷分散印刷でなければ、ステップＳ１５１１に処理を移行し、そのままネットワークプリンタに転送される。
【０１３５】
図２０は、本実施形態の負荷分散処理の、アプリケーションからの完了イベント受付からイベント通知までの処理を示したジョブ制御プリントサービスのフローチャートである。
【０１３６】
ステップＳ２００１において（図２１のシーケンス２１０１〜２１０３）、アプリケーションはジョブ制御プリントサービスに対して完了イベントの登録を行なう。完了イベントが発生するタイミングとしては、印刷データを送信したプリンタデバイスから最終ページの排紙が完了したときや、印刷ジョブ送信に失敗した場合に発生する印刷ジョブのエラーしたとき等がある。
【０１３７】
ステップＳ２００２は、登録したイベントの発生を待つステップである。ここで、ジョブ制御プリントサービス６０５が管理している印刷ジョブに関して、印刷ジョブの完了を把握したらステップＳ２００３へ移行する。完了していない場合はステップＳ２００２へ処理を戻し、登録した完了イベントの発生を待つ。
【０１３８】
ステップＳ２００３において、ジョブ制御プリントサービス６０５では完了イベントを把握したジョブ情報の出力先プリンタ名（ここでは、プリンタ名「７０１Ｂ」と、オリジナルプリンタ名（ここでは、プリンタ名「７０１」を比較し、両者が同じ場合はステップＳ２００４へ違う場合はステップＳ２００５へ移行する。
【０１３９】
ステップＳ２００４においては、プリンタ名に対応するプリントキューから完了イベントを登録しているアプリケーションに、ジョブ情報内のドキュメント名、ジョブＩＤ、プリンタ名と、印刷完了／エラーなどの印刷ジョブでの結果を通知する。
【０１４０】
ステップＳ２００５では、オリジナルプリンタ名に対応する、アプリケーションが印刷を指示したプリントキュー（ここでは、プリントキュー「８０１」）を経由して完了イベントを登録しているアプリケーションにジョブ情報内のドキュメント名、ジョブＩＤ、プリンタ名、オリジナルジョブＩＤ、オリジナルプリンタ名と、印刷完了（終了）／エラーなどの印刷ジョブの状態を通知する。
【０１４１】
上記処理により、アプリケーションは印刷を指示したプリントキューを監視するだけで、出力先が移動してもイベントの通知を受けることができる。
【０１４２】
また、負荷分散印刷によって、ジョブＩＤが変化したとしても、印刷ジョブ情報にオリジナルジョブＩＤを持っているため、変化前のジョブＩＤを参照することが可能であり、印刷ジョブを容易に管理することが可能である。
【０１４３】
また、印刷ジョブ情報に印刷出力したプリンタ名も持っているため、排紙先の通知を受けることも可能であり、ユーザは、どのプリンタ名で排紙出力が行なわれたかをアプリケーションユーザインタフェースを介して知ることが出来る。アプリケーションユーザインタフェースにおける表示様子は、通知されたジョブＩＤとプリンタ名と基づくものであればよく、ジョブＩＤ及びプリンタ名の文字列を表示するようにしても良いし、ジョブＩＤについては、ジョブＩＤに関連付けられたドキュメント名を表示させるようにしても良い。また、プリンタ名については、プリンタ名に対応するアイコンを表示させるようにしても良い。
【０１４４】
図２１はアプリケーション６０１、ＧＤＩ２２０２、ジョブ制御プリントサービス６０５における、完了イベント登録、完了イベント通知および、印刷開始指示から印刷完了指示までのシーケンスの１例である。また、図２２は図２１のシーケンス例を説明したブロック図である。図６Ａと同じソフトウェア構成について同じ参照番号を付与している。
【０１４５】
シーケンス２１０１〜２１０３は、アプリケーションがジョブ制御プリントサービスにイベントを登録するまで処理である。
【０１４６】
具体的な方法としては、シーケンス２１０１において、アプリケーション６０１はジョブ制御プリントサービス６０５に対して、ＡＰＩを通してＯｐｅｎＰｒｉｎｔｅｒ（“７０１”）の指示を出し、シーケンス２１０２において、ジョブ制御プリントサービス６０５はプリンタキュー７０１のハンドルをアプリケーション６０１へ返す。ハンドルを受け取ったアプリケーション６０１は、シーケンス２１０３において、ＳｕｂＳｃｒｉｂｅＥｖｅｎｔ（ｈａｎｄｌｅ、ＥＶＥＮＴ）の指示を出し、ハンドルを取得したプリンタキューに対して完了イベントの登録を行なう（図２２、矢印ａ）。
【０１４７】
また、シーケンス２１１６は、ジョブ制御プリントサービスからアプリケーションにイベントを通知する処理である。シーケンス２１１６において、ジョブ制御プリントサービスが登録されたイベントを把握すると、ＡＰＩを通してアプリケーション６０１に通知される（図２２、矢印ｐ）。
【０１４８】
シーケンス２１０４〜２１０７までは、印刷開始の処理である。通常の印刷では、アプリケーションがＧＤＩにＷｉｎ３２ＡＰＩを通してＳｔａｒｔＤｏｃ（）の指示を出すが、本発明では、ジョブ制御プリントサービスが、印刷ジョブを管理するためのジョブＩＤを取得するために以下のような処理を行なう。
【０１４９】
シーケンス２１０４において、アプリケーション６０１はジョブ制御プリントサービス６０５に対して、ＡＰＩを通してＤｍＳｔａｒｔＤｏｃ（“ＡＢＣ”）の指示を出し、ドキュメント名“ＡＢＣ”の印刷開始を指示する（図２２、矢印ｂ）。
【０１５０】
印刷指示を受け取ったジョブ制御プリントサービス６０５はジョブＩＤ７を発行しドキュメント名に付加した後、ＧＤＩ２２０２に対して、シーケンス２１０５において、Ｗｉｎ３２ＡＰＩ２２０１を通してＳｔａｒｔＤｏｃ（“ＡＢＣ＃ＪＩＤ７”）の指示を出し、印刷開始を指示する（図２２、矢印ｃ）。
【０１５１】
シーケンス２１０６において、ＧＤＩ２２０２は、指示を受け取ったことをジョブ制御プリントサービス６０５に返す（図２２、矢印ｄ）。
【０１５２】
シーケンス２１０７において、ジョブ制御プリントサービス６０５は、アプリケーション６０１に対して発行したジョブＩＤ７を返す（図２２、矢印ｅ）。
アプリケーションはこのジョブＩＤを使って、印刷ジョブの管理や操作をすることが可能となる。
【０１５３】
シーケンス２１０８〜２１１１は印刷データを記述する処理である。アプリケーション６０１は、ＧＤＩ２２０２に対して、Ｗｉｎ３２ＡＰＩ２２０１を通して、ＳｔａｒｔＰａｇｅ（）、印刷データを送信、ＥｎｄＰａｇｅ（）の指示を、印刷データが全て送信されるまで繰り返す（シーケンス２１０８〜２１１１・・・、図２２矢印ｆ、ｇ・・・）。
【０１５４】
シーケンス２１１２〜２１１５は、印刷終了の処理である。
【０１５５】
全ての印刷データを送信したアプリケーション６０１は、ジョブ制御プリントサービス６０１に対して、シーケンス２１１２において、ＤｍＥｎｄＤｏｃ（）の指示を出し、印刷終了を指示する（図２２、矢印ｌ）。
【０１５６】
指示を受け取ったジョブ制御プリントサービス６０５は、ＧＤＩ２２０２に対してＥｎｄＤｏｃ（）の指示を出し、印刷終了を指示する（図２２、矢印ｍ）。
シーケンス２１１４において、ＧＤＩ２２０２は指示を受け取ったことをジョブ制御プリントサービス６０５に返し（図２２、矢印ｎ）、ジョブ制御プリントサービス６０５は、シーケンス２１１５において、アプリケーション６０１に対して印刷終了指示が完了したことを返す（図２２、矢印ｏ）。
【０１５７】
これら印刷終了処理を行なうことによって、ジョブ制御プリントサービスは管理している印刷ジョブのプリントキューへの印刷が終了したことを把握することができる。
【０１５８】
印刷データは、ＧＤＩ２２０１から、ＰＤＬドライバ６０２、Ｗｉｎｄｏｗｓ（登録商標）スプーラ６０３を経由してプリントデバイスが解釈できる形に変更され、ジョブ制御ポートモニタ６０４に送られる。
【０１５９】
ジョブ制御ポートモニタ６０４は、ジョブ制御プリントサービスに対して、ＡＰＩを通して、印刷ジョブを送信する（図２２、矢印ｑ）。
【０１６０】
本実施形態は、独自に作成した送信出力ポートにスプールジョブを転送しても良いし、オペレーティングシステムに用意された送信出力ポートに対して印刷ジョブを転送させてもよい。
【０１６１】
ここで、図１３における複数のプリントキューを、例えば図６Ａ、Ｂにおけるプリントマネージャ６０９に介して表示させた際に、仮想ジョブキューに登録された仮想ジョブ情報に基づく表示を行なわれず、実ジョブキューに登録された実ジョブ情報に基づく表示が選択的に行なわれる処理について説明する。
【０１６２】
プリントマネージャ６０９からＡＰＩを介してジョブ制御プリントサービス６０５に対してジョブの実行状況の要求が行なわれると、ジョブ制御プリントサービス６０５では、実ジョブキューに登録された実ジョブ情報とに仮想ジョブキューに登録されたジョブ情報とから、実ジョブキューに登録された実ジョブ情報の抽出が行なわれる。そして、抽出された実ジョブ情報がプリントマネージャ６０９に通知され、通知されたジョブジョブ情報に基づくジョブの実行状況の表示が行なわれるこれにより、実ジョブ情報のみをユーザに報知するため、ユーザの混乱を防ぐことができる。
【０１６３】
また、プリントジョブマネージャー６０９からの要求に応じて表示が行なわれるようにしたが、ジョブ制御プリントサービス６０５からのプリントジョブマネージャー６０９に対する能動的な通知に基づきジョブの実行状況の表示を行なわせるようにして良い。また、ジョブ制御プリントサービス６０５からプリントジョブマネージャーに実ジョブ情報及び仮想ジョブ情報の双方を通知するように指定、実ジョブ情報の抽出をプリントマネージャ６０９自身に行なわせるようにしても良い。
【０１６４】
図１８に、図９に示される基本プリントキューに対応する所定のプリンタに対してバックアッププリントキューに対応するプリンタを関連付けるための、設定画面を示す。この図１８は新規に論理プリンタを作成或いは追加する際に表示されるものであるが、既に作成された論理プリンタの設定を変更する場合などに表示させるようにしても良い。
【０１６５】
１８０１は、プリンタ名を入力する入力欄である。キーボード等を介してユーザが任意に名前を指定することができる。１８０２は、プリンタドライバ名を表示する表示欄である。「ドライバの選択」ボタンを選択することにより、ユーザが選択可能な複数のプリンタドライバのリストが表示され、そのリストから選択されたプリンタドライバの名前が表示欄１８０２に表示される。
【０１６６】
１８０６はプリンタドライバに関連付けるポートを選択する選択画面を表示させるための「ポートの選択」ボタンである。「ポートの選択」ボタン１８０６が選択されると、システムに登録されている複数のポートが選択可能な形態で提示される。
【０１６７】
１８０３はプリンタの出力方法を選択するための選択欄である。この選択欄において、出力方法として「負荷分散印刷」を指定することができる。
【０１６８】
１８０４は、１８０１、１８０６で設定された所定のプリンタに対するバックアッププリンタ（例えば図１３のプリントキュー７０１Ａ、７０１Ｂに対応）のリストを表示する表示欄である。１８０５は、バックアッププリンタを設定するための「バックアッププリンタ設定」ボタンである。「バックアッププリンタ設定」ボタン１８０５が選択されると、バックアッププリンタとして設定可能なプリンタのリストが表示される。そして、そのリスト中から選択されたプリンタがバックアッププリンタとして設定され、バックアッププリンタリスト表示欄１８０４に表示される。「バックアッププリンタ設定」ボタン１８０５が選択された場合に、指定されたプリンタドライバにより特定されるプリンタモデルやプリンタ言語に互換性のあるプリンタのみをリスト表示すれば、適切なバックアッププリンタをユーザに効率よく選択させることができる。
【０１６９】
このように、図１８を介して設定された設定情報は、図９や、図１０や、図１１の情報の各項目に反映される。
【０１７０】
以上、説明したように、本実施の形態では、アプリケーションが負荷分散プリンタに印刷すると、負荷分散設定のプリンタに対応するプリントキューに実ジョブが、バックアッププリンタに対応するプリントキューに仮想ジョブが作成され、これらのジョブ情報の中で一番早くスケジュールアップを受け付けたジョブが実ジョブとしてネットワークプリンタに転送される。そのため、複数のネットワークプリンタ内で転送可能になるのが早いネットワークプリンタを効率的に選択して印刷ジョブが転送されることになる。その結果、大量の印刷ジョブを複数のネットワークプリンタで効率的に処理することができ、印刷ジョブが存在している間は複数のネットワークプリンタをフルに稼動することができる。
【０１７１】
また、同じ印刷データを、複数のキューに重複して登録することもなく、メモリ容量及びメモリ処理の負荷を小さくできる。また、仮想ジョブ情報は表示されないため、一時的にでも、複数の同じ印刷データがキューを占有するということはなく、ユーザを混乱させることもない。更に、システム上に共有プリントキューという特別なキューを設定する必要もないため、ユーザは従来と同じ感覚で印刷を行なうことにより負荷分散印刷を行なうことができる。ユーザは、印刷アプリケーションに複雑な機能を組み込まなくても、複数の印刷装置を効率よく利用することができる。
【０１７２】
また、印刷ジョブの完了通知を、印刷ジョブ情報のオリジナルプリンタ名を参照し、対応するプリントキューからアプリケーションに通知するため、印刷ジョブの移動があったとしても、アプリケーションはイベントの通知を受けることができる。
【０１７３】
さらに、負荷分散印刷システムとしても、印刷ジョブ情報がオリジナルジョブＩＤを持っているため、ジョブＩＤの変化を管理するといった処理を必要とせずに印刷ジョブの管理が可能となる。
【０１７４】
（第２の実施の形態）
上述の第１の実施の形態においては、基本プリントキューと、バックアッププリントキューを例に説明を行なってきたが、本願発明はこれに限定されるものではなく、第１、第２、・・の複数の基本プリントキューが存在し、この複数のプリントキュー間で印刷ジョブの登録が移動されるような形態でも適用可能であることはいうまでもない。
【０１７５】
つまり、第１の実施の形態と同様のアプリケーションから投入された第１プリントキューに登録された印刷ジョブの出力の代替として、第２プリントキューから前記登録された印刷ジョブを出力するようにする制御し、前記第２プリントキューに登録された印刷ジョブの情報に前記第１プリントキュー及び前記印刷ジョブのジョブＩＤを関連付け、前記第２プリントキューから出力された印刷ジョブの状態の変化を、前記ジョブＩＤを合わせて、前記関連付けら得た第１プリントキューを介して前記アプリケーションに通知するようにする通知するようにしても良い。
【０１７６】
このとき、第１プリントキューから第２プリントキューへの印刷ジョブの登録の移動は、第１プリントキューへ登録された印刷ジョブの削除、及び、第２プリントキューへの印刷ジョブの新規追加により、実現される。
【０１７７】
また、第２プリントキューへ新たに登録される印刷ジョブ情報は、第１プリントキューの印刷ジョブ中の必要な情報（もともとのジョブＩＤや第１プリントキューに対応するオリジナルプリンタ名等）を、第２プリントキューに登録される印刷ジョブのジョブ情報に含ませたものとなる。このとき、アプリケーションから投入された第１プリントキューに登録された印刷ジョブの出力の代替として、第２プリントキューから前記登録された印刷ジョブを出力するようにする制御手段が備えられることとなる。
【０１７８】
さらに、このときの第１プリントキューを介してのアプリケーションの通知には、さらに、印刷出力の排紙が行なわれたプリンタ名（プリンタ識別情報）が含まれるようにしても良い。
【０１７９】
尚、第２の実施の形態における、効果も第１の実施の形態と同様である。
【０１８０】
（他の実施形態）
以上、本発明の実施形態について詳述したが、本発明は、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１８１】
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが供給されたプログラムコードを読み出して実行することによっても達成される場合を含む。その場合、プログラムの機能を有していれば、形態は、プログラムである必要はない。
【０１８２】
従って、本発明の機能処理をコンピュータで実現するために、コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明のクレームでは、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【０１８３】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。
【０１８４】
プログラムを供給するための記録媒体としては、例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−Ｒ）などがある。
【０１８５】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、ホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明のクレームに含まれるものである。
【０１８６】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【０１８７】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現される。
【図面の簡単な説明】
【０１８８】
【図１】本発明の実施形態としてのプリントシステムの全体構成を示すブロック図である。
【図２】サーバまたはクライアントのハードウェア構成を説明するブロック図である。
【図３】図２に示したＲＡＭ２０２のメモリマップの一例を示す図である。
【図４】図２に示したＦＤ２０４のメモリマップの一例を示す図である。
【図５】図２に示したＦＤドライブ２０３に対して挿入されるＦＤ２０４との関係を示す図である。
【図６】Ａはプリントシステムのソフトウェア構成の１例を示す図である。Ｂはプリントシステムのソフトウェア構成の他の例を示す図である。
【図７】負荷分散印刷時の印刷ジョブの流れを示す図である。
【図８】プリントキューと実ジョブキュー及び仮想ジョブキューの関連を表す図である。
【図９】プリントキュー情報の内容を示す図である。
【図１０】実ジョブ情報の内容を示す図である。
【図１１】仮想ジョブ情報の内容を示す図である。
【図１２】印刷ジョブを受け付けてから、仮想ジョブを作成する処理の流れを示すフローチャートである。
【図１３】実ジョブ、仮想ジョブと実ジョブキュー、仮想ジョブキュー、プリントキュー、バックアッププリントキューの関連を示す図である。
【図１４】スケジュールアップの処理を示すフローチャートである。
【図１５】スケジュールアップから印刷するまでの処理を示すフローチャートである。
【図１６】実ジョブ、仮想ジョブと実ジョブキュー、仮想ジョブキュー、プリントキュー、バックアッププリントキューの関連を示す図である。
【図１７】実ジョブ、実ジョブキュー、仮想ジョブキュー、プリントキュー、バックアッププリントキューの関連を示す図である。
【図１８】プリンタに関する情報を設定するための画面の１例を示す図である。
【図１９】アプリケーションの印刷指示から印刷終了指示までの処理を示すフローチャートである。
【図２０】イベントの処理を示すフローチャートである。
【図２１】図１９、図２０のフローチャートの処理を示すシーケンスである。
【図２２】図２１のシーケンスを説明したブロック図である。
【図１】
2005332227.tif 000003
【図２】
2005332227.tif 000004
【図３】
2005332227.tif 000005
【図４】
2005332227.tif 000006
【図５】
2005332227.tif 000007
【図６】
2005332227.tif 000008
【図７】
2005332227.tif 000009
【図８】
2005332227.tif 000010
【図９】
2005332227.tif 000011
【図１０】
2005332227.tif 000012
【図１１】
2005332227.tif 000013
【図１２】
2005332227.tif 000014
【図１３】
2005332227.tif 000015
【図１４】
2005332227.tif 000016
【図１５】
2005332227.tif 000017
【図１６】
2005332227.tif 000018
【図１７】
2005332227.tif 000019
【図１８】
2005332227.tif 000020
【図１９】
2005332227.tif 000021
【図２０】
2005332227.tif 000022
【図２１】
2005332227.tif 000023
【図２２】
2005332227.tif 000024