以下、添付図面を参照して実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る発明を限定するものではない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
[第1実施形態]
図1は、印刷システムのハードウェア構成を示すブロック図である。本図において、ホストコンピュータ101は、情報処理装置の一例であり、入力インタフェース110、CPU111、ROM112、RAM113、外部記憶装置114、出力インタフェース115、及び入出力インタフェース116を有する。また、入力インタフェース110には、キーボード118、ポインティングデバイス117などの入力デバイスが接続され、出力インタフェース115には、表示部119などの表示デバイスが接続されている。
ROM112には、初期化プログラムが格納され、外部記憶装置114には、アプリケーションプログラム群、OS、後述するプリンタドライバ203、その他の各種のデータが格納されている。例えば、RAM113は、外部記憶装置114に記憶される各種のプログラムの実行の際のワークメモリとして使用される。なお、本実施形態では、例えば、CPU111が、ROM112に記憶されたプログラムの手順に従って処理を行うことによって、ホストコンピュータ101における後述の機能及び後述するフローチャートに係る処理が実現される。印刷装置102は、入出力インタフェース116を介して、ホストコンピュータ101と接続されている。ここでは、ホストコンピュータ101と印刷装置102が別の装置として構成されているが、これらが一つの情報処理装置(若しくは画像形成装置)として構成されていても良い。また、入出力インタフェース116は、有線や無線等、接続されるネットワーク媒体に応じた構成を有する。従って、ホストコンピュータ101と印刷装置102とは、有線や無線、若しくはそれらが混在したネットワークを介して相互に通信可能に接続される。
図2は、ドライバ印刷システムのブロック構成図である。ドライバ印刷システムは、XPSファイルフォーマットをスプールデータとして使用し、印刷を行うシステムである。プリンタドライバ203は、印刷装置102に対して印刷指示を行うことができる。コンフィグレーションモジュール219、フィルタパイプラインマネージャ221は、プリンタドライバ203に含まれている。本実施形態では、それらは、ホストコンピュータ101のOSから提供されている、プリンタドライバ203のモジュールとして構成される。
コンフィグレーションモジュール219は、印刷設定定義ファイル213に基づき、PrintTicketやPrintCapabilitiesの生成を行う。印刷設定定義ファイル213は、GPD(Generic Printer Description)と呼ばれるテキストベースで記載されているファイルである。さらに、印刷設定定義ファイル213には「禁則」の定義を記載することができる。例えば、Microsoft(登録商標)が定義した記述法に基づき、InvalidCombinationの項目に、同時に設定できない印刷設定の設定値を記載することで、ユーザに対して禁則機能を提供することができる。ここで、同時に設定できない印刷設定とは、デバイスの機能として提供できないもののほかに、意図的にユーザに使用してほしくない項目も含まれる。
また、コンフィグレーションモジュール219は、プリンタドライバ203が提供する印刷設定編集モジュール211を用いて印刷設定情報を編集することができる。印刷設定編集モジュール211は、ConstraintScriptと呼ばれる、JavaScript言語で記載されたモジュールである。印刷設定編集モジュール211は、プリンタドライバ203によって記憶されるデータが提供されるプロパティバッグ217を用いて印刷設定情報を編集する。
プロパティバッグ217とは、プリンタの機種依存情報として用いるためのDriverPropertyBagと呼ばれるデータ群と、プリントキューに関連づけられたQueuePropertyBagと呼ばれるデータ群が保持された領域をいう。DriverPropertyBagは、以降、DPBともいい、QueuePropertyBagは、以降、QPBともいう。DPBとQPBは、ともにOSによって提供されている保存領域である。DPBは、ドライバパッケージ内に存在するプリンタの機種依存データであり、プリンタドライバ203のインストール後にOS内の特定の領域に読取専用としてデータ群が保持される。QPBは、Key-ValueペアのXML定義ファイルをOSに登録することで使用することが可能であり、Valueに関して一定の権限上で編集が可能である。また、印刷設定定義ファイル213であるGPDにもQPBの定義を記載することができる。
プリンタエクステンション215は、V4プリンタドライバにおいて、ユーザが印刷設定を行うためのベンダ独自のユーザインタフェースを提供するモジュールである。プリンタエクステンション215は、印刷に用いる用紙サイズや印刷方向、その他の属性を設定する機能を提供する。
図2における印刷システムにおいて、アプリケーション201が印刷を行う場合、まず印刷設定情報の作成を行う。アプリケーション201は、プリンタドライバ203のコンフィグレーションモジュール219を呼び出して、印刷設定情報を作成して記憶する。また、アプリケーション201は、印刷設定情報の作成にプリンタエクステンション215を用いることができる。アプリケーション201は、DEVMODE構造体、もしくはPrintTicketの形式で印刷設定情報を保持している。
次に、アプリケーション201は、印刷データの生成を行う。作成した文書の各ページの印刷データは、OSの印刷サポート機能を通じてXPSスプールファイル205に一時的に蓄えられる。XPSスプールファイル205が生成されると、フィルタパイプラインマネージャ221に処理が渡される。フィルタパイプラインマネージャ221は、複数のフィルタを通すことで印刷が行われる仕組みで、フィルタコンフィグレーションファイル227でフィルタの数や順番が制御される。本実施形態におけるフィルタ群は、レイアウト処理部であるレイアウトフィルタ223と、印刷コマンド変換部である印刷コマンドフィルタ225とを含んで構成される。
レイアウトフィルタ223は、XPSスプールファイル205に格納されたXPSドキュメントを入力とし、印刷設定情報に基づきページのレイアウト処理を行い、レイアウト済みのXPSデータを出力する機能を有する。レイアウト処理とは、例えば複数のページを一つの用紙面に印刷する割り付け印刷や、一つのページを複数の用紙面に印刷するポスター印刷を含む。
印刷コマンドフィルタ225は、レイアウトフィルタ223の出力を入力とし、印刷設定情報に従い、XPSドキュメントを印刷装置102が解釈可能な印刷コマンドに変換し出力する機能を有する。印刷コマンドフィルタ225が入力のXPSドキュメントを一度イメージデータに変換する場合、印刷コマンドフィルタ225は、一般的にレンダフィルタと呼ばれる。レンダフィルタは、例えば、インクジェットプリンタに代表される廉価なラスタプリンタ用のプリンタドライバにおいて構成される。印刷コマンドフィルタ225がレンダフィルタとして動作する場合は、入力のXPSドキュメントを一度イメージデータに変換する。その後、色空間の変換や二値化等の画像処理の過程を経て、ラスタプリンタが解釈可能な印刷コマンドに変換される。例えばページプリンタに代表される高機能なプリンタにおいて、プリンタが解釈できる印刷コマンドの種類にXPSが含まれる場合、印刷コマンドフィルタ225は、入力のXPSドキュメントを編集してXPSドキュメントを出力する。印刷コマンドフィルタ225にて処理する必要がない場合、入力のXPSドキュメントをそのまま出力しても良い。また、印刷コマンドフィルタ225は、プリンタドライバ203に含んで構成されていなくても良い。
図3(a)は、プリンタエクステンション215が、PrintCapabilitiesを要求した際に、コンフィグレーションモジュール219がPrintCapabilitiesを返却するまでのデータの流れを示す図である。コンフィグレーションモジュール219は、印刷設定定義ファイル213に基づき、渡されたPrintTicketの設定を基準としてPrintCapabilitiesを生成し、印刷設定編集モジュール211を呼び出す。印刷設定編集モジュール211は、コンフィグレーションモジュール219から渡されたPrintCapabilitiesとPrintTicketと、DPBに記憶された機種依存情報などを基に、PrintCapabilitiesとPrintTicketを編集する。印刷設定編集モジュール211が編集したPrintCapabilitiesとPrintTicketは、コンフィグレーションモジュール219を通してプリンタエクステンション215へ返却される。
図3(b)は、プリンタエクステンション215が、PrintTicketを要求した際に、コンフィグレーションモジュール219がPrintTicketを返却するまでのデータの流れを示す図である。コンフィグレーションモジュール219は、印刷設定定義ファイル213に基づき、渡されたPrintTicketの設定を編集し、印刷設定編集モジュール211を呼び出す。印刷設定編集モジュール211は、コンフィグレーションモジュール219から渡されたPrintTicketと、DPBに格納された機種依存情報などを基に、PrintTicketを編集する。印刷設定編集モジュール211が編集したPrintTicketは、コンフィグレーションモジュール219を通してプリンタエクステンション215へ返却される。PrintTicketのみが要求された場合は、PrintCapabilitiesの編集処理が行われないため、処理速度が図3(a)の場合に比べると速くなる。
図4及び図5は、コンフィグレーションモジュール219が生成したPrintCapabilitiesの一部である。PrintCapabilitiesは、XMLで記述される。印刷設定定義ファイルで定義されたFeature及びOptionに対応して、PrintCapabilitiesでも、FeatureとOptionは、階層構造で表現される。また、それぞれOptionの子要素として表示名称を表すDisplayNameがPropertyとして定義される。さらに、各Optionには、constrained属性が記述される。constrained属性は、対象のOptionが設定可能な状態であるかを示し、設定可能な場合はconstrained属性には“None”が設定される。印刷設定定義ファイルに記述された禁則に従い、指定されたPrintTicketに基づく設定下では設定できない場合は、constrained属性には他の設定と競合して設定できない旨を示す“PrintTicketSettings”が設定される。その他に、現在のデバイスの状態によって設定できない旨を示す“DeviceSttings”などの設定がある。
例えば、図4及び図5のPrintCapabilitiesには、PageMediaTypeのOptionとしてPlainとPhotoPaperが、PageBorderlessのOptionとしてNoneとBorderlessが、PageOrientationのOptionとしてLandscapeとPortraitが、JobNUpAllDocumentsContiguouslyのOptionとしてNoneとPagePerSheet_2が、PagePosterのOptionとしてNoneとDivision_2が、DocumentCollateのOptionとしてUncollatedとCollatedが記述されている。
図6は、PrintTicketの一例を示す図である。PrintTicketは、XMLで記述される。PrintTicketには、機能(Feature)毎に、設定項目(Option)が記載される。例えば、図6のPrintTicketでは、PageMediaTypeにPhotoPaper、PageBorderlessにNone、PageOrientationにPortrait、JobNUpAllDocumentsContiguouslyにPagesPerSheet_2、PagePosterにNone、DocumentCollateにCollatedが設定されている。
図7は、プリンタエクステンション215の印刷設定を行うUI(印刷設定画面)の一部を示す図である。印刷設定画面上の各コントロールに表示される内容は、コンフィグレーションモジュール219から返却されたPrintCapabilitiesとPrintTicketを用いて構築される。なお、本実施形態におけるコントロールとは、画面上でユーザにより操作される操作アイテムと呼ぶこともできる。
ドロップダウンリスト601は、用紙の種類を設定するためのコントロールである。PrintCapabilitiesのPageMediaTypeのOptionであるPlainとPhotoPaperのDisplayNameを表示し、図7の場合、PrintTicketのPageMediaTypeの設定値PhotoPaper(写真紙)が選択される。
チェックボックス602は、フチなし全面印刷の設定をするためのコントロールである。PrintCapabilitiesのPageBorderlessのOptionであるNoneとBorderlessのconstrained属性がどちらもNoneなので、表示は有効とされる。そして、図7の場合、PrintTicketのPageBorderlessの設定値がNoneなので、表示はオフとされる。
ラジオボタン603と、604は、印刷の向きの設定をするためのコントロールである。PrintCapabilitiesのPageOrientationのOptionであるLandscapeとPortraitのDisplayNameをそれぞれ表示する。図7の場合、PrintTicketのPageOrientationの設定値Portrait(縦)が選択される。
ドロップダウンリスト605は、ページレイアウト(割り付け印刷や分割印刷)を設定するためのコントロールである。割り付け印刷は、複数のページを1枚の用紙に割り当てて印刷し、分割印刷は、1ページを複数の用紙に分割して印刷する機能である。割り付け印刷と分割印刷は同時に設定できないため、GPDに禁則の定義が記載されている。PrintCapabilitiesのJobNUpAllDocumentsContiguouslyのOptionであるNoneとPagePerSheet_2、およびPagePosterのOptionであるDivision_2のDisplayNameを表示する。図7の場合、PrintTicketのJobNUpAllDocumentsContiguouslyの設定値PagePerSheet_2が選択される。
そして、PrintCapabilitiesのDivision_2のconstrained属性が“PrintTicketSettings”となっていることに着目する。この禁則は、PrintTicketのJobNUpAllDocumentsContiguouslyの設定がPagePerSheet_2になっていることが要因である。通常、constrained属性がNone以外であれば、オプションを無効にする。しかしながら、本コントロールのように複数のFeatureを1つのコントロールで設定する場合においては、そのFeature間で発生する禁則は無視する必要がある。なぜなら、禁則を無視しなかった場合、2in1印刷から2分割印刷に設定を変更する場合、一旦1in1印刷を設定し、2分割印刷が有効になってから2分割印刷を設定しなければならず、ユーザビリティが低下するからである。
さらにドロップダウンリスト605には、レイアウトをより分かりやすくするためにオプションの先頭にアイコン606を表示する。一部のアイコンは、用紙の縦横比によって切り替わる。図8に、ページレイアウト605で表示するアイコンの説明をする。図8(a)は、縦長用紙の場合のアイコンの例で、横方向にページを配置する。図8(b)は、横長用紙の場合のアイコンの例で、縦方向にページを配置する。ここでは、縦長用紙が選択されているとし、印刷の向きが縦なので図8(a)のアイコンを表示する。
チェックボックス607は、部単位で印刷する設定をするためのコントロールである。PrintCapabilitiesのDocumentCollateのOptionであるUncollatedとCollatedのconstrained属性がどちらもNoneなので、表示は有効とされる。そして、図7の場合、PrintTicketのDocumentCollateの設定値がCollatedなので、表示はオンとされる。
以下、コントロールに対する一例の操作に基づいて、本実施形態の動作を説明する。
<ケース1:PrintCapabilities及びPrintTicketの生成なし、UI更新なし>
部単位で印刷チェックボックス607がオフされると、プリンタエクステンション215は、PrintTicketのDocumentCollateの設定値をUncollatedに編集し、図9の印刷設定更新処理を開始する。
図9は、プリンタエクステンション215が、PrintCapabilities、PrintTicketおよびUIを更新する処理を示すフローチャートである。S801では、プリンタエクステンション215は、DPBに格納された印刷設定更新情報を取得する。
図10は、印刷設定更新情報を示す図である。印刷設定更新情報は、印刷設定が変更された際、UIの更新に伴う、PrintCapabilities、PrintTicketの更新の要否を定義したリストである。Nameにはコントロール名が列挙され、UpdateSettingsには更新が必要なコントロール名が列挙される。更新が必要なコントロールがない場合は、nullが記載される。IsNeedCommitには、PrintCapabilities、PrintTicketとも更新しない場合は0が記載される。また、PrintCapabilities、PrintTicketとも更新する場合は1が記載される。また、PrintTicketのみ更新する場合は2が記載される。リストに記載がなければ、UpdateSettings=null、IsNeedCommit=0として動作する。
S802では、プリンタエクステンション215は、印刷設定更新情報に、Nameが一致するデータが存在するか否かを判定する。本例では、NameがDocumentCollateであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがDocumentCollateのデータは存在しないので、S804に進み、プリンタエクステンション215は、図11のUI更新処理を実行し、その後、図9の印刷設定更新処理を終了する。
図11は、プリンタエクステンション215が、UIを更新する処理を示すフローチャートである。S1001では、プリンタエクステンション215は、DPBに記憶された印刷設定更新情報を取得する。S1002では、印刷設定更新情報に、Nameが一致するデータが存在するか否かを判定する。本例では、NameがDocumentCollateであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがDocumentCollateのデータは存在しないので、S1009に進み、プリンタエクステンション215は、印刷設定UIが無効か否かを判定する。ここでは、印刷設定UIは無効ではないので、図11のUI更新処理を終了する。
以上のように、本ケースでは、PrintCapabilitiesとPrintTicketの生成処理およびUI更新処理は行われない。そのため、印刷設定UIが無効になることがないので、ユーザは次のコントロールを操作することができ、操作性の高いUIを提供することができる。また、本ケースでは、部単位で印刷チェックボックス607がオフされる場合を説明した。しかし、PrintCapabilitiesとPrintTicketの生成処理およびUI更新処理が行われない場合であれば、他の操作が行われても上記の動作は同様に適用され得る。
<ケース2:PrintCapabilities及びPrintTicketの生成なし、UI更新あり>
印刷の向きの横ラジオボタン604がオンされると、プリンタエクステンション215は、PrintTicketのPageOrientationの設定値をLandscapeに編集し、図9の印刷設定更新処理を開始する。
S801では、プリンタエクステンション215は、DPBに格納された印刷設定更新情報を取得する。本例では、S802では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageOrientationであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageOrientationのデータが存在するので、S803に進み、プリンタエクステンション215は、該当するデータ内のIsNeedCommitの設定値が0か否かを判定する。ここでは、IsNeedCommitの設定値は0なので、S804に進み、図11のUI更新処理を実行する。
図11のS1001では、プリンタエクステンション215は、DPBに格納された印刷設定更新情報を取得する。本例では、S1002では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageOrientationであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageOrientationのデータが存在するので、S1003に進み、プリンタエクステンション215は、該当するデータ内のUpdateSettingsを取得する。図10に示すように、UpdateSettingsには、“PageLayout”のみが列挙されているので、ページレイアウトコンボボックス605を更新する。
ページレイアウトコンボボックス605は前述のとおり割り付け印刷と分割印刷を含む。そのため、S1004で、プリンタエクステンション215は、PrintCapabilitiesとPrintTicketからJobNUpAllDocumentsContiguouslyとPagePosterの情報を取得する。そして、S1005で、プリンタエクステンション215は、ドロップダウンリスト605と設定値を更新する。ただし、前述のとおりJobNUpAllDocumentsContiguouslyとPagePoster間で発生する禁則については無視される。S1004とS1005は、IsNeedCommitが0(PrintCapabilities、PrintTicketとも更新しない)の場合は、実行しなくてもよい。
次に、S1006では、プリンタエクステンション215は、アイコンがあるか否かを判定する。ページレイアウトコンボボックス605には、前述のとおりアイコンが表示されるので、S1007に進み、プリンタエクステンション215は、印刷設定UIを無効にしてアイコンを更新する。印刷の向きが横に変更された結果、図8(b)のアイコンに切り替えられる。S1007の処理は、IsNeedCommitが0の場合でも実行される。
S1008では、プリンタエクステンション215は、UpdateSettingsに列挙された全ての要素の更新が完了したか否かを判定する。全ての要素の更新が完了していないと判定された場合、S1004からの処理を繰り返す。一方、全ての要素の更新が完了したと判定された場合、S1009に進み、プリンタエクステンション215は、印刷設定UIが無効か否かを判定する。ここでは、無効であるので、S1010に進み、印刷設定UIを有効にし、その後、図11のUI更新処理を終了する。
以上のように、本ケースでは、PrintCapabilitiesとPrintTicketの生成処理は行われない。また、印刷設定UIが無効になる時間は極めて短く、ユーザはほぼ待つことなく次のコントロールを操作することができる。その結果、操作性の高いUIを提供することができる。
また、本ケースでは、印刷の向きの横ラジオボタン604がオンされる場合を説明した。しかし、PrintCapabilitiesとPrintTicketの生成処理が行われず、S1007で印刷設定UIが無効になる場合であれば、他の操作が行われても上記の動作は同様に適用され得る。
<ケース3:PrintCapabilitiesの生成なし、PrintTicketの生成あり、UI更新あり>
フチなし印刷チェックボックス602がオンされると、プリンタエクステンション215は、PrintTicketのPageBorderlessの設定値をBorderlessに編集し、図9の印刷設定更新処理を開始する。
S801では、プリンタエクステンション215は、DPBに記憶された印刷設定更新情報を取得する。本例では、S802では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageBorderlessであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageBorderlessのデータが存在するので、S803に進み、プリンタエクステンション215は、該当するデータ内のIsNeedCommitの設定値が0か否かを判定する。IsNeedCommitの設定値は0ではないので、S805に進み、プリンタエクステンション215は、IsNeedCommitの設定値が1か否かを判定する。IsNeedCommitの設定値は2なので、S808に進み、プリンタエクステンション215は、コンフィグレーションモジュール219へ編集したPrintTicketを渡してPrintTicketを要求する。PrintTicketの生成は非同期処理なので、PrintTicketの生成の完了を待たず次の処理へ進む。S807では、プリンタエクステンション215は、印刷設定UIを無効にして入力を受け付けないようにし、図9の印刷設定処理を終了する。
コンフィグレーションモジュール219でPrintTicketの生成が完了すると、プリンタエクステンション215へ完了イベントが通知される。プリンタエクステンション215は、完了イベントを受信すると、図11のUI更新処理を開始する。
S1001では、プリンタエクステンション215は、DPBに格納された印刷設定更新情報を取得する。S1002では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageBorderlessであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageBorderlessのデータが存在するので、S1003に進み、プリンタエクステンション215は、該当するデータ内のUpdateSettingsを取得する。図10に示すように、UpdateSettingsには“PageLayout”のみが列挙されているので、ページレイアウトコンボボックス605を更新する。
ページレイアウトコンボボックス605は前述のとおり割り付け印刷と分割印刷を含む。S1004でプリンタエクステンション215は、PrintCapabilitiesとPrintTicketからJobNUpAllDocumentsContiguouslyとPagePosterの情報を取得する。そして、S1005で、プリンタエクステンション215は、ドロップダウンリスト605と設定値を更新する。
JobNUpAllDocumentsContiguouslyとPagePoster間で発生する禁則については無視するが、他の設定による禁則については従う。本ケースでは、フチなし印刷時は、割り付け印刷と分割印刷は設定できないので、ページレイアウトコンボボックス605を無効にし、設定値はPrintTicketに従って1in1印刷に変更する。
次に、S1006では、プリンタエクステンション215は、アイコンがあるか否かを判定する。ページレイアウトコンボボックス605には、前述のとおりアイコンが表示されるので、S1007に進み、プリンタエクステンション215は、アイコンを更新する。1in1印刷の場合、印刷の向きに依らず、図8(c)のアイコンに切り替えられる。
S1008では、プリンタエクステンション215は、UpdateSettingsに列挙された全ての要素の更新が完了したか否かを判定する。全ての要素の更新が完了していないと判定された場合、S1004からの処理を繰り返す。一方、全ての要素の更新が完了したと判定された場合、S1009に進み、プリンタエクステンション215は、印刷設定UIが無効か否かを判定する。ここでは、無効であるので、S1010に進み、印刷設定UIを有効にし、その後、図11のUI更新処理を終了する。
以上のように、本ケースでは、PrintCapabilitiesの生成処理は行われない。また、PrintTicket及びPrintCapabilitiesの両方を生成する場合に比べ、印刷設定UIが無効になる時間を短くできる。その結果、操作性の高いUIを提供することができる。
また、本ケースでは、フチなし印刷チェックボックス602がオンされる場合を説明したが、PrintCapabilitiesの生成処理が行われない場合であれば、他の操作が行われても上記の動作は同様に適用され得る。
<ケース4:PrintCapabilities及びPrintTicketの生成あり、UI更新あり>
用紙の種類ドロップダウンリスト601で普通紙が選択されると、プリンタエクステンション215は、PrintTicketのPageMediaTypeの設定値をPlainに編集し、図9の印刷設定更新処理を開始する。
S801では、プリンタエクステンション215は、DPBに格納された印刷設定更新情報を取得する。本例では、S802では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageMediaTypeであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageMediaTypeのデータが存在するので、S803に進み、プリンタエクステンション215は、該当するデータ内のIsNeedCommitの設定値が0か否かを判定する。IsNeedCommitの設定値は0ではないので、S805に進み、プリンタエクステンション215は、IsNeedCommitの設定値が1か否かを判定する。IsNeedCommitの設定値は1なので、S806に進み、プリンタエクステンション215は、コンフィグレーションモジュール219へ編集したPrintTicketを渡してPrintCapabilitiesとPrintTicketを要求する。PrintCapabilitiesとPrintTicketの生成は非同期処理なので、PrintCapabilities及びPrintTicketの生成の完了を待たず次の処理へ進む。S807で、プリンタエクステンション215は、印刷設定UIを無効にして入力を受け付けないようにし、図9の印刷設定処理を終了する。
コンフィグレーションモジュール219でPrintCapabilities及びPrintTicketの生成が完了すると、プリンタエクステンション215へ完了イベントが通知される。プリンタエクステンション215は、完了イベントを受信すると、図11のUI更新処理を開始する。
S1001では、プリンタエクステンション215は、DPBに格納された印刷設定更新情報を取得する。S1002では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageMediaTypeであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageMediaTypeのデータが存在するので、S1003に進み、プリンタエクステンション215は、該当するデータ内のUpdateSettingsを取得する。図10に示すように、UpdateSettingsには、PageBorderlessとPageLayoutが列挙されているので、フチなし印刷チェックボックス602とページレイアウトコンボボックス605を更新する。
S1004では、プリンタエクステンション215は、PrintCapabilitiesとPrintTicketからPageBorderlessの情報を取得する。用紙の種類が普通紙の場合、フチなし印刷はできないので、S1005で、プリンタエクステンション215は、フチなし印刷チェックボックス602を無効にし、フチなし印刷オフを設定する。
次に、S1006では、プリンタエクステンション215は、アイコンがあるか否かを判定する。フチなし印刷チェックボックス602にはアイコンはないので、S1008へ進む。S1008で、プリンタエクステンション215は、UpdateSettingsに列挙された全ての要素の更新が完了したか否かを判定する。ここでは、次の要素PageLayoutがあるので、S1004へ戻る。
ページレイアウトコンボボックス505は前述のとおり割り付け印刷と分割印刷を含む。S1004でプリンタエクステンション215は、PrintCapabilitiesとPrintTicketからJobNUpAllDocumentsContiguouslyとPagePosterの情報を取得する。そして、S1005で、プリンタエクステンション215は、ドロップダウンリスト605と設定値を更新する。ここでは、フチなし印刷がオフなので、プリンタエクステンション215は、ページレイアウトコンボボックス605を有効にし、設定値について、PrintTicketに従って1in1印刷を設定する。
次に、S1006では、プリンタエクステンション215は、アイコンがあるか否かを判定する。ページレイアウトコンボボックス605には、前述のとおりアイコンが表示されるので、S1007に進み、プリンタエクステンション215は、アイコンを更新する。1in1印刷の場合、印刷の向きに依らず、図8(c)のアイコンに切り替えられる。
S1008では、プリンタエクステンション215は、UpdateSettingsに列挙された全ての要素の更新が完了したか否かを判定する。全ての要素の更新が完了したと判定された場合、S1009に進み、プリンタエクステンション215は、印刷設定UIが無効か否かを判定する。ここでは、無効であるので、S1010に進み、印刷設定UIを有効にし、その後、図11のUI更新処理を終了する。
本ケースでは、用紙の種類ドロップダウンリスト601で普通紙が選択される場合を説明したが、PrintCapabilities及びPrintTicketの生成処理が行われる場合であれば、他の操作が行われても上記の動作は同様に適用され得る。
以上のように、本実施形態によれば、印刷設定更新情報に基づいて、コンフィグレーションモジュール219に対する、PrintCapabilitiesとPrintTicketの生成の要求を制御する。つまり、ケース1及びケース2のように、PrintCapabilitiesとPrintTicketを生成する必要がない条件を満たす場合には、PrintCapabilitiesとPrintTicketの生成要求は行わない。なお、ケース1及びケース2のように、PrintCapabilitiesとPrintTicketを生成する必要がない条件を満たす場合は、禁則がないか若しくは禁則があっても無視できる場合に相当する。そのような構成により、PrintCapabilitiesとPrintTicketを生成することによってUI更新が完了するまで入力を受け付けられなくなる事態を低減することができる。
[第2実施形態]
以下、第2実施形態について第1実施形態と異なる点について説明する。本実施形態では、コントロールに対する操作により生じる禁則を解消するために印刷設定が矯正されてしまった場合でも、その印刷設定が設定可能になった時点で、自動的に設定を戻すことができる。以下、一例として、ユーザにより順次行われる操作1、2、3に沿って、本実施形態を説明する。
<操作1:フチなし印刷チェックボックス602をオン。PrintTicket生成あり、UI更新あり>
フチなし印刷チェックボックス602がオンされると、プリンタエクステンション215は、PrintTicketのPageBorderlessの設定値をBorderlessに編集し、図12の印刷設定更新処理を開始する。
図12は、本実施形態における、プリンタエクステンション215が、PrintCapabilities、PrintTicketおよびUIを更新する処理を示すフローチャートである。
S1101では、プリンタエクステンション215は、変更された印刷設定をメモリ領域に保存する。その際、保存された印刷設定は、後続する操作によって上書きされずに、一定期間、蓄積されていくものとする。本例では、フチなし印刷オンをメモリ領域へ保存する。S1102では、プリンタエクステンション215は、DPBに格納された印刷設定更新情報を取得する。S1103では、プリンタエクステンション215は、印刷設定更新情報に、Nameが一致するデータが存在するか否かを判定する。本例では、NameがPageBorderlessであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageBorderlessのデータが存在するので、S1104に進み、プリンタエクステンション215は、該当するデータ内のIsNeedCommitの設定値が0か否かを判定する。本例では、IsNeedCommitの設定値は0ではないので、S1106に進み、プリンタエクステンション215は、IsNeedCommitの設定値が1か否かを判定する。本例では、IsNeedCommitの設定値は2なので、S1109に進み、プリンタエクステンション215は、コンフィグレーションモジュール219へ編集したPrintTicketを渡してPrintTicketを要求する。PrintTicketの生成は非同期処理なので、PrintTicketの生成の完了を待たず次の処理へ進む。S1108で、プリンタエクステンション215は、印刷設定UIを無効にして入力を受け付けないようにし、図12の印刷設定処理を終了する。
S1103でNameが一致するデータが存在しないと判定された場合、S1105で、図11のUI更新処理が実行され、その後、図12の処理を終了する。
コンフィグレーションモジュール219でPrintTicketの生成が完了すると、プリンタエクステンション215へ完了イベントが通知される。プリンタエクステンション215は、完了イベントを受信すると、図13のUI更新処理を開始する。
図13は、本実施形態における、プリンタエクステンション215が、UIを更新する処理を示すフローチャートである。S1201では、プリンタエクステンション215は、DPBに記憶された印刷設定更新情報を取得する。S1202では、プリンタエクステンション215は、印刷設定更新情報に、Nameが一致するデータが存在するか否かを判定する。本例では、NameがPageBorderlessであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageBorderlessのデータが存在するので、S1203に進み、プリンタエクステンション215は、該当するデータ内のUpdateSettingsを取得する。図10に示すように、UpdateSettingsには、“PageLayout”のみが列挙されているので、ページレイアウトコンボボックス605を更新する。
S1202でNameが一致するデータが存在しないと判定された場合、S1211へ進み、プリンタエクステンション215は、印刷設定UIを有効にし、その後、図13のUI更新処理を終了する。
ページレイアウトコンボボックス605は前述のとおり割り付け印刷と分割印刷を含む。S1204でプリンタエクステンション215は、PrintCapabilitiesとPrintTicketからJobNUpAllDocumentsContiguouslyとPagePosterの情報を取得する。そして、S1205で、プリンタエクステンション215は、S1101でメモリ領域に保存した印刷設定が設定可能か否かを判定する。ここでは、フチなし印刷のオンは設定可能な状態にあるので、S1207に進み、プリンタエクステンション215は、S1101でメモリ領域に保存した印刷設定を設定し(本例では、フチなし印刷オン)、ドロップダウンリスト605と設定値を更新する。
JobNUpAllDocumentsContiguouslyとPagePoster間で発生する禁則については無視するが、他の設定による禁則については従う。フチなし印刷時は、割り付け印刷と分割印刷は設定できないので、ページレイアウトコンボボックス605を無効にし、設定値はPrintTicketに従って1in1印刷に変更する。
次に、S1208では、プリンタエクステンション215は、アイコンがあるか否かを判定する。ページレイアウトコンボボックス605には、前述のとおりアイコンが表示されるので、S1209に進み、プリンタエクステンション215は、アイコンを更新する。1in1印刷の場合、印刷の向きに依らず、図8(c)のアイコンに切り替えられる。
S1210では、プリンタエクステンション215は、UpdateSettingsに列挙された全ての要素の更新が完了したか否かを判定する。全ての要素の更新が完了していないと判定された場合、S1204からの処理を繰り返す。一方、全ての要素の更新が完了したと判定された場合、S1211に進み、プリンタエクステンション215は、印刷設定UIを有効にし、その後、図13のUI更新処理を終了する。
<操作2:普通紙の選択。PrintCapabilities及びPrintTicketの生成あり、UI更新あり>
操作1に続いて、用紙の種類ドロップダウンリスト601で普通紙が選択されると、プリンタエクステンション215は、PrintTicketのPageMediaTypeの設定値をPlainに編集し、図12の印刷設定更新処理を開始する。
本例では、S1101では、プリンタエクステンション215は、用紙の種類の設定である普通紙をメモリ領域へ保存する。S1102では、プリンタエクステンション215は、DPBに格納された印刷設定更新情報を取得する。S1103では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageMediaTypeであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageMediaTypeのデータが存在するので、S1104に進み、プリンタエクステンション215は、該当するデータ内のIsNeedCommitの設定値が0か否かを判定する。IsNeedCommitの設定値は0ではないので、S1106に進み、プリンタエクステンション215は、IsNeedCommitの設定値が1か否かを判定する。IsNeedCommitの設定値は1なので、S1107に進む。プリンタエクステンション215は、コンフィグレーションモジュール219へ編集したPrintTicketを渡してPrintCapabilitiesとPrintTicketを要求する。PrintCapabilitiesとPrintTicketの生成は非同期処理なので、PrintCapabilitiesとPrintTicketの生成の完了を待たず次の処理へ進む。S1108で、プリンタエクステンション215は、印刷設定UIを無効にして入力を受け付けないようにし、図12の印刷設定処理を終了する。
コンフィグレーションモジュール219でPrintCapabilitiesとPrintTicketの生成が完了すると、プリンタエクステンション215へ完了イベントが通知される。プリンタエクステンション215は、完了イベントを受信すると、図13のUI更新処理を開始する。
本例では、S1201では、プリンタエクステンション215は、DPBに格納された印刷設定更新情報を取得する。S1202では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageMediaTypeであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageMediaTypeのデータが存在するので、S1203に進み、プリンタエクステンション215は、該当するデータ内のUpdateSettingsを取得する。図10に示すように、UpdateSettingsには、PageBorderlessとPageLayoutが列挙されているので、フチなし印刷チェックボックス602とページレイアウトコンボボックス605を更新する。
S1204で、プリンタエクステンション215は、PrintCapabilitiesとPrintTicketからPageBorderlessの情報を取得する。そして、S1205で、プリンタエクステンション215は、S1101でメモリ領域に保存した印刷設定が設定可能か否かを判定する。フチなし印刷オンが設定されていれば、普通紙の選択はできないので設定可能でないと判定されてS1206に進み、プリンタエクステンション215は、フチなし印刷チェックボックス602を無効にし、フチなし印刷オフを設定する(禁則のため、設定の矯正)。
次に、S1208では、プリンタエクステンション215は、アイコンがあるか否かを判定する。フチなし印刷チェックボックス602にはアイコンはないので、S1210へ進む。S1210で、プリンタエクステンション215は、UpdateSettingsに列挙された全ての要素の更新が完了したか否かを判定する。ここでは、次の要素PageLayoutがあるので、S1204へ戻る。
ページレイアウトコンボボックス605は前述のとおり割り付け印刷と分割印刷を含む。S1204でプリンタエクステンション215は、PrintCapabilitiesとPrintTicketからJobNUpAllDocumentsContiguouslyとPagePosterの情報を取得する。そして、S1205で、プリンタエクステンション215は、S1101でメモリ領域に保存した印刷設定が設定可能か否かを判定する。上記のようにフチなし印刷オフが設定されたことにより、普通紙の選択が可能であるので、S1207に進み、プリンタエクステンション215は、ドロップダウンリスト605と設定値を更新する。ここでは、フチなし印刷がオフなので、プリンタエクステンション215は、ページレイアウトコンボボックス605を有効にし、設定値はPrintTicketに従って1in1印刷を設定する。
次に、S1208では、プリンタエクステンション215は、アイコンがあるか否かを判定する。ページレイアウトコンボボックス605には、前述のとおりアイコンが表示されるので、S1209に進み、アイコンを更新する。1in1印刷の場合、印刷の向きに依らず、図8(c)のアイコンに切り替えられる。
S1210では、プリンタエクステンション215は、UpdateSettingsに列挙された全ての要素の更新が完了したか否かを判定する。ここでは、全ての要素の更新が完了したので、S1211に進み、プリンタエクステンション215は、印刷設定UIを有効にし、その後、図13のUI更新処理を終了する。
<操作3:写真紙の選択:PrintCapabilities及びPrintTicketの生成あり、UI更新あり>
操作2に続いて、用紙の種類ドロップダウンリスト601で写真紙が選択されると、プリンタエクステンション215は、PrintTicketのPageMediaTypeの設定値をPhotoPaperに編集し、図12の印刷設定更新処理を開始する。
本例では、S1101では、プリンタエクステンション215は、用紙の種類の設定である写真紙をメモリ領域へ保存する。S1102では、プリンタエクステンション215は、DPBに記憶された印刷設定更新情報を取得する。S1103では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageMediaTypeであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageMediaTypeのデータが存在するので、S1104に進み、プリンタエクステンション215は、該当するデータ内のIsNeedCommitの設定値が0か否かを判定する。IsNeedCommitの設定値は0ではないので、S1106に進み、プリンタエクステンション215は、IsNeedCommitの設定値が1か否かを判定する。IsNeedCommitの設定値は1なので、S1107に進む。プリンタエクステンション215は、コンフィグレーションモジュール219へ編集したPrintTicketを渡してPrintCapabilitiesとPrintTicketを要求する。PrintCapabilitiesとPrintTicketの生成は非同期処理なので、PrintCapabilitiesとPrintTicketの生成の完了を待たず次の処理へ進む。S1108で、プリンタエクステンション215は、印刷設定UIを無効にして入力を受け付けないようにして、図12の印刷設定処理を終了する。
コンフィグレーションモジュール219でPrintCapabilitiesとPrintTicketの生成が完了すると、プリンタエクステンション215へ完了イベントが通知される。プリンタエクステンション215は、完了イベントを受信すると、図13のUI更新処理を開始する。
本例では、S1201では、プリンタエクステンション215は、DPBに記憶された印刷設定更新情報を取得する。S1202では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageMediaTypeであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageMediaTypeのデータが存在するので、S1203に進み、プリンタエクステンション215は、該当するデータ内のUpdateSettingsを取得する。図10に示すように、UpdateSettingsには、PageBorderlessとPageLayoutが列挙されているので、フチなし印刷チェックボックス602とページレイアウトコンボボックス605を更新する。
S1204で、プリンタエクステンション215は、PrintCapabilitiesとPrintTicketからPageBorderlessの情報を取得する。そして、S1205で、プリンタエクステンション215は、S1101でメモリ領域に保存した印刷設定が設定可能か否かを判定する。「操作2」でフチなし印刷オフに設定されていても、写真紙の選択は可能であるので、S1207に進み、プリンタエクステンション215は、フチなし印刷チェックボックス602を有効にし、オンを設定する。つまり、「操作1」でフチなし印刷オンに設定された後、「操作2」で禁則によりフチなし印刷オフに矯正されるとする。この場合でも、操作3により禁則が解除されてフチなし印刷オンが可能になれば、且つ、従前のS1101でフチなし印刷オンが保存されていれば、設定をフチなし印刷オンに戻すことができる。
次に、S1208では、プリンタエクステンション215は、アイコンがあるか否かを判定する。フチなし印刷チェックボックス602にはアイコンはないので、S1210へ進む。S1210で、プリンタエクステンション215は、UpdateSettingsに列挙された全ての要素の更新が完了したか否かを判定する。ここでは、次の要素PageLayoutがあるので、S1204へ戻る。
ページレイアウトコンボボックス505は前述のとおり割り付け印刷と分割印刷を含む。S1204でプリンタエクステンション215は、PrintCapabilitiesとPrintTicketからJobNUpAllDocumentsContiguouslyとPagePosterの情報を取得する。そして、S1205で、プリンタエクステンション215は、S1101でメモリ領域に保存した印刷設定が設定可能か否かを判定する。写真紙の選択が可能であるので、S1207に進み、プリンタエクステンション215は、ドロップダウンリスト605と設定値を更新する。ここでは、フチなし印刷がオンなので、ページレイアウトコンボボックス605を無効にし、設定値はPrintTicketに従って1in1印刷を設定する。
次に、S1208では、プリンタエクステンション215は、アイコンがあるか否かを判定する。ページレイアウトコンボボックス605には、前述のとおりアイコンが表示されるので、S1209に進み、アイコンを更新する。1in1印刷の場合、印刷の向きに依らず、図8(c)のアイコンに切り替えられる。
S1210では、プリンタエクステンション215は、UpdateSettingsに列挙された全ての要素の更新が完了したか否かを判定する。ここでは、全ての要素の更新が完了したので、S1211へ進み、プリンタエクステンション215は、印刷設定UIを有効にし、その後、図13のUI更新処理を終了する。
以上のように、本実施形態では、コントロールに対する操作により生じる禁則を解消するために印刷設定が矯正されてしまった場合でも(操作2でのS1206)、その印刷設定が設定可能になった時点で、自動的に設定を戻すことが可能になる。さらに、本実施形態では、所定の種類の操作による印刷設定に基づいた処理を例に説明したが、他の操作による印刷設定についても同様に適用され得る。
[第3実施形態]
以下、第3実施形態について第1及び第2実施形態と異なる点について説明する。以下、コントロールに対する操作の流れを一例として説明するが、以下の操作の流れに限定されるものではなく、他の操作の流れに対しても適用され得る。
例えば、用紙の種類のコンボボックス601で「写真用紙」を選択し、ページレイアウトコンボボックス605で「2in1印刷」を選択した状態で、フチなし印刷チェックボックス602がオンされたとする。この場合、プリンタエクステンション215は、PrintTicketのPageBorderlessの設定値をBorderlessに編集し、図14の印刷設定更新処理を開始する。
図14は、本実施形態における、プリンタエクステンション215が、PrintCapabilities、PrintTicketおよびUIを更新する処理を示すフローチャートである。
S1301で、プリンタエクステンション215は、現在PrintTicket生成中か否かを判定する。PrintTicket生成中でないと判定された場合、S1302で、プリンタエクステンション215は、DPBに記憶された印刷設定更新情報を取得する。S1301でPrintTicket生成中であると判定された場合、図14の処理を終了する。ここでは、PrintTicketの生成はまだ要求されていないので、S1302に進む。
S1303では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageBorderlessであるデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageBorderlessのデータが存在するので、S1304に進み、プリンタエクステンション215は、該当するデータ内のIsNeedCommitの設定値が0か否かを判定する。IsNeedCommitの設定値は0ではないので、S1306に進み、プリンタエクステンション215は、IsNeedCommitの設定が1か否かを判定する。IsNeedCommitの設定値は2なので、S1309に進み、プリンタエクステンション215は、コンフィグレーションモジュール219へ編集したPrintTicketを渡してPrintTicketの生成を要求する。PrintTicketの生成は非同期処理なので、PrintTicketの生成の完了を待たず、図14の印刷設定更新処理を終了する。
S1306でIsNeedCommitの設定値が1と判定された場合、S1307において、プリンタエクステンション215は、コンフィグレーションモジュール219へ編集したPrintTicketを渡す。そしてPrintCapabilities、PrintTicketの生成を要求する。その場合も、PrintCapabilities、PrintTicketの生成は非同期処理なので、PrintCapabilities、PrintTicketの生成の完了を待たず、図14の印刷設定更新処理を終了する。
本実施形態によれば、PrintTicket生成中も印刷設定UIを無効としない。つまり、印刷設定UIは有効なままであるので、ユーザは続けてコントロールの操作が可能であり、操作性を向上させることができる。
さらに、部単位で印刷チェックボックス607がオフされると、プリンタエクステンション215は、PrintTicketのDocumentCollateの設定値をUncollatedに編集し、図14の印刷設定更新処理を開始する。
S1301で、プリンタエクステンション215は、現在PrintTicket生成中か否かを判定する。ここでは、上記で要求が行われたPrintTicket生成の処理中であるので、PrintTicket生成中であると判定され、図14の印刷設定更新処理を終了する。
さらに、用紙の種類コンボボックス601で普通紙が選択されると、プリンタエクステンション215は、PrintTicketのPageMediaTypeの設定値をPlainに編集し、図14の印刷設定更新処理を開始する。
S1301で、プリンタエクステンション215は、現在PrintTicket生成中か否かを判定する。ここでは、上記で要求が行われたPrintTicket生成の処理中であるので、PrintTicket生成中であると判定され、図14の印刷設定更新処理を終了する。
そして、コンフィグレーションモジュール219でPrintTicketの生成が完了すると、プリンタエクステンション215は、完了イベントを受信し、図15の更新後PrintTicketマージ処理を開始する。
図15は、更新後PrintTicketマージ処理を示すフローチャートである。
S1401では、プリンタエクステンション215は、DPBに記憶された印刷設定更新情報を取得する。S1402で、プリンタエクステンション215は、コンフィグレーションモジュール219から渡された更新後PrintTicketの印刷設定を読み込む。
S1403では、プリンタエクステンション215は、S1402で読み込んだ印刷設定がPrintTicketに存在するか否かを判定する。存在すると判定された場合は、S1404に進み、プリンタエクステンション215は、保持しているPrintTicketと、更新後PrintTicketの設定値とが一致するか否かを判定する。本例では、フチなし印刷時は割り付け印刷は設定できないので、JobNupAllDocumentsContiguouslyの設定は、更新後PrintTicketでは1in1印刷となっている。一方、保持しているPrintTicketでは2in1印刷なので、S1404で一致しないと判定され、S1405に進む。
S1403でPrintTicketに存在しないと判定された場合、S1404で一致すると判定された場合には、他の印刷設定について、S1403からの処理を繰り返す。
S1405では、プリンタエクステンション215は、印刷設定更新情報に、Nameが一致するデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがAllDocumentsContiguouslyのデータは存在しないので、S1410へ進む。Nameが一致するデータが存在すると判定された場合には、後述するようにS1406に進む。
S1410では、プリンタエクステンション215は、保持しているPrintTicketの値は設定可能であるか否かを判定する。本例では、2in1印刷が設定可能か否かを、更新後のPrintCapabilitiesに基づいて判定する。前述のとおりフチなし印刷時は割り付け印刷と分割印刷は設定できないので、2in1印刷は設定可能でないと判定し、S1411に進み、プリンタエクステンション215は、PrintTicketに更新後PrintTicketの値を設定する。本例では、PrintTicketの設定を、更新後PrintTicketの値である1in1印刷に変更する。S1410で設定可能でないと判定された場合には、他の印刷設定について、S1403からの処理を繰り返す。
次に、他の印刷設定について、S1403からの処理を繰り返す。本例では、PrintTicket生成中に変更された用紙の種類についてS1403からの処理を行う。本例では、S1403で、S1402で読み込んだ印刷設定がPrintTicketに存在すると判定される。そして、更新後PrintTicketでは写真用紙であり、保持しているPrintTicketでは普通紙であるので、S1404で一致しないと判定され、S1405に進む。
S1405では、プリンタエクステンション215は、印刷設定更新情報に、NameがPageMediaTypeのデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがPageMediaTypeのデータが存在するので、S1406で該当するデータ内のIsNeedCommitの設定値が0か否かを判定する。IsNeedCommitの設定値が0であれば、S1410へ進む。本例では、IsNeedCommitの設定値は0ではないので、S1407に進み、プリンタエクステンション215は、IsNeedCommitの設定値が1か否かを判定する。本例では、IsNeedCommitの設定値は1なので、S1408に進む。プリンタエクステンション215は、コンフィグレーションモジュール219へPrintTicketを渡してPrintCapabilitiesとPrintTicketの生成を要求する。PrintCapabilitiesとPrintTicketの生成は非同期処理なので、PrintCapabilitiesとPrintTicketの生成の完了を待たず、図15の処理を終了する。
一方、S1407でIsNeedCommitの設定値が1でないと判定された場合、S1409に進み、プリンタエクステンション215は、コンフィグレーションモジュール219へPrintTicketを渡してPrintTicketの生成を要求する。PrintTicketの生成は非同期処理なので、PrintTicketの生成の完了を待たず、図15の処理を終了する。
上記のように図15の処理を終了する場合には、マージ処理が中断されることになるが、S1402で再びコンフィグレーションモジュール219から渡された更新後PrintTicketの印刷設定を読み込み、S1403以降の処理が行われる。以下、そのようなケースにおいて、PrintTicket生成中に変更された部単位印刷について、S1403からの処理が行われるとして説明する。
本例では、S1403で、S1402で読み込んだ印刷設定がPrintTicketに存在すると判定される。そして、更新後PrintTicketでは部単位印刷オンであり、保持しているPrintTicketでは部単位印刷オフであるので、S1404で一致しないと判定され、S1405に進む。
本例では、S1405で、プリンタエクステンション215は、印刷設定更新情報に、NameがDocumentCollateのデータが存在するか否かを判定する。ここでは、図10の印刷設定更新情報に、NameがDocumentCollateのデータは存在しないので、S1410に進み、プリンタエクステンション215は、部単位印刷オフが設定可能か否かを判定する。フチなし印刷時でも部単位印刷はオン、オフとも設定可能であるので、設定可能と判定される。本例では、更新後PrintTicketの印刷設定の全てについて処理したことになるので、図15のループを抜け、S1412に進む。
S1412では、図11のUI更新処理を実行し、その後、図15の処理を終了する。つまり、本実施形態では、更新後PrintTicketと、コンフィグレーションモジュール219で生成中に操作が行われたPrintTicketとをマージし、そのマージ後のPrintTicketに基づいて、図11のUI更新処理が実行される。その結果、ユーザの操作性を低下させることなく、最新のPrintTicketに基づいて印刷設定UIの更新処理が行われる。なお、本実施形態では、S1309でPrintTicketの生成が要求されるケースについて説明したが、S1307でPrintCapabilitiesとPrintTicketの生成が要求されるケースについても同様の効果が得られる。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。