以下、本発明を実施するための最良の形態について図面を用いて説明する。
図1(A)は、本発明の実施形態に係るネットワークシステムの概略構成を示すブロック図である。このネットワークシステムは、ホストコンピュータ(101)と、このホストコンピュータ(101)より印刷データを受信して印刷を行なう複数の出力デバイス(102A,102b,…)とプリンタドライバ配信サーバー(103)等を備える。これらはネットワーク(104)を介して接続されている。
図1(B)は、図1(A)のホストコンピュータ(101)と出力デバイス(102)の装置構成を示すブロック図である。ホストコンピュータ(101)において、CPU(111)は、RAM(112)に記憶されているプログラムに従って、システムバス(114)に接続される各デバイスを総括的に制御している。もちろん、このCPUは複数であってもよい。以下図1(B)について詳細に説明する。
命令の処理及び計算をするハードウェア回路であればよい。このRAM(112)は、CPU(111)の主メモリ、ワークエリア等としても機能している。ROM(113)は、各種プログラム及びデータを格納しており、各種フォントを記憶するフォントROM(113a)、ブートプログラムやBIOS等を記憶するプログラムROM(113b)、及び各種データを記憶するデータROM(113c)に区分けして構成されている。キーボードコントローラI/F(115)は、キーボード(119)や不図示のポインティングデバイス(マウス)からのキー入力を制御する。ディスプレイI/F(116)は、ディスプレイ(120)への表示を制御している。外部メモリI/F(117)は、例えばハードディスク(HD)、Solid State Disk(SSD)等の外部メモリ(121)とのアクセスを制御する。外部メモリ(121)は、オペレーティングシステムプログラム(以下、OS)(122)をはじめ各種アプリケーション(123)、印刷処理関連プログラム(124)、さらに、ユーザファイル、編集ファイル(図示省略)等を記憶するコンピュータが読み取り可能な記憶媒体として機能する。
ここで、外部メモリ121に記憶されるプログラム群を説明する。OS(122)としてMicrosoft Windows(登録商標)を使用するものとする。ここで、印刷処理関連プログラム(124)は、本実施形態に係るプリントジョブマネージャー(125)、仮想プリンタドライバ(126)及びドライバインストーラ(129)などを含むプログラム領域となる。これらプログラムを任意の手段でダウンロードし、後述するようなインストール処理を行うことで、このプログラムに基づく印刷処理が可能となる。また、印刷処理関連プログラム(124)においては、情報処理装置にインストールされる汎用プリンタドライバ(127)や専用プリンタドライバ(128)も含まれることになる。仮想プリンタドライバとは、本実施形態特有のドキュメントを物理的な出力デバイスに対して直接ではなく、間接的に印刷するために利用されるプログラムである。間接的なプログラムであるため「仮想」と呼称しているが、仮想プリンタドライバ(126)はOS(122)上では一般的なプリンタドライバとして登録されるため、ユーザは通常の印刷作業手順に近い感覚で作業を行うことができる。一方、汎用プリンタドライバと専用プリンタドライバは、一般的なプリンタドライバとして分類される。具体的には、汎用プリンタドライバとは、複数のモデルに印刷可能なプリンタドライバである。汎用プリンタドライバは、対応するモデルが共通で持つ機能を利用することができる。一方、専用プリンタドライバとは、単一のモデルにのみ対応したプリンタドライバである。専用プリンタドライバは、対応するモデルの機能を最大限に引き出すことが可能である。
ネットワークI/F(118)は、ネットワーク(104)を介して出力デバイス(102)に接続され、出力デバイス(102)との間で通信制御処理を行なう。なお、プリンタドライバ配信サーバー(103)もホストコンピュータ(101)と同様の装置構成を備える。
次に出力デバイス(102)の構成について説明する。CPU(132)は、出力デバイス(102)の全体の動作を制御している。RAM(139)は、CPU(132)の主メモリ、ワークエリア等として機能するとともに、出力情報展開領域、環境データ格納領域としても用いられる。またこのRAM(139)は、NVRAM(Non−volatile RAM:不揮発性RAM)領域も備えている。そして、RAMは、増設ポートに接続されるオプションRAMによりメモリ容量を拡張することができるように構成されている。ROM(133)は、各種フォントを記憶するフォントROM(133a)、CPU(132)により実行される制御プログラム等を記憶するプログラムROM(133b)、及び各種データを記憶するデータROM(133c)を備えている。
ネットワークI/F(138)は、ホストコンピュータ(101)との間でデータの送受信を行なう。印刷部I/F(136)は、プリンタエンジンである印刷部(137)とのインターフェースを制御している。外部メモリ(134)は、外部メモリI/F(140)によりアクセスが制御されており、オプションとして接続されるハードディスク(HD)、Solid State Disk(SSD)等を含んでおり、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶する。さらに、本実施形態に係る専用プリンタドライバ(143)を記憶することも可能である。なお、ハードディスク等の外部メモリ(134)が接続されていない場合には、ROM(133)のデータROM(133c)に、ホストコンピュータ(101)で利用される情報等を記憶することになる。なお、この外部メモリ(134)は1個に限らず複数備えるものであってもよく、例えば、内蔵フォントに加えてオプションフォントカード、言語系の異なるプリンタ制御言語を解釈するプログラム等を格納した外部メモリを複数接続できるように構成されていてもよい。操作部(142)には、ユーザーによる操作を受け付ける操作パネルが設けられ、その操作パネルには操作のためのスイッチ及びLED表示器等が配されている(不図示)。また、不図示のNVRAMを有し、操作パネルからのプリンタモード設定情報を記憶するようにしてもよい。CPU(132)は、ROM(133)のプログラムROM(133b)に記憶された制御プログラム等に基づき、印刷部I/F(136)を介して印刷部(137)に出力情報としての画像信号を出力する。また、CPU(132)はネットワークI/F(138)を介してホストコンピュータ(101)との通信処理が可能となっており、ホストコンピュータ(101)から送信される印刷データを受信すると共に、出力デバイス(102)内の情報等をホストコンピュータ(101)に通知可能に構成されている。
図2は、図1(B)のプリンタドライバインストーラ(129)が備えるユーザーインターフェース(200)である。プリンタドライバインストーラ(129)を実行すると、ディスプレイ(120)上に表示される。プリンタ一覧(201)にインストール可能なプリンタドライバの一覧が表示される。Device Model Aは、デバイスモデルAの出力デバイスに対応した専用プリンタドライバである。Device Model Bは、デバイスモデルBの出力デバイスに対応した専用プリンタドライバである。Device Model Cは、デバイスモデルCの出力デバイスに対応した専用プリンタドライバである。Device Model Dは、デバイスモデルDの出力デバイスに対応した専用プリンタドライバである。Generic Device Model 1は、デバイスモデルA、Bに対応した汎用プリンタドライバである。Generic Device Model 2は、デバイスモデルC、Dに対応した汎用プリンタドライバである。Virtual Device Modelは、デバイスモデルA、B、C、Dだけではなく、あらゆる出力デバイスに対応可能な仮想プリンタドライバである。ユーザーが任意のモデルを選択し、追加ボタン(202)を押下し、インストールするプリンタ一覧(203)に選択したモデルを加える。その後、ユーザーがインストールボタン(204)を押下することで、プリンタドライバインストーラ(129)は指定されたモデルのプリンタドライバをインストールする。
図3は、プリンタドライバとプリントキューとポートの各情報とそれらの関係を説明した図である。後述の実施形態の前提として比較のため説明する。以下は、UML(Unified Modeling Language)のオブジェクト図を使って表現している。プリントキュー(302)は、アプリケーションから印刷する際の印刷対象に対応するオブジェクトである。同一デバイスモデルのプリンタドライバ(301)から複数作成することができる。例えば、オフィスにDevice Model Aの出力デバイスが3台導入された場合、Device Model Aに対応したプリンタドライバを1つインストールして、そのプリンタドライバを使ったプリントキューを3つ作成することになる。ポート(303)は、ネットワークの出力先を特定するオブジェクトである。プリントキューとポートの関係は通常は一対一であるが、図のように同じポートを複数のプリントキューが使用してもかまわない。また、プリンタドライバ(301)はプリンタドライバ構成情報(304)を保持している。プリンタドライバ構成情報(304)は、ドライババージョン、デバイスモデル名、ハードウェア情報、ドライバモジュール名、等から構成される。このプリンタドライバ構成情報(304)は、OS(122)によって管理される。プリントキュー(302)は、プリントキュー構成情報(305)を保持している。プリントキュー構成情報(305)は、プリントキュー名、ポート名、印刷設定情報、ジョブ投入時刻、ジョブステータス、等から構成される。このプリントキュー構成情報(305)は、OS(122)によって管理される。さらに、プリントキュー(302)は、本実施形態特有の自動生成識別子(306)と更新日時(307)をも保持する。これらの情報は、プリントジョブマネージャー(125)によって管理される。詳細は後述する。ポート(303)は、ポート構成情報(308)を保持している。ポート構成情報(308)は、ポート名、モジュール名、IPアドレス、等から構成される。このポート構成情報(308)は、OS(122)によって管理される。
図4は、図1(B)のプリンタドライバインストーラ(129)による、通常のプリンタドライバのインストール処理を示すフローチャートである。ここで、通常のプリンタドライバとは、専用プリンタドライバおよび汎用プリンタドライバを指す。ユーザの指示により、プリンタドライバのインストールを開始(S400)する。すると、ドライバインストーラ(129)は、INFファイルを読み込みその中に記載されているプリンタドライバのリストを表示する。そして、ユーザーによるデバイスモデルの選択を受け付ける(S401)。ここでは、図2のプリンタ一覧(201)において、Virtual Device Model以外のデバイスモデルを選択された場合を想定する。本実施形態特有のVirtual Device Modelの選択も含んだインストール処理については後述する。
専用プリンタドライバもしくは汎用プリンタドライバの選択を受け付けると、選択されたデバイスモデルのプリンタドライバをインストールする(S402)。プリンタドライバのインストールは、プリンタドライバインストーラが、OSのインストールAPIであるスプーラAPIに対して設定ファイルのパスを渡すことにより行われる。OSの一部であるスプーラAPIは、設定ファイルに従って、プリンタドライバを構成するDLL(Dynamic Link Library)をCD−ROMやインストールセットの中から探索する。そして、スプーラAPIは、所定のOSのシステムディレクトリに対して、探索されたDLLをコピーする。スプーラAPIは、設定ファイルに従って、レジストリ内にドライバ名などを記録する。
次に、プリンタドライバインストーラ(129)は、ユーザーによるIPアドレス等のポート情報の入力を受け付ける(S403)。そして、プリンタドライバインストーラ(129)は、ポート(303)を作成する(S404)。次に、プリンタドライバインストーラ(129)は、ユーザーによるプリントキュー名の入力を受け付ける(S405)。そして、S402でインストールしたプリンタドライバとS404で作成したポートを関連付けて、図3で説明したプリントキュー(302)を作成する(S406)。
以上で、専用プリンタドライバ及び汎用プリンタドライバのインストール処理が終了する(S407)。
図5は、図1(B)のプリンタドライバインストーラ(129)による本実施形態特有のプリンタドライバのインストール処理を示すフローチャートである。プリンタドライバのインストールを開始(S500)すると、プリンタドライバインストーラが保持する設定ファイルに記載されたプリンタドライバのリストがディスプレイ120に表示される。そして、表示されたプリンタドライバのリストの中から、ユーザーによるデバイスモデルの選択を受け付ける(S501)。そして、選択されたデバイスモデルが仮想プリンタドライバかどうか判断する(S502)。選択されたデバイスモデルが仮想プリンタドライバではない場合、専用・汎用プリンタドライバのインストール処理を行う(S503)。S503は、図4のS402以降の処理部と等価である。そして、当該インストール処理を終了する(S516)。
S502にて選択されたデバイスモデルが仮想プリンタドライバの場合、仮想プリンタドライバをインストールする(S504)。仮想プリンタドライバ自体は、ポートに対する印刷データの出力を行わないので、ユーザーによる入力を伴わずにダミーのポートの作成指示を発行する(S505)。ダミーのポートの作成指示とは、例えば、存在しないファイル名など適当な名前を指定してポートをOSに対して作成指示する。そうすると、当該作成指示は、エラーとしてOSに認識され、作成指示されたポート名を捨てる。
ここでは、仮想プリンタドライバに対し複数のプリントキューを作る必要性が無いので、ユーザーによる入力を伴わずにデバイスモデル名と同じ名前でプリントキューを作成する(S506)。図2の例でVirtual Device Modelが選択された場合は、Virtual Device Modelといいうデバイスモデル名で、プリントキューを作成する。
図4で一般的なプリンタドライバのインストール処理について説明した際、ユーザーによる入力は、S401とS403とS405の3回あった。一方、本実施形態の図5のプリンタドライバのインストール処理においては、ユーザーによる入力はS501だけである。もし、プリンタドライバインストーラ(129)が仮想プリンタドライバだけを対象としたプログラムだったら、S501も不要となる。仮想プリンタドライバ専用のドライバインストーラを作成することで、S501、S502の処理が不要になる。
つまり、仮想プリンタドライバのインストール処理方法は、ユーザーの負担と運用コストを低減させる効果がある。仮想プリンタドライバは、ポートに対する印刷データの出力を行わない。そこで、印刷を最低限保証するために汎用プリンタドライバを設置する。
引き続き、汎用プリンタドライバのインストール処理について説明する。インストールセットに含まれる全ての汎用プリンタドライバを列挙する(S507)。
ここで、プリンタドライバインストーラが保持する設定ファイルに記載されたプリンタドライバのリストに基づき表示される図2のプリンタ一覧(201)において、汎用プリンタは、Generic Device Model 1とGeneric Device Model 2が存在する。よって、1回目のループ処理では、Generic Device Model 1を取り出し、2回目のループ処理では、Generic Device Model 2を取り出す。
S508で、取り出した汎用プリンタドライバについて、全て処理済か否かをドライバインストーラが判定する。S508で、全て処理済と判定されると処理が終了する。S508で全て処理済でないと判定されると、S507で列挙された汎用プリンタドライバの中から、未処理の汎用プリンタドライバをひとつ選んでS508−1へ進む。
取り出した汎用プリンタドライバがホストコンピュータ(101)にインストール済みかどうか判断する(S508−1)。この処理は、このドライバインストーラの起動前に、以前に同種の汎用プリンタドライバがインストールされていないかどうかを判別する処理である。
まだ、汎用プリンタドライバをインストールしていない場合は、選択した汎用プリンタドライバをインストールする(S509)。
このとき、汎用プリンタドライバを使ったプリントキューを作成しない。このため、ユーザーが汎用プリンタドライバのインストールを意識することはない(内部的なインストール処理となる)。つまり、図17のプリンタフォルダその他のOSが管理するプリンタのアイコンは登録されず、表示されない。そして、S508へ進む。ループ処理が終了(S508−YES)したら、当インストール処理を終了する。図17では、Virtual Device Modelのみが図2のユーザインタフェースで選択された際の、インストール処理後のプリンタフォルダ1800を示す図である。図17では、Virtual Device Modelがインストールされると共に、Generic Device Model 1及びGeneric Device Model 2は内部的にインストールされるが、プリントキューが作成されないため、プリンタアイコンも表示されない。もちろん、Generic Device Model 1及びGenericDevice Model 2を図2のUIで選択した場合は、Generic Device Model 1や、Generic Device Model 2のプリンタドライバが一般的な方法(S503)でインストールされる。よって、GenericDevice Model 1や、Generic Device Model 2のプリントキューが設定される。これにより、Generic Device Model1や、Generic Device Model 2のアイコンがプリンタフォルダ1001に表示される(図示省略)。アイコンはプリントキューに対応するオブジェクトである。
一方、S508−1にて、取り出した汎用プリンタドライバがホストコンピュータ(101)にインストール済みの場合は、インストール済みの汎用プリンタドライバのバージョンを取得する(S511)。バージョン数から継続使用可能どうか判断する(S512)。継続使用可能と判断した場合、S510へ進む。ここで、継続使用可能か否かの判断は、インストール済の汎用プリンタドライバのバージョンが非常に旧く、仮想プリンタドライバが当該汎用プリンタドライバに対して対応できないなどの例が考えられる。
S512にて、インストール済みの汎用プリンタドライバが継続使用不可能と判断した場合、インストール済みの汎用プリンタドライバをアンインストールする(S513)。ここで、アンインストールとは、汎用プリンタドライバのDLLの所定のシステムディレクトリからの削除、及び、レジストリのクリアなどが挙げられる。この際、プリントキューやポートの情報はバックアップしておく。
そして、今回ドライバインストーラが実行されているインストールセット内の汎用プリンタドライバをインストールする(S514)。さらに、S513の実行の前に、インストール済み汎用プリンタドライバを使って構成されていたプリントキューを、S514でインストールした汎用プリンタドライバを使って復元する(S515)。ここで、バックアップした情報を全て戻してもよいが、互換性の問題もあるため、次の情報を選択して復元し、他の情報は復元しなくてもよい。すなわち、ポートの設定に関する情報、デバイス名称、プリントキューに含まれるDEVMODEのうち、パブリックDEVMODE、のうち、少なくとも1以上を選択的に復元してもよい。これらの情報は、互換性の高い情報だからである。逆に、プライベートのDEVMODEなどは、復元しないほうがよい場合もある。また、復元すべき情報を表示し、ユーザにドライバインストーラやOSなどのユーザインタフェースにおいて選ばせることも可能である。
S515の後、S508へ進む。ループ処理が終了したら(S508−NO)、当インストール処理を終了する(S516)。以上、プリンタドライバインストーラ(129)が、仮想プリンタドライバをインストールしてそのプリントキューを作成すると、自動的に汎用プリンタドライバをインストールすることを説明した。
なお、S507以降の汎用プリンタドライバのインストール処理については、図1(B)のプリンタドライバインストーラ(129)が実施することで説明をしたが、仮想プリンタドライバ(126)の初期化処理において実施してもかまわない。また、一般にVendorSetupと呼ばれるOS(122)から呼び出される不図示のプリンタドライバのセットアップモジュールで実施してもかまわない。
図6は印刷処理のデータフロー図である。本図を用いて、印刷処理関連プログラムの各コンポーネント間でどのような入出力が行われているか明らかにする。101で囲われているボックスが、図1の11に対応する。アプリケーション(123)は仮想プリンタドライバ(126)に対して、OS(122)の提供する描画インターフェースであるGDI(Graphic Device Interface)(600)を通じて印刷指示命令を出力する。次に仮想プリンタドライバ(126)は、入力された印刷指示命令をEMF(Enhanced Meta File)(601)の形式に変換してプリントジョブマネージャー(125)に出力する。ここでEMF(601)とは、GDI(600)の印刷指示命令と互換性のある中間データ形式であり、アプリケーション(123)から出力された一連の印刷指示命令を再現可能なデータとして記録したものである。本実施例では中間データ形式としてEMF(601)を用いて説明しているが、印刷指示命令を再現可能なデータであれば、例えばXPS(XML Paper Specification)、PDF(Portable Document Format)、あるいは独自に定義した任意の形式であっても良い。次にプリントジョブマネージャー(125)は、後述する出力デバイスの特定、汎用・専用プリンタドライバの管理など固有の処理を行い、GDI(600)を通じて印刷指示命令を出力する。出力された印刷指示命令は、汎用プリンタドライバ(127)あるいは専用プリンタドライバ(128)に対して入力される。次に、汎用プリンタドライバ(217)あるいは専用プリンタドライバ(218)は、出力デバイス(102)が処理可能なPDL(Printer Description Language)(602)の形式に変換し、出力デバイス(102)に出力する。最後に出力デバイス(102)は、入力されたPDL(602)を処理して印刷出力を行う。ここで、汎用プリンタドライバ127、及び、専用プリンタドライバは、図3に示すとおり、プリントキュー302及びポート1のデータ構造と対応付けられている。すなわち、入力されたPDLは、ジョブとしてパッキングされ、プリントキューにキューイングされる。印刷キューにキューイングされたジョブは、ポート構成情報308にて定義されている印刷先に対応する出力デバイスに順次送信され、印刷出力される。
図7は印刷処理のシーケンス図である。本図を用いて、一連の印刷処理中に関連プログラムの各コンポーネントの内部、およびそれらの間でどのような処理が行われているか明らかにする。
まず、ユーザはアプリケーション(123)に対して印刷したいドキュメントの印刷指示を図8(a)で示すユーザインターフェース(8000)を通じて入力する(S700)。8001〜8003はプリントキューを表すアイコンである。このうち、事前に図5の処理でセットアップされた、8001は仮想プリンタドライバのプリントキューである。8002、及び8003は専用プリンタドライバのプリントキューである。
ここでは仮想プリンタドライバを通じて出力を行うため、ユーザは8001のアイコンを選択し、印刷ボタン(8004)を押して、印刷を指示する(S700)。次に、アプリケーション(123)は、仮想プリンタドライバ(126)に対して、印刷初期化処理を行う(S701)。仮想プリンタドライバ(126)は印刷初期化が行われるとプリントジョブマネージャー(125)の起動処理を行う(S702)。プリントジョブマネージャー(125)は、このように仮想プリンタドライバ(126)に対するドキュメントの印刷開始後に起動されるプログラムであり、後述する出力デバイスの特定、汎用・専用プリンタドライバの管理など固有の処理などを担う。また、プリントジョブマネージャー(125)は内部的なコンポーネントとして、出力デバイス特定部(1251)、ドライバ管理部(1252)、及びデスプール処理部(1253)を含む。
次に、アプリケーション(123)はプリントジョブマネージャー(125)が起動されると、仮想プリンタドライバ(126)に対して印刷を開始し、一連の印刷描画命令をGDI(219)を通じて出力する(S703)。仮想プリンタドライバ(126)は、入力された一連の印刷描画命令をEMF(601)形式に変換し、あとで印刷描画命令を再現できるよう外部メモリ(121)に保存する。これをスプール処理と呼ぶ(S704)。アプリケーション(123)は一連の印刷描画命令の最後に印刷終了の処理を行い(S705)、仮想プリンタドライバ(126)はそれを受けて保存されたEMF(601)の外部メモリ(121)における保存位置情報をプリントジョブマネージャー(125)に通知する(S706)。なお、S704は、外部メモリ(121)に対してスプール処理を実施するが、外部メモリ(121)を介さずプリントジョブマネージャー(125)へ直接スプール処理してもかまわない。
次に、出力デバイス特定部(1251)は、出力デバイスの検索を行う(S707)。ここで検索とは、ネットワーク(104)に接続された出力デバイス102a、102bと通信し、それらの名称、設置場所、IPアドレス、ハードウェアIDといった情報を取得することである。通信手段としては公知の技術であるSNMP(Simple Network Management Protocol)などのプロトコルが使用される。通常、出力デバイス102a、102bの状態、すなわち電源が入っているかや、ネットワーク(104)に接続されているかを事前に把握することは不可能であるため、出力デバイス特定部(1251)は印刷指示の都度、すべての出力デバイスとの通信を試みる。ネットワーク内のすべての装置との通信には、これも公知の技術であるブロードキャストという手段を用いる。出力デバイス特定部(1251)がこのブロードキャストの方法で、ネットワークI/F(118)を通じてSNMPの情報取得用データを送信すると、ネットワーク(104)で到達可能なすべての出力デバイス(102)が情報取得用データを受信する。そして、各出力デバイス(102)が、取得対象として指定された出力デバイスの名称や設置場所などの情報を応答のデータとしてネットワークI/F(138)を通じて送信すると、出力デバイス特定部(1251)は順次それらの応答を受信する。そして、受信した情報をRAM(112)に保存する。出力デバイス特定部(1251)は、順次受信した応答からデバイス名や設置場所などの情報を取り出し、リストとして出力デバイスを特定する図8(b)のユーザインターフェース(8100)に表示する(S707)。図8(b)では、デバイスの名前、場所、ネットワークアドレス(図示省略)などが表示される。ユーザは、デバイスの名前や場所、ネットワークアドレスを頼りにデバイスの選択が出来る。図では、コピールーム、居室2、居室3において、同じ名前であるDeviceBというデバイスが表示されている。名前はユーザが任意につけたものであり、機種とは無関係でにつけてよい。
8100には情報を表示するためのリストコントロール(8101)が配置され、その中からひとつをカーソル(8102)によって選択することができる。ボタン(8103)を押すと、ネットワーク内で再検索が行われ、利用可能な出力デバイスのリストを最新の状態に更新できる。ボタン(8104)を押すと、カーソル(8102)で現在選択されているデバイスが出力先として決定される。出力デバイス特定部(1251)は、その決定を受け(S709)、次の処理に移る。チェックボックス(8105)とボタン(8106)はプリントキューを管理する際にユーザが操作する。これらの操作方法については後述する。
S709で出力先のデバイスが決定されると、出力デバイス特定部(1251)はドライバ管理部(1252)に対して出力準備処理を実行するよう依頼する(S710)。S711における出力準備処理の結果、OS(122)には選択された出力デバイス(102)に印刷可能な汎用プリンタドライバ(127)または不図示の専用プリンタドライバ(128)のプリントキューが登録される。これにより、OSが管理するプリンタ(プリンタキュー)が列挙される図17や、アプリケーションから印刷指示されると開かれるUIである図8(a)において、プリンタのオブジェクトが表示されるようになる。出力準備処理(S711)については後で図12、図13を用いて詳述する。
次に図7の出力デバイス特定部(1251)は、図8(b)の出力デバイス特定用の画面から、図7のデスプール処理部(1253)が表示制御する図9(a)の画面(8200)に遷移する(S712)。デスプール処理部(1253)は、プレビューエリア(8201)に印刷ドキュメントを実際に印刷したときのイメージを表示する(S713)。このとき表示されるイメージは、S704においてスプールされたEMF(601)をデスプール処理部(1253)が読み込み、解析して、プレビューエリア(8201)の大きさに合わせて描画したものである。スピンコントロール(8202)やチェックボックス(8203)はそれぞれ印刷部数、白黒印刷といった一般的な印刷設定を変更するための入力手段である。さらに特殊な印刷設定を変更するためには、ボタン(8204)を押下することにより、不図示のプリンタドライバ固有のユーザインターフェースを表示させ、印刷設定の変更指示を入力することができる。このとき、出力先に対応するプリントキューが専用プリンタドライバ(128)のものである場合、汎用プリンタドライバ(127)のものに比べて、より高度な印刷設定が可能である。ボタン(8206)は、現在の画面(8200)から、ひとつ前の画面である出力デバイス特定画面(8100)に遷移して戻るための入力手段である。ボタン(8205)をユーザが押下すると(S714)、デスプール処理部(1253)は汎用プリンタドライバ(127)に対してデスプール処理を行い、一連の印刷描画命令を発行する(S715)。ここで、デスプール処理というのはスプール処理の逆で、S706によって通知された保存位置情報からEMF(601)データを読み出し、解析して、印刷描画命令を再現することである。これにより、プリントジョブマネージャー(125)固有の処理のために中断していた印刷処理が再開され、印刷ドキュメントの出力が行われる。汎用プリンタドライバ(127)は、入力された印刷描画命令をPDL(602)に変換し、ネットワークI/F(138)を通じて出力デバイス(102)に送信する(S716)。印刷処理が終わると出力デバイス特定部(1251)は、ドライバ管理部(1252)へプリントキュー整理処理(S718)を実行するよう依頼する(S717)。プリントキュー整理処理(S718)については後で図14〜図16を用いて詳述する。最後に、プリントジョブマネージャー(125)はプログラムを終了する。
図11にプリントジョブマネージャー(125)のユーザインターフェースの遷移の概要を示す。
まず、プリントジョブマネージャー(125)は、「出力デバイス特定」ダイアログ(8100)を表示する。出力デバイスの特定と「次へ」のボタン(8104)の押下をうけて、プリントジョブマネージャー(125)は、「編集プレビュー」ダイアログ(8200)を表示する。「編集プレビュー」ダイアログ(8200)では、プリントジョブのプレビュー確認と基本的な印刷設定が可能である。「印刷」ボタン(8205)の押下をうけてプリントジョブマネージャー(125)は出力デバイスへ印刷を実行し同ダイアログを閉じる。加えて、「編集プレビュー」ダイアログ(8200)には、プリンタドライバが持っている特有の機能を設定するために「詳細設定」ボタン(8204)が存在する。「詳細設定」ボタン(8204)の押下をうけて、プリントジョブマネージャー(125)は、プリンタドライバの「印刷設定」ダイアログ(9000)を表示する。具体的には、プリントジョブマネージャーが、プリンタドライバのUIプログラムを呼び出すことにより実現する。
また、8204の右となりに初期状態に戻すボタンがあるが、このボタンが押下されると、図9の8203や、8202の値が初期化される。
図18は、OS122が管理する、プリンタドライバの設定の値を格納するDEVMODEを示す図である。OS内のレジストリに登録される。DEVMODE1800は、プリンタドライバごとに用意される。
1800には、1801のPublic DEVMODEを格納する。プリントジョブマネーか125、汎用プリンタドライバ127、専用プリンタドライバ128からアクセス可能なデータ構造である。1801は、各種プログラムに対して公開される領域である。1802には、Private DEVMODEを格納する。この領域は、各種プリンタドライバからアクセス可能である。1802には、専用プリンタドライバからしかアクセスできない領域と、汎用プリンタドライバからアクセスできる領域がある。図示したように、汎用プリンタドライバは、1804を管理しており、専用プリンタドライバは、1805の全領域を管理可能である。ここで、図9(a)の詳細設定ボタンが押されると、図18のプリントジョブマネージャが、選択対象となっているプリンタに対応する汎用プリンタドライバ若しくは、専用プリンタドライバのユーザインタフェースプログラムを呼び出す。これにより、図11の9000で示したような汎用プリンタドライバ若しくは専用プリンタドライバのユーザインタフェース9000が開く。この図18のUIの操作により、図18のDEVMODE1805や1805が編集可能となる。
更に、「編集プレビュー」ダイアログ(8200)には「戻る」ボタン(8206)が存在する。この「戻る」ボタン(8206)は現在の出力先デバイスでは所望の機能が実現できないことが分かった際の出力デバイスの再設定のために存在する。「戻る」ボタン(8206)の押下をうけて、プリントジョブマネージャー(125)は、「出力デバイス特定」ダイアログ(8100)を表示し、再度出力デバイスの指定が可能になる。
図12は、ドライバ管理部(1252)における出力準備処理(S711)の詳細な流れを表すフローチャートである。本処理によって、出力デバイス(102)へ印刷するためのプリントキューがあればそれを選定し、なければ新しいプリントキューを作成、あるいは最適なプリンタドライバをインストールする。
まず、ドライバ管理部(1252)は、出力準備処理を開始すると(S1000)、出力デバイス(102)のIPアドレス情報を取得する(S1001)。IPアドレス情報は出力デバイスの検索処理(S707)において取得されRAM(112)に記憶されているものを取り出す。次にOS(122)に登録されているすべてのプリントキューからプリントキューに関連付けられているポートのIPアドレスを取得する(S1002〜S1004)。
次に、出力デバイス(102)のIPアドレスと、ポートのIPアドレスが合致するプリントキューが存在するかどうか判断する(S1005)。後述するが、本システムにおいて、プリントキューは出力デバイスごとに作成される。しかし、同じ出力デバイスに印刷を行うたびに別のプリントキューを毎回作成すると大量のプリントキューが重複して登録されてしまう。このような事態を避けるため、出力デバイスとすべてのプリントキューのIPアドレス同士を比較することによって、既存のプリントキューの中に出力可能なものがないかを判断する。もし出力可能なプリントキューが存在すればS1006に、存在しなければS1011に進む。
次にS1006ではさらに汎用プリンタドライバを優先させるモードであるかどうか判断する。所望の出力デバイス(102)に出力可能なプリントキューの中には専用プリンタドライバ(128)のものが含まれている可能性もある。しかしながら、高度な機能は必要とせず、シンプルで安定した汎用プリンタドライバ(127)を使用したいユーザもいるため、例えば不図示のユーザインターフェースによって汎用プリンタドライバを優先させるかどうか切り替え可能なモードを設けることが考えられる。このモードが真すなわち汎用プリンタドライバを優先させる場合は、S1007に進み、そうでなければS1009に進む。
次にS1007ではプリントキューのモデル名を取得する。そして、デバイスもモデル名が汎用プリンタドライバのものであるかどうか判断する(S1008)。プリントキューの名前がユーザによって変更可能であるのに対し、汎用プリンタドライバのモデル名は「Generic Device Model 1」のように固有の名称なので、プリントキューのモデル名を知ればどの種類のドライバなのか判断できる。汎用プリンタドライバである場合はS1009へ進み、そうでなければS1010へ進む。
S1009へ進んだ場合、S1005で見つかった既存のプリントキューを出力先として決定し、出力準備処理を終了する(S1014)。
S1010へ進んだ場合、すなわち既存のプリントキューが専用プリンタドライバのものであると判断された場合は、図13で後述する処理において、汎用プリンタドライバを優先インストールすることに決定し、S1013に進む。
S1011ではS1006と同様に汎用プリンタドライバを優先させるモードかどうかを判断し、真ならS1010に、偽ならS1012へ進む。S1012では、図13で後述する処理において、適合する最適なドライバを検索してインストールすることに決定し、S1013に進む。ここでS1012では、既存のプリントキューに出力可能なものが存在せず、汎用プリンタドライバを優先させるモードでもないので、適合する最適なドライバ(専用プリンタドライバ)を優先インストールすることが決定される。
汎用・専用プリンタドライバインストール処理(S1013)については図13を用いて詳述する。
図13は、ドライバ管理部(1252)における汎用・専用プリンタドライバインストール処理(S1013)の詳細な流れを表すフローチャートである。
まず、ドライバ管理部(1252)は処理を開始すると(S1100)、出力用のポートを作成する(S1101)。次に、図12の専用プリンタドライバを優先インストールすることに決定されているか否かで判断し(S1102)、真であればS1103に、偽であればS1108に進む。ここで真となり、S1103に進む場合とは、図12でS1012のステップから遷移してS1013の処理に入った場合である。一方、偽となり、S1108に進む場合とは、図12でS1010のステップから遷移してS1013の処理に入った場合である。
S1103〜S1107はホストコンピュータ(101)や配信サーバ(103)、あるいは出力デバイス102a、102bの中から出力に最適な専用プリンタドライバ(128)を検索するステップである。まず、S1103では出力デバイスのハードウェア情報を取得する。本実施例ではハードウェア情報として、プラグアンドプレイによるインストールに用いられるハードウェアIDを取得する。ハードウェアIDは出力デバイスの検索処理(S707)において取得されRAM(112)に記憶されているものを取り出す。
次に、S1104ではインストール済みプリンタドライバ内に適合するプリンタドライバがあるかどうか判断する。具体的には、ドライバ管理部(1252)は、OS(122)に登録されている各プリンタドライバのハードウェア情報と、S1103で取得した出力デバイス(102)のハードウェア情報とを比較し、一致するものがあればすべてピックアップする。1つ以上適合するものがあればS1116へ、なければS1105へ進む。
次に、S1105ではドライバストア内に適合するプリンタドライバがあるかどうか判断する。ドライバストアとはWindows Vista(登録商標)で導入されたデバイスドライバのデータベースシステムであり、インストール前のデバイスドライバのパッケージをOS(122)に格納する仕組みである。ドライバ管理部(1252)は、このドライバストアに格納されているプリンタドライバの中に、S1103で取得した出力デバイス(102)のハードウェア情報に一致するものがないかOS(122)に問い合わせることができる。問い合わせの結果、1つ以上適合するものがあればS1112へ、なければS1106へ進む。
次に、S1106では配信サーバ(103)内に適合するプリンタドライバがあるかどうか判断する。ドライバ管理部(1252)は、ドライバ配信サーバ(103)にRPC(Remote Procedure Call)やHTTP(Hyper Text Transfer Protocol)などの手段で、ネットワーク(104)を経由して、あるハードウェア情報に適合するプリンタドライバがあるか問い合わせることができる。問い合わせの結果、1つ以上適合するものがあれば配信サーバ(103)からプリンタドライバのパッケージをホストコンピュータ(101)に転送して、外部メモリ(121)に記憶し、S1112へ進む。そうでなければS1107へ進む。
次に、S1107では出力デバイス(102)内を検索し、適合するドライバがあるかどうか判断する。前述したとおり、出力デバイス(102)はその外部メモリ(134)に、出力デバイス自身を利用するために必要な専用プリンタドライバ(128)を記憶することができる。ドライバ管理部(1252)は、この出力デバイス(102)に記憶されたプリンタドライバも、S1106と同様の手段でネットワーク(104)を経由して、問い合わせることが可能である。問い合わせの結果、1つ以上適合するものがあれば出力デバイス(102)から専用プリンタドライバ(128)のデータをホストコンピュータ(101)に転送して、外部メモリ(121)に記憶し、S1112へ進む。外部メモリ(134)の設定変更等により専用プリンタドライバ(128)が消去されているため、問い合わせの結果が1つも適合するものがないと判断された場合はS1108へ進む。
S1108〜S1111では、前記S1103〜S1106の一連の処理の結果、適合するプリンタドライバがどこにも見つからない場合の代替手段として、あらかじめS500〜S516でインストールされた汎用プリンタドライバのプリントキューを作成する。まず、ドライバ管理部(1252)はネットワーク(104)を経由して、出力デバイス(102)のコマンドタイプ情報を取得し(S1108)、その判断を行う(S1109)。ここで、コマンドタイプ情報とは、出力デバイス(102)が処理可能なPDL(602)の種類を表す情報である。汎用プリンタドライバ(127)は複数のモデルに出力可能なPDLを発行するドライバであるが、あくまで1種類のPDLしか発行できない。したがって、異なるPDLをサポートするモデルに対しては出力できないため、コマンドタイプ情報を取得して、互換性の確認を行う。本実施例においては2種類のPDL(「1」または「2」)のどちらかに対応した出力デバイスを利用することを前提としている。しかしながら、対応できないコマンドタイプ情報も存在する。S1109では、コマンドタイプ情報「1」、「2」、それ以外であるかどうか判断している。「1」の場合はS1110へ、「2」の場合はS1111に進む。S1110ではコマンドタイプ「1」に対応した「Generic Device Model 1」のプリントキューを作成し、処理を終了する(S1118)。S1111ではコマンドタイプ「2」に対応した「Generic Device Model 2」のプリントキューを作成し、処理を終了する(S1118)。なお、プリントキューを作成する際はS1101で作成したポートを関連付ける。一方、S1109で、「1」、「2」以外のコマンドタイプ情報が取得されたと判断された場合は、画面を介して、ユーザに「他の出力デバイスを選択してください」などの警告を通知するとともに、本処理を終了(S1118)する。
S1112〜S1114では検索の結果として適合した専用プリンタドライバ(128)をインストールする。まず、S1112では適合するプリンタドライバが2つ以上見つかったかどうか判断し、真であればS1113、偽であればS1114へ進む。S1113ではその中から最もプリンタドライバのバージョンの新しいものをインストールすべき対象として選択する。各プリンタドライバにはバージョンが付与されており、たとえ同じモデルのプリンタドライバであっても作成された時期が違えば、通常は異なるバージョンを有する。バージョンの表現方法としては例えば「10/10/2008.2.5.0.0」のように日付と数値の組み合わせで表現し、どちらの方が新しく作成されたものか容易に判断することができる。しかしながら、まれに古いバージョンのドライバをあえて使用する必然性が生じる場合がある。そのような場合はドライバ管理処理部1252等の処理により、図9(b)の8300に示すようなユーザインターフェースを表示して、ユーザに選択させることが好ましい。8301には適合すると判断された複数のプリンタドライバの情報(名称、バージョン)がリストで表示される。ユーザは8301のリストの中から所望のプリンタドライバを選び、ボタン(8302)を押すことで決定できる。次にS1114では適合したプリンタドライバ、もしくは複数あった場合はS1113で選択されたプリンタドライバをインストールする。
ここで、S1116〜S1117はS1112〜S1114の特殊なケースに関しての処理である。具体的には、プリントキューが未作成のインストール済みプリンタドライバの中に、適合するプリンタドライバがあった場合の処理であり、S1116はS1112と、またS1117はS1117と同様の処理である。S1114が不要なのは、もはやプリンタドライバをインストールする必要がないからである。最後にS1115では、S1101において作成したポートに関連付けてプリントキューを作成し、処理を終了する(S1118)。
ここまで述べてきたように、プリントジョブマネージャー(125)は印刷時にプリントキューをOS(122)に登録する。次回以降の印刷で出力デバイスがわかっている場合は、仮想プリンタドライバ(126)を介さずに直接プリントキューを指定し、出力先デバイスの指定ステップがない通常手順で印刷できる。しかしながら、オフィス内に多数の出力デバイスが設置されている場合や、複数のオフィスを移動して印刷を行う場合、その都度プリントキューは作成されるので、プリントキューは増加傾向にある。
また、図11のユーザインターフェースの遷移で示したように、プリントジョブマネージャー(125)は、「出力デバイス特定」ダイアログ(8100)と「編集プレビュー」ダイアログ(8200)の遷移を何度でも繰り返すことが可能である。「出力デバイス」のリストボックス(8101)で選択された出力デバイス用のプリントキューがホストコンピュータ(101)に存在しない場合プリントジョブマネージャー(125)は推移のたびに新たにプリントキューを作成する。そのため、「戻る」ボタン(8206)の押下を繰り返すと、ホストコンピュータ(101)上のプリントキューはさらに増加傾向になる。
ホストコンピュータ(101)上のプリントキューの総数が多くなると、印刷時に最初に表示される「印刷」ダイアログ(8000)で表示されるプリントキューが多くなり、ユーザによる適切なプリンタの選択が難しくなる。そのため自動生成されたプリントキューの削除などを行える管理手段があれば、ユーザビリティの向上に繋がる。
図10に「削除方法指定」のダイアログ(8400)を示す。
「出力デバイス特定」のダイアログ(8100)上の「詳細設定」ボタン(8106)の押下をうけて、プリントジョブマネージャー(125)はディスプレイ(120)へ表示する。同ダイアログ上の「OK」ボタン(8407)の押下をうけて、プリントジョブマネージャー(125)は「削除方法指定」のダイアログ(8400)を閉じる。その後、図8(b)に示す「出力デバイス特定」のダイアログ(8100)が表示され、プリントジョブマネージャー(125)はそのダイアログ(8100)へ処理を移行する。
「削除方法指定」のダイアログ(8400)には、「削除方法を指定する」チェックボックス(8401)が存在する。このチェックボックス(8401)の初期状態はチェックなしである。このチェックボックス(8401)がチェックされると8402〜8405のアイテムが有効となり、プリントキューの削除方法の詳細指定が可能となる。
プリントキューの削除方法の詳細指定のために、「削除方法指定」のダイアログ(8400)には、「選択したプリントキューを残す」ラジオボタン(8402)と、「最新のプリントキューを残す」ラジオボタン(8404)が存在する。この2つのラジオボタンへの指定は排他となっており、「選択したプリントキューを残す」ラジオボタン(8402)が選択された場合は、「最新のプリントキューを残す」ラジオボタン(8404)は非選択状態となる。またその逆に「最新のプリントキューを残す」ラジオボタン(8404)が選択された場合は、「選択したプリントキューを残す」ラジオボタン(8402)が非選択状態になる。デフォルト状態では「選択したプリントキューを残す」ラジオボタン(8402)が選択状態となる。
「選択したプリントキューを残す」ラジオボタン(8402)が選択状態の場合、リストボックス(8403)の選択が有効になる。プリントジョブマネージャー(125)は、ホストコンピュータ(101)上に存在するプリントキューの内、ドライバ管理部(1252)が作成したものをリストアップし、リストボックス(8403)へ表示する。但しドライバ管理部(1252)が作成したものではなく特殊なものであるので、このリストには仮想プリンタドライバ(126)のプリントキューであるVirtual Device Model(8001)は含まれない。「選択したプリントキューを残す」ラジオボタン(8402)が選択状態で「OK」ボタン(8406)が押下された場合、プリントジョブマネージャー(125)は、リストボックス(8403)で選択されていないものを削除対象と認識する。
「最新のプリントキューを残す」ラジオボタン(8404)が選択状態の場合、個数のスピンボックス(8405)での指定が有効になる。「最新のプリントキューを残す」ラジオボタン(8404)が選択状態で「OK」ボタン(8406)が押下された場合、プリントジョブマネージャー(125)は、個数のスピンボックス(8405)での設定が有効であることを認識する。この設定で削除対象とするプリントキューは、「選択したプリントキューを残す」ラジオボタン(8402)で選択と同様に、ホストコンピュータ(101)上にドライバ管理部(1252)が作成したものに限定される。この設定では、指定された個数まで、利用された日時が新しいプリントキューを残し、それ以外のプリントキューを削除することになる。また仮想プリンタドライバ(126)のプリントキューであるVirtual Device Model(8001)も同様に含まれない。
加えて、「削除方法指定」のダイアログ(8400)には、「不要となったプリンタドライバを削除する」チェックボックス(8406)が存在する。デフォルト状態では、このチェックボックス(8406)は、チェックなしである。このチェックボックス(8401)がチェックされた状態で、「OK」ボタン(8406)が押下された場合、プリントジョブマネージャー(125)は、プリントキューと関連付けがなくなったプリンタドライバ自体の削除要求を受けたと判断する。「削除方法指定」のダイアログ(8400)で設定された情報を元にプリントジョブマネージャー(125)は、ドライバ管理部(1252)へプリンタドライバ整理処理を依頼する。プリンタドライバ整理処理の詳細は図14のフローチャートを用いて後述する。
図14にドライバ管理部(1252)によるプリントキューの整理処理のフローチャートを示す。本実施例では、この処理は図7で示した印刷処理のシーケンスにおいて、印刷完了後のプリントキュー整理処理(S718)のタイミングでドライバ管理部(1252)によって実行される。
プリントキューの整理処理はS1200より開始され、ドライバ管理部(1252)は、プリントキューのデータ構造(302)に対して、ドライバ管理部(1252)が自動生成したプリントキューであることを示す自動生成識別子(306)を追加する。更に加えてドライバ管理部(1252)は、プリントキューのデータ構造(302)の更新日時(307)に現在の日時を記す(S1201)。
次に、図7のデスプール(S715)のタイミングで、実際の印刷描画に用いたプリントキューが自動生成されたものであれば、プリントキューのデータ構造(302)の更新日時(307)を現在の日時に更新する(S1202)。ドライバ管理部(1252)は、一旦、図7の出力準備処理(S711)のタイミングで新規作成されたプリントキューのすべてのリストを取得する(S1203)。このリストをここでは削除候補プリントキューリストと呼称する。
ドライバ管理部(1252)は、「出力デバイス特定」ダイアログ(8100)の「印刷したプリントキューを残す」のチェックボックス(8105)が選択状態かを確認する(S1204)。もし非選択状態だった場合、S1206へ進む。もし選択状態だった場合、ドライバ管理部(1252)は、実際の印刷描画に用いたプリントキューが削除候補プリントキューリストにあれば除外(S1205)し、その後、S1206へ進む。この処理により、図7のデスプール(S715)のタイミングで実際の印刷描画に用いたプリントキューを、削除候補より外すことができる。
ドライバ管理部(1252)は、「削除方法を指定する」チェックボックス(8401)が選択状態であるか確認する。もし非選択状態だった場合、図10の「削除方法指定」のダイアログ(8400)で追加の詳細な削除方法が指定されていないので、S1213へ進む。その後、ドライバ管理部(1252)は、削除候補プリントキューリスト中のプリントキューを削除し(S1213)、プリントキューの整理処理を終了する(S1214)。S1213の削除候補プリントキューリスト中のプリントキューの削除処理は、図15を用いて後で説明する。一方、「削除方法を指定する」チェックボックス(8401)が選択状態の場合、「選択したプリントキューを残す」ラジオボタン(8402)もしくは「最新のプリントキューを残す」ラジオボタン(8404)の選択状態で処理フローを切り替える(S1207)。
「選択したプリントキューを残す」ラジオボタン(8402)が選択状態である場合、S1208へ進む。S1208においてドライバ管理部(1252)はリストボックス(8403)上で選択されたプリントキューを削除候補プリントキューリストより除外する。その後、ドライバ管理部(1252)は削除候補プリントキューリスト中のプリントキューを削除し(S1213)、プリントキューの整理処理を終了する(S1214)。
「最新のプリントキューを残す」ラジオボタン(8404)が選択状態である場合、S1209へ進む。S1209においてドライバ管理部(1252)は削除候補プリントキューリストを一旦クリアーする。続けて、ドライバ管理部(1252)はホストコンピュータ(101)上に存在するプリントキューのうち自動生成識別子(306)を有するプリントキューのリストを取得する(S1210)。ドライバ管理部(1252)は取得したプリントキューのリスト中のプリントキューの個数を、「個数」スピンボックス(8405)で指定された数値と比較する(S1211)。もしプリントキューの個数が指定数を超えていない場合、S1214へ進み、プリントキューの整理処理を終了する。もしプリントキューの個数が指定数を超えている場合、取得したプリントキューのリストを更新日時(307)でソートし、古い日時のものから超過数分のプリントキューを削除候補プリントキューリストとする(S1212)。その後、ドライバ管理部(1252)は削除候補プリントキューリスト中のプリントキューを削除し(S1213)、プリントキューの整理処理を終了する(S1214)。
図15にドライバ管理部(1252)によるプリントキューの削除処理のフローチャートを示す。このフローチャートは図14のプリントキューの整理処理のフローチャートのS1213の詳細処理を示すものである。
本処理はS1300より開始され、ドライバ管理部(1252)は、OS(122)提供の関数をコールすることにより、図3に示したプリンタドライバ、プリントキュー、ポートの各種情報を取得する。それらの情報を用いて、図14のプリントキューの整理処理のフローチャートで生成した削除候補プリントキューリストに含まれるすべてのプリントキュー(302)に関連付けられているプリンタドライバ(301)のリストを作成し保存する(S1301)。このリストは、削除候補プリンタドライバリストであり、S1309以降で、もし不要となったプリンタドライバがあれば削除されることになる。
次にドライバ管理部(1252)は、削除候補プリントキューリストのすべてのプリントキューを処理したか判断する(S1302)。ドライバ管理部(1252)は、削除候補プリントキューリストに未処理のプリントキューがある場合はS1303へ進み、未処理のプリントキューの何れかを取得し、現在の削除候補プリントキューとする。ドライバ管理部(1252)は、現在の削除候補プリントキューに印刷中もしくは待機中のジョブがあり、プリントキューを使用中か判断する(S1304)。もしプリントキューが使用中の場合は、ドライバ管理部(1252)は、ユーザへ削除してよいかの確認メッセージ(不図示)を表示する(S1305)。ここで、ドライバ管理部(1252)は、ユーザからの削除要求をうけた否かを判断する(S1306)。ユーザからの削除要求が「はい」の場合、現在の削除候補プリントキューの削除処理を行うためにS1307へ進む。ユーザからの削除要求が「いいえ」の場合はS1308へ進み、現在の削除候補プリントキューの削除処理を行わず、S1302に戻る。S1304で、現在の削除候補プリントキューが使用中でないと判断された場合は、現在の削除候補プリントキューの削除処理を行うために、S1307へ進む。S1307において、ドライバ管理部(1252)は、OS(122)提供の関数をコールすることにより、現在の削除候補プリントキューの削除処理を実施し、その後、S1302へ戻る。ここで、もし何らかの理由でOS(122)が現在の削除候補プリントキューを削除できない場合は、削除できなかった旨のエラーメッセージ(不図示)を表示してからS1302へ戻る。S1302で、ドライバ管理部(1252)が削除候補プリントキューリストのすべてのプリントキューを処理したと判断した場合、S1309へ進む。
S1309においてドライバ管理部(1252)は、「不要となったプリンタドライバを削除する」チェックボックス(8406)が選択されているか確認する。もし選択されていない場合は、S1316へ進み、プリントキューの削除処理を終了する。もし選択されている場合は、S1310へ進む。
S1310において、ドライバ管理部(1252)は、S1301で生成した削除候補プリンタドライバリストのすべてのプリンタドライバについてS1311以降の処理を行ったかを判断する。もし削除候補プリンタドライバリストのすべてのプリンタドライバについて処理した場合、ループ処理から抜けてS1316へ進み、プリントキューの削除処理を終了する。もし削除候補プリンタドライバリストに未処理のものがある場合はS1311へ進み、未処理のプリンタドライバの何れかを取得して現在の削除候補プリンタドライバとする。S1312では、ドライバ管理部(1252)は、現在の削除候補プリンタドライバが、汎用プリンタドライバ(127)か、もしくは仮想プリンタドライバ(126)でないことを、そのモデル名を用いて判断する。もし現在の削除候補プリンタドライバが、それらのプリンタドライバである場合、次回以降の仮想プリンタドライバ(126)を用いた印刷を可能とするために、S1315へ進み、ドライバ管理部(1252)は現在の削除候補プリンタドライバを削除せずに、S1310に戻る。もし現在の削除候補プリンタドライバが、汎用もしくは、仮想プリンタドライバでない場合、S1313へ進む。なお本実施例では、モデル名を用いて、汎用プリンタドライバ(127)か、もしくは仮想プリンタドライバ(126)であるかを判断したが、特に識別情報や方法を限定する必要はない。例えばプリントードライバ構成情報(304)の一部の情報として、別に識別子を持っていてもよい。
S1313において、ドライバ管理部(1252)は、OS(122)提供の関数をコールすることにより、図3に示したプリンタドライバ、プリントキュー、ポートの各種情報を取得する。現在の削除候補プリンタドライバが他のプリントキューに関連付けられているかを判断する。もし現在の削除候補プリンタドライバに関連付けられたプリントキューが存在しなければ、S1314に進み、現在の削除候補プリンタドライバを削除する。もし現在の削除候補プリンタドライバに関連付けられたプリントキューが存在する場合、S1315に進み、現在の削除候補プリンタドライバを削除せずに、S1310に戻る。S1314において、ドライバ管理部(1252)は、OS(122)提供の関数をコールすることにより、現在の削除候補プリントードライバの削除処理を実施し、その後S1310へ戻る。もし何らかの理由でOS(122)が現在の削除候補プリンタドライバを削除できない場合は、削除できなかった旨のエラーメッセージ(不図示)を表示し、S1310に戻る。
以上より、ホストコンピュータ上のプリントキューを適切に管理することにより、ユーザが必要とするプリントキューのみ残すことが可能となり、次回以降のプリントキューの選択が容易になる。よって、ユーザの利便性が著しく向上する。
図16のシーケンス図を用いて「編集プレビュー」ダイアログ(8200)の「戻る」ボタン(8206)を押下した場合のプリントキュー整理処理を示す。S700〜S713までシーケンスは図7と同じ処理である。ここでは説明を省略する。
S1400で「戻る」ボタン(8206)のユーザによる押下をうけて、プリントジョブマネージャー(125)は、「編集プレビュー」ダイアログ(8200)から「出力デバイス特定」ダイアログ(8100)へ画面遷移を行う(S1401)。その画面遷移をうけて出力デバイス特定処理(1251)は、ドライバ管理部(1252)へプリントキュー整理依頼を出す(S717)。そして、ドライバ管理部(1252)は、「削除方法指定」のダイアログで指定された情報でプリントキュー整理処理を実行する(S718)。この処理により、印刷処理の過程であっても、プリントキューの総数を抑えることができる。
なお、「編集プレビュー」ダイアログ(8200)から「出力デバイス特定」ダイアログ(8100)へ画面遷移を行う度に、ドライバ管理部(1252)はプリントキュー整理処理(S718)を実行する必要はない。例えば現在の印刷シーケンスの「戻る」ボタン(8206)の回数をカウントし、一定回数毎にドライバ管理部(1252)がプリントキュー整理処理を実行する方法でもよい。その後の印刷シーケンスは図7のS709以降の手順と同様であり、ここでは説明を省略する。
以上、図7と図16のシーケンスを用いて、仮想プリンタドライバを用いた印刷処理シーケンス内でのプリントキュー整理処理の実行を説明した。
実際に印刷につかったプリントキューなどの外部メモリに保存管理することにより、プリントキュー整理処理(S718)の実行は、上記タイミングに限定する必要はなく、他のタイミングでも実施することが可能になる。例えば、次回の印刷のタイミングで、出力準備処理(S711)を行う前にプリントキュー整理処理(S718)を実行しても良い。また仮想プリンタドライバ(126)などのユーザインターフェースにボタンを設け、印刷とは関係のないタイミングでユーザによるその押下を受け実行してもよい。さらに、例えば印刷処理と直接関係ないタイミングであるホストコンピュータ(101)へのユーザのログオンまたはログオフ時や、定期的なタイマー間隔を設けて実行してもよい。
OS(122)が提供する機能として、設置後のプリントキュー名称を別名に変更できる機能が存在する。このプリントキュー名称の変更に追従するために、上記では、プリントキューのデータ構造(302)に、自動生成識別子(306)と更新日時(307)を保存し、プリントキュー名称変更に影響を受けない構成とした。もし特に設置後のプリントキュー名称がなされない運用を前提とすれば、それらの情報保存先をプリントキューのデータ構造(302)に限定する必要はない。例えばプリントキュー名称をキーとしたプリントキューのデータ構造(302)と同様なデータ構造を用意し、外部メモリ(121)へ自動生成識別子(306)や更新日時(307)を保存することも可能である。またアクセス制限などにより、プリントキューのデータ構造(302)に書き込めない場合も同様に他のデータ構造を用意して管理することもできる。
図14のS1202では、ドライバ管理部(1252)が、プリントキューのデータ構造(302)の更新日時(307)に現在の日時を記した。仮に汎用プリンタドライバ(127)や専用プリンタドライバ(128)が印刷完了時の更新日時(307)の更新をする仕組み(S1202)を持てば、仮想プリンタドライバ経由でないそれらの直接指定の印刷時も更新日時(307)の更新が可能になる。更にOS(122)が印刷の監査機能を持っている場合、その監査ログよりプリントキューの利用状況を判断することができる。その場合、更新日時(307)として独自データ構造を持たなくても実現可能である。
図5で説明した如く、複数の画像形成装置の一例である102aや102bと通信する情報処理装置の一例であるコンピュータ101を開示した。このコンピュータにおいて、102a、102bに対して指示をすることができる第1デバイスドライバの一例である仮想プリンタドライバを開示した。そして、仮想プリンタドライバをインストールする第1デバイスドライバインストール手段の一例であるプリンタドライバインストーラ129を説明した。さらに、仮想プリンタドライバから渡されるデータを受け取って、102、a、102bに対して送信して処理させるためのデータを生成する際に実行される第2デバイスドライバの一例である専用プリンタドライバ若しくは汎用プリンタドライバを開示した。さらに、これらのプリンタドライバのインストール時にそのドライバ自身のポート(印刷先)を確定することなく、すなわち、ポートを印先に対応するプリンタに設定された所定のアドレスに設定すること等をすることなく、インストールする第2デバイスドライバインストール手段の一例としてプリンタドライバインストーラを開示した。
仮想プリンタドライバをインストールするときには、前記仮想プリンタドライバに対応するプリントキューをプリンタドライバインストーラは設定する。そして、専用又は汎用プリンタドライバをインストールするときには、仮想プリンタドライバに対応するプリントキューをプリンタドライバインストーラは設定しないことを説明した。
コンピュータにおいて、予め汎用又は専用プリンタドライバとは適合しない旧バージョンのプリンタドライバがインストールされている場合には、旧バージョンのプリンタドライバを更新し、旧バージョンのプリンタドライバに対して設定されているプリントキューを、プリンタドライバインストーラがインストールする汎用又は専用プリンタドライバに対して設定する。
102a、102bの中からひとつの装置を選択するドライバインストーラがある。そして、その選択に応答して、選択された装置を出力先とするためのポートを汎用又は専用プリンタドライバに対してドライバインストーラが設定する。
仮想プリンタドライバは、複数種類のプリンタドライバにより解釈されることが可能な中間データの一例であるEMFデータを生成し、汎用又は専用プリンタドライバは、EFFからその汎用又は専用プリンタドライバに対して設定されるポートに対応する画像形成装置が処理できるデータの一例であるPDLを生成する。
本実施形態によれば、ユーザーはプリンタドライバをインストールすることで、以後出力デバイスが追加導入されたとしても、プリンタドライバの更新作業やプリントキューの作成作業は不要になる。これにより、ユーザーは面倒なインストール作業を強いられることなく、メンテナンスコストも低減する。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPU等)がプログラムを読み出して実行する処理である。