【実施例1】
【0012】
図1は、本発明の印刷システムが適用可能な装置構成例を示す図である。本印刷システムは、PC(10)、プリンター(20)とから構成される。PC(10)とプリンター(20)はLAN(1)を介して接続されている。LAN(1)はイーサーネットの通信方式に対応している。PC(10)とプリンター(20)は有線LAN、無線LAN、BlueTooth(登録商標)、USBなどその他の接続形態によって接続されても良い。本発明に係る情報処理装置の一実施形態としてのコンピュータについて説明する。なお、
図2は、本実施形態のコンピュータを含むプリンター制御システムの構成を説明するブロック図である。
【0013】
PC(10)はホストコンピュータで、ROM(102)のプログラム用ROMあるいは外部メモリ(109)に記憶された各種プログラムを実行するCPU(101)を備える。さらに、システムバス(120)に接続される各デバイスをCPU(101)が総括的に制御する。また、このROM(102)あるいは外部メモリ(109)には、CPU(101)の制御プログラムであるOS等を記憶する。なお、本実施例ではOSはWindows(登録商標)とするが、他のOSであってもよい。
【0014】
103はRAMで、CPU(101)の主メモリ、ワークエリア等として機能する。104はキーボードI/Fで、キーボード(105)やマウス・タッチパネルなどのポインティングデバイス(113)からのキー入力を制御する。106はディプレイI/Fで、ディスプレイ(107)の表示を制御する。
【0015】
108は外部メモリI/Fで、ハードディスク(HD)、フロッピー(登録商標)ディスク(FD)等の外部メモリ(109)とのアクセスを制御する。外部メモリ(109)は、本発明の重要な位置を占めるアプリケーション(10901)、デバイスアプリ(10902)、プリンタードライバー(10903)、OS(10904)等の各種プログラムが格納される。本実施例においてはMicrosoft Windowsであることを想定しているが、これに限定されるものではない。
【0016】
110はプリンターI/Fで、プリンター(111)との接続を行う。112はポインティングデバイスI/Fで、タッチパネルなどを含むポインティングデバイス(113)と接続する。なお、特に断らない限り、本発明の機能が実行されるのであれば、機器の構成に係わらず本発明を適用できることは言うまでもない。単体の機器であっても、複数の機器からなるシステムであっても、LAN,WAN等のネットワークを介して接続が為され処理が行われるシステムであってもよい。
【0017】
図3に本発明が対象とするソフトウェアモジュールの一例をブロック図で示す。ブロック図の基本構成は、アプリケーション(10901)、印刷システム(109041)、プリンタードライバー(10903)、システムスプーラー(109042)、デバイスアプリ(10902)で構成されている。これらのソフトウェアモジュールは、外部メモリ(109)に格納されており、ユーザーの要求や、他のシステムの要求に応じて、外部メモリ(109)からRAM(103)にロードされ、CPU(101)で実行される。ここにおけるアプリケーション(10901)とは、ワードプロセッサやブラウザなどの一般的なアプリケーションである。
【0018】
ディスプレイ(107)上にUIを表示し、ポインティングデバイス(113)やキーボード(105)などの入力機器によってユーザーの印刷要求を受け付ける。ユーザーの印刷要求を受けて、アプリケーション(10901)は、印刷システム(109041)へ印刷要求を出す。印刷システム(109041)は、OS(10904)のサブシステムである。
【0019】
アプリケーション(10901)とプリンタードライバー(10903)の中間に位置し、印刷処理における共通処理の実行を行う。具体的な実行処理は、印刷対象プリンターの選択や、選択されたプリンタードライバー(10903)のPrintTicket(311)、PrintCapabilities(310)の生成、PrintTicket(311)のコンフリクト処理、XPS(XML Paper Specification)ファイルをPage Description Language(PDL)へ変換することである。PrintCapabilities(310)は、用紙サイズなどを含むプリンター(20)で実行可能な項目の一覧のデータである。
【0020】
一方、PrintTicket(311)は、印刷時に利用される印刷設定の情報であり、印刷及びコンフリクト処理時などに利用される。PrintCappaiblities(310)とPrintTicket(311)は、アプリケーション(10901)から印刷システム(109041)経由でプリンタードライバー(10903)に生成の依頼がされる。
【0021】
PrintCappaiblities(310)とPrintTicket(311)の生成を依頼されたプリンタードライバー(10903)がそれらを生成し、印刷システム(109041)経由でアプリケーション(10901)に渡すことで、アプリケーション(10901)は、選択されたプリンタードライバー(10903)関連の情報を利用することができる。
【0022】
XPSファイル(312)は、アプリケーション(10901)から渡される印刷対象のデータであり、アプリケーション(10901)によってPrintTicket(311)の情報が付加されている。アプリケーション(10901)から印刷システム(109041)経由で、プリンタードライバー(10903)に渡され、PDL(314)に変換することで、プリンター(20)が印刷を行うことができる。
【0023】
なお、PrintCapabilities(310)とPrintTicket(311)、XPSファイル(312)は、それぞれマークアップ言語で記述されている。
【0024】
プリンタードライバー(10903)は、印刷出力先のプリンター(20)に依存する処理を受け持つモジュールであり、大きくわけて2つのブロックで構成されている。
【0025】
ひとつは、印刷設定関連の情報を作成する印刷設定ブロック(109030)であり、PrintTicket(311)のコンフリクト処理とPrintCappaiblities(310)の作成を行う。印刷設定ブロック(109030)は、禁則処理モジュール(320)、GPDファイル(321)、ConstraintJavascript(322)から構成される。禁則処理モジュール(320)は、PrintTicket(311)のコンフリクト処理やPrintCappaiblities(310)の作成を担う。GPDファイル(321)は、禁則ルールや印刷時に設定できる項目等を記述してあるデータである。GPDファイル(321)は、詳細な説明は
図16を用いて後述する。ConstraintJavascript(322)は、GPDファイル(321)に記述できない設定や禁則ルールをPrintTicket(311)やPrintCapabilities(310)に反映させるために呼ばれる。ただし、セキュリティ面を考慮されてインタープリンタ言語であるjavascriptで記述されたモジュールであり、ネイティブ言語と異なり、事前に最適化が行われていないため、実行時に非常に時間がかかる。禁則処理モジュール(320)がコンフリクト処理をする際に、呼び出し元からPrintTicket(311)を受け取り、次にGPDファイル(321)に記述されている禁則ルールの情報を読み出す。禁則処理モジュール(320)は、GPDファイルの情報を基にPrintTicket(311)のコンフリクト処理を行い、その後にConstraintJavascriptを呼び出し、GPDファイルに記述できない禁則ルールをPrintTicket(311)に適応する。これらの一連の処理により、コンフリクト処理が行われる。
【0026】
次に、プリンタードライバー(10903)を構成するもう一つのブロックの、グラフィクスフィルター(10931)について説明する。グラフィクスフィルター(10931)は、XPSファイル(312)をPDL(314)に変換する部分である。XPSファイル(312)に付加されているPrintTicket(311)の情報を抽出し、その情報からPrintTicket(311)を生成する。グラフィクスフィルター(109031)は、PrintTicket(311)を基に、XPSファイル(312)をPDL(314)に変換する。次にデバイスアプリ(10902)の説明を行う。デバイスアプリ(10902)は、プリンタードライバー(10903)の補助アプリである。プリンタードライバー(10903)と同様にプリンター(20)に対応したソフトウェアで、PrintCapabilities(310)とPrintTicket(311)を解釈できる。デバイスアプリ(10902)は、詳細設定画面、デバイスメタデータ(330)、禁則処理モジュール(307)で構成される。デバイスメタデータ(330)は、プリンタードライバー(10903)とデバイスアプリ(10902)を関連付けるものである。デバイスアプリ(10902)が補助することができるプリンタードライバー(10903)が記述されており、デバイスアプリ(10902)は、デバイスメタデータ(330)に記述されているプリンタードライバー(10903)の補助を、デバイスアプリ(10902)で行うことができる。
【0027】
なお、デバイスアプリ(10902)は、一つで複数の種類のプリンタードライバー(10903)を補助することが可能である。
【0028】
禁則処理モジュール(307)は、プリンタードライバー(10903)内の禁則処理モジュール(320)と同様の処理を行えるモジュールである。ここで、同様というのは、PrintTicket(311)とGPDファイルをインプットとし、コンフリクト処理を施したPrintTicket(311)をアウトプットとしたときに、プリンタードライバー(10903)の禁則処理モジュール(307)とデバイスアプリ(10902)内の禁則処理モジュール(320)は、同じインプットから同じアウトプットを出力することを意味する。禁則処理モジュール(307)は、呼び出し元からPrintTicket(311)を渡され、次に、ドライバプロパティバッグ(331)内のGPDファイル(315)内の禁則ルールを読み込み、その情報を基にPrintTicket(311)にコンフリクト処理を行い、アウトプットとしてPrintTicket(311)を出力する。
【0029】
GPDファイル(315)はインストール時点で、ドライバプロパティバッグ(331)に配置されており、内容はGPDファイル(321)と同じものである。これは、デバイスアプリ(10902)が、GPDファイル(321)にアクセスできないため、アクセス可能な場所にGPDファイル(315)を置き、コンフリクト処理時にインプットとして利用するためである。ドライバプロパティバッグ(331)は、インストール前に定義しておきたいデータを記憶しておくことができる記憶領域であり、プリンタードライバー(10903)やデバイスアプリ(10902)からアクセスすることができる。
【0030】
次に、印刷設定ブロック(109030)内のGPDファイル(321)とドライバプロパティバッグ内のGPDファイル(315)について
図16(a)、
図16(b)、
図16(c)を用いて説明する。GPDファイルは、コンフリクト処理の不適切な組み合わせ、用紙サイズなどの選択項目の選択肢のデータ等から構成されている。
【0031】
1700は、コンフリクト処理を行う組み合わせの例である。コンフリクト処理の禁則ルールは、無効な設定の組み合わせを記述するようになっている。この図では、用紙サイズの「はがき」と両面印刷の「長辺両面」の組み合わせになっており、それぞれMedeaType.PostCard,DUPLEX.VERTICALで表現されている。1701は、用紙サイズの選択項目の設定が記述されていることを表しており、同様に、1702は、両面印刷の設定が記述されていることを表している。1703は、設定項目の選択肢であり、本図では用紙サイズの「はがき」の詳細なデータに関して記述してある例である。1704は、用紙サイズの禁則処理の優先度であり、値が低い設定項目ほど優先されることを表す。例えば、本図では用紙サイズは禁則処理の優先度は1であり、1705は両面印刷の優先度は15であることを示している。従って、1700のコンフリクト処理を行う際には、用紙サイズである「はがき」は変更されずに両面印刷の設定が変更される。
【0032】
ここで、
図4のフローチャートを用いて、印刷処理の概要を説明する。本処理は、まずユーザーの印刷要求を受けてアプリケーション(10901)が印刷システム(109041)へ印刷要求を出すことにより開始する。ステップS401では印刷システム(109041)が現在設置されているプリンタードライバー(10903)の情報を基に、印刷可能なプリンター(20)の一覧を示すUI(不図示)をディスプレイ(107)上に表示する。ステップS402ではプリンター(20)の一覧を示すUI上でユーザーによる出力プリンター(20)の選択を受けて、印刷システム(109041)は、該当のプリンタードライバー(10903)を外部メモリ(108)からRAM(103)にロードする、CPU(101)で実行する。ステップS403では、印刷システム(109041)経由で、プリンタードライバー(10903)にPrintCapabilities(310)とPrintTicket(311)の生成を依頼する。印刷設定ブロック(109030)の禁則処理モジュール(320)はそれぞれ、GPDファイル(321)を読み出し、PrintCapabilities(310)とPrintTicket(311)を生成する。生成されたPrintCapabilities(310)とPrintTicket(311)を基に印刷システム(109041)は、
図5の印刷設定画面(501)を構成し、ディスプレイ(107)に表示する。
【0033】
次にステップS404では、印刷設定画面(501)に対するユーザーからの操作を受け付ける。ステップS405では印刷システム(109041)が印刷設定画面(501)の「More Settings」リンク(502)が押下されたかの判定を行う。「More Settings」リンク(502)が押下されたと判断した場合、ステップS406にて、印刷システム(109041)がデバイスアプリ(10902)を呼び出す。この時の、ステップS406の処理に関しては後述する。「More Settings」リンク(502)が押下されていないと判断した場合はステップS407へ進む。
【0034】
ステップS407では、印刷システム(109041)は印刷設定画面(501)の戻るボタン(503)の押下を受けてプリンタードライバー(10903)へ現在のPrintTicket(311)を受け渡す。ステップS408では、禁則処理モジュール(320)を呼び出し、印刷設定が有効かどうかを確認する。ここは、本実施例の重要な個所のため、詳細は後述する。検証の結果を基に、ステップS409では、全ての設定値が有効か判断を行い、有効な場合は印刷設定画面(501)を閉じてステップS410に処理を移行する。全ての設定が有効でなかった場合は、ステップS404に移り、ユーザーの操作を受け付ける。ステップS410で、印刷システム(109041)は、有効になった現在の設定のPrintTicket(311)をXPSファイル(312)に付加し、ステップS411で、XPSファイル(312)をグラフィクスフィルター(109031)へ出力する。グラフィクスフィルター(109031)でPDL(314)に変換する。ステップS411は、グラフィクスフィルター(109031)の呼び出し処理である。詳細について
図14を用いて後述する。ステップS411にて、OS(10904)のサブシステムであるシステムスプーラー(109042)に受け渡されプリンター(20)に送信される。以上の処理を行うことで、印刷処理が実行される。
【0035】
次に、グラフィクスフィルター(109031)の処理について、
図14用いて説明する。ステップS1501では、グラフィクスフィルター(109031)が受け取ったXPSファイル(312)を解析し、PrintTicket(311)を取り出す。ステップS1502で禁則処理モジュール(320)を呼び出し、生成したPrintTicket(311)にコンフリクト処理を施す。ステップS1503へ処理を移行する。ステップS1503で、XPSファイル(312)からPDL(314)を生成し、処理を終了する。次に、詳細設定画面(600)について、
図6を用いて説明する。詳細設定画面(600)は、印刷設定画面(501)では設定できない設定などを行うことを目的とした印刷設定画面である。この画面は、
図5の「More Settings」リンク(502)が押下された際に表示される。図に示されている601は戻るボタンであり、ユーザーによってタップされることで印刷設定画面(501)に、印刷設定画面(501)に遷移する。602は、印刷設定の用紙サイズを設定する用紙サイズコントロールボックスであり、ユーザーがタップをすることで用紙サイズの一覧が表示され、選択したい用紙サイズで、タップしている指を離すことで、用紙サイズを変更することができる。
【0036】
なお、本図では用紙サイズは「はがき」が設定されている。603は、片面、両面の印刷設定を行う片面両面選択コントロールボックスであり、ユーザーがタップすることで、片面、短辺両面、長辺両面の一覧が表示され、選択したい項目で指を離すことで、印刷設定を変更することができる。なお、本図では「片面」が選択されている。
【0037】
デバイスアプリ(10902)の呼び出し処理に関して図のフローチャートを用いて説明を行う。なお、特に断らない限り本実施例のフローチャートの主体はデバイスアプリ(10902)である。ステップS801では、印刷システム(109041)を介してプリンタードライバー(10903)から用紙サイズを含むPrintTicket(311)を取得する。ステップS802では、取得したPrintTicket(311)を基に、詳細設定画面(600)の表示を行う。
【0038】
ステップS803では、ユーザーからの操作を受け付ける。ユーザーによって戻るボタン(601)イベントが発生した場合は、ステップS804の戻るボタン(601)イベントの判別処理からからステップS810へ処理を移行する。ユーザー操作で、印刷設定が何も変更されなかった場合ステップS805の詳細設定画面(600)の印刷設定の変更の判別処理からステップS803へと処理を移行し、再度、ユーザー操作を受け付ける。ステップS805で詳細設定画面(600)の印刷設定の項目が変更された場合、ステップS806へ遷移し、UIの参照先となっているPrintTicket(311)の設定値を変更する。その後、ステップS807へ遷移し、禁則処理モジュール(307)を呼び出す。この内容は、本実施例の重要な位置を占めるため、後述する。
【0039】
ステップS808では、コンフリクト処理によりPrintTicket(311)の設定値が変更されたかどうかの確認を行う。コンフリクト処理が行われた場合、ステップS809に遷移し、ユーザーにコンフリクト時に通知する。コンフリクト通知に関しては、後述する。ステップS810は、戻るボタン(601)がタップされた際に遷移し、印刷設定画面(501)に遷移する前に、印刷システム(109041)に処理を渡し、印刷システム(109041)が禁則処理モジュール(320)呼び出し処理を行い、PrintTicket(311)にコンフリクト処理を行う。これにより、印刷設定画面(501)に戻るときには、PrintTicket(311)の設定値は、印刷可能な設定になっている。
【0040】
次に、コンフリクト時に、ユーザーに通知する手段について
図7を用いて説明する。図の示す700は、コンフリクトポップアップ画面である。デバイスアプリ(10902)がコンフリクト処理を行った際に、コンフリクトが行われたことをユーザーに通知するために、表示される。次に具体的な一例を示す。片面両面選択コントロールボックス(603)に「両面長辺」を設定している時に、用紙サイズコントロールボックス(602)に「はがき」に設定すると、片面両面選択コントロールボックス(603)は「両面長辺」を「片面」に変更するコンフリクト処理を行う。これは、先述したとおり、GPDファイルに記述されている優先度に依存する。その際にコンフリクトポップアップ(700)にコンフリクト処理行われたことと、どの設定がコンフリクトなのかを表示することでユーザーに通知を行う。なお、本実施例ではポップアップを用いて説明しているが、他の通知手段であってもよい。また、コンフリクト処理による他のPrintTicket(311)の設定値の変更の時にも同様の処理が行われる。
【0041】
次に、禁則処理モジュール(307)を呼び出す処理について
図9を用いて説明する。ステップS1000で、禁則処理モジュール(307)は、PrintTicket(311)を呼び出し元から受け取る。ステップS1001では、禁則処理モジュール(307)は、ドライバプロパティバッグのGPDファイル(315)を読み込み、禁則ルールを把握する。ステップS1002では、PrintTicket(311)が有効であるかを判別し、無効ならばステップS1003へ処理を移行し、コンフリクト処理をかける。ステップS1004では、禁則処理モジュール(307)は、呼び出し元にコンフリクト処理を施したPrintTicket(311)を渡す。このように、禁則処理モジュール(307)は、GPDファイル(321)と同じ内容のファイルを利用しつつ、インタープリタ言語を呼び出さないため、保守性を担保しながら高速にコンフリクト処理を行うことができる。
【実施例3】
【0046】
実施例2では、UI上でコンフリクト処理をかけた際には、禁則処理モジュール呼び出し処理(S810)をスキップできる方法について説明したが、UI上でコンフリクト処理をかけたくても、かけられない状態が存在する。例えば、デバイスアプリ(10902)がサポートしているプリンタードライバー(10903)の中には、ドライバプロパティバッグ(331)にGPDファイル(315)を保持していないものが存在する。その場合、実施例1のようなUI上でのコンフリクト処理を行うことができない。
【0047】
そこで、本実施例では、GPDファイル(315)を保持していないプリンタードライバー(10903)には、UI上でコンフリクト処理をかけなくて済むUIを表示する手段について説明する。
図11では、ノンコンフリクト画面について説明する。1200はノンコンフリクト画面であり、GPDファイル(315)が存在しなかった場合に表示される。1201は、戻るボタンであり、詳細設定画面(600)の戻るボタン(601)と同様、ユーザーにタップされることで印刷設定画面(501)に遷移するイベントを起動し、印刷設定画面(501)に遷移する。1202は、用紙サイズコントロールボックス(602)と同様の印刷時に利用される用紙のサイズを設定する用紙サイズコントロールボックスであり、ユーザーがタップをすることで用紙サイズを変更することができる。
図12、
図13は、ノンコンフリクト画面(1200)を表示するフローチャートである。なお、特に断らない限り、
図12、
図13の主語はデバイスアプリ(10902)である。
【0048】
ステップS1301では、ドライバプロパティバッグ(331)にGPDファイル(315)が存在するかどうかを確認する。存在している場合は、禁則処理モジュール(307)を呼び出せることを意味するので、ステップS1303へ遷移し、詳細設定画面(600)を表示するための処理を行う。なおステップS1303からS1314までは、ステップS1101からS1112までと同じため、説明は省略する。GPDファイル(315)が存在しない場合、禁則処理モジュール(307)を呼び出せないことを意味するので、ステップS1302へ遷移し、ノンコンフリクト画面を表示するための処理フローを行う。
【0049】
次に、ノンコンフリクト画面を表示するための処理フローについて
図13を用いて説明する。ステップS1401は、PrintTicket(311)を取得する。ステップS1402はノンコンフリクト画面(1200)にPrintTicket(311)の設定値を反映させ、表示を行う。ステップS1403では、ユーザー操作を受け付ける。
【0050】
ステップS1404では、戻るボタン(1201)イベントの発生を確認する。ユーザーが戻るボタンをタップせずに、ステップS1404に遷移し、ノンコンフリクト画面(1200)の印刷設定が変更すると、ステップS1405で、PrintTicket(311)の設定値を変更し、ステップS1402で、コンフリクトの確認をせずノンコンフリクト画面(1200)にPrintTicket(311)を反映させて表示する。印刷設定が変更されなかった場合は、ステップS1403へ遷移し、ユーザー操作を再度受け付ける。ステップS1404では、戻るボタン(1201)を押されることにより、戻るボタンイベントが発生する。この際に、ステップS1407にあるように、ノンコンフリクト画面(1200)は、OS(10904)がコンフリクト処理を行い、PrintTicket(311)を印刷可能な設定にする。その後、印刷設定画面(501)に遷移する。これにより、GPDファイル(315)が存在する状況としない状況とで、最も高速かつ正確なコンフリクト処理を行うことができる。