本発明の実施形態では、GUIアプリケーションにより、ドライバに応じた適切な機能を提供するための例を説明する。このGUIアプリケーションは、V4プリンタドライバのようにGraphical User Interface(以下、「ユーザインタフェース」又は「GUI」とも呼ぶ)を提供する機能を有していないドライバが用いられる場合に起動し、GUIを提供する。
なお、V4プリンタドライバを拡張する従来のWindows Store Device App(WSDA)も、GUIを提供できたが、以下の機能制限があった。具体的には、ユーザ指示によって任意に起動されるものであるため、印刷等の要求時に常にユーザインタフェースを表示したいユースケースには不適合である。さらに、従来のWSDAは印刷設定を変更することを目的に構成されたアプリケーションであるため、印刷要求を発行した描画アプリケーションが生成する描画データ(紙面上に印刷を形成する元となる画像やテキスト情報等)にアクセスすることができない。よって、描画データを表示したり編集したりすることはできない。従って、従来のWSDAは、V4プリンタドライバでは、ユーザからの印刷要求が発生したタイミングで、ユーザインタフェースを表示し、ユーザ操作を受け付けて、それを印刷処理に反映させるような機能の提供は困難であった。
また、従来のWSDAは、接続されたプリンタドライバの能力を示す情報に従って、それを指定するためのユーザインタフェースを提供する。仮にWSDAがプリンタドライバの能力情報に含まれない機能指示を印刷設定に含めたとしても、プリンタドライバにとっては未知の情報であるため有効に機能しない。さらに、前述の通り、従来のWSDAは描画データにアクセスできないため、WSDA自身が機能指示を受けて描画データを編集することもできない。従って、前述のようなOSと共に提供されるクラスドライバに対して印刷装置を提供するベンダがWSDAを提供したとしても、ベンダが独自に機能を拡張することはできなかった。
本発明では、上記した機能制限を受けないアプリケーションを用い、ドライバに応じた適切な機能を提供することができる。以下、添付図面を参照して本発明の好適な実施の形態を詳しく説明する。尚、以下の実施の形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成要素には同一の参照番号を付して、説明を省略する。
<<実施形態1>>
<印刷システムのハードウェア構成>
図1は、印刷システムのハードウェア構成を示すブロック図である。本図において、ホストコンピュータ101は、情報処理装置の一例であり、入力インタフェース110、CPU111、ROM112、RAM113、外部記憶装置114、出力インタフェース115、及び入出力インタフェース116を有する。また、入力インタフェース110には、キーボード118、ポインティングデバイス117などの入力デバイスが接続され、出力インタフェース115には、表示部119などの表示デバイスが接続されている。
ROM112には、初期化プログラムが格納され、外部記憶装置114には、アプリケーションプログラム群、オペレーティングシステム(OS)、プリンタドライバ、その他の各種のデータが格納されている。RAM113は、外部記憶装置114にストアされる各種のプログラムの実行の際のワークメモリ等として使用される。
なお、本実施形態では、CPU111が、ROM112に格納されたプログラムの手順に従って処理を行うことによって、ホストコンピュータ101における後述の機能及び後述するフローチャートに係る処理が実現される。デバイスである印刷装置102は、入出力インタフェース116を介して、ホストコンピュータ101と接続されている。ここでは、ホストコンピュータ101と印刷装置102が分かれて構成されているが、これらが一つの情報処理装置として構成されていても良い。
<ドライバ印刷システムのブロック構成>
図2は、ドライバ印刷システムのブロック構成図である。ここでは、OSとしてMicrosoft(登録商標)のWindows(登録商標)8以降のOSを搭載したホストコンピュータ101を用い、V4プリンタドライバと呼ばれるアーキテクチャで動作する印刷システムを前提として説明する。
ユーザがUWP(Universal Windows Platform)アプリケーション202から印刷を指示すると、OSの機能である不図示のMPD(ModernPrint Dialog)により所定の画面が表示される。UWPアプリケーション202は、描画アプリケーションである。MPDにより提供される画面は、印刷結果を画面上で確認できる印刷プレビュー機能と、基本的な印刷設定をユーザが選択可能な機能と、を有する。図22に具体的な例を示す。図22(A)では、描画アプリケーションであるUWPアプリケーションが提供する画面2201において、印刷の指示がなされると、OSのMPDにより図22(B)に示す設定画面2202が表示される。この設定画面2202において、ユーザは、使用するドライバの選択を行うことができる。さらに、設定画面2202において、基本的な印刷設定を指示することもできる。
さらに、MPDは、ユーザからの指示を受け、詳細な印刷設定をユーザが選択可能なWindows Store Device Application(以後、WSDA)207を起動する。具体的には、図22(B)の設定画面2202において「その他の設定」ボタン2203が指定されると、図22(C)に示すWSDAが提供する詳細設定画面2204が表示される。この詳細設定画面2204でユーザは更に詳細な印刷設定を指示することができる。WSDA207は印刷装置を提供するベンダ(以後、プリンタベンダ)が提供するプリンタドライバ201の機能を拡張するためのアプリケーションである。なお、WSDAが提供する詳細設定画面2204内に表示されている原稿画像のように見える画像は、WSDAが元々備えているサンプル画像である。よって、UWPアプリケーションにより生成された描画データに基づくプレビュー画像ではなく、描画データが変わっても変化しないサンプル画像である。WSDA207は、MPDから印刷設定を示す情報を受け取り、ユーザ操作に応じてその設定情報を変更し、MPDに返却する。ここで、印刷設定を示す情報は、OSの定義する書式に基づきXML形式で記述されたものであり、PrintTicketと呼ばれるデータ内に含まれる。WSDA207はPrintTicketを参照及び変更することができるが、描画データ(紙面上に印刷を形成する元となる画像やテキスト情報等)を参照することはできない。また、WSDA207は、MPDが提供する印刷設定画面2202上でユーザがボタン2203を指示した場合にのみ起動されるものであって、印刷設定時に必ず起動されるわけではない。
なお、PrintTicketは、選択されたプリンタドライバ201のコンフィグレーションモジュール208によって生成される。WSDA207は、コンフィグレーションモジュール208を呼び出すことで、ユーザの指定を反映したPrintTicketを生成する。また、コンフィグレーションモジュール208は、選択されたプリンタドライバ201で設定可能な機能と選択項目をOSの定義する書式に基づきXML形式で記述したPrintCapabilitiesを生成する機能も有する。WSDA207や後述するPEX209は、このPrintCapabilitiesに記述された情報に基づきユーザインタフェースを提供する。また、後述する印刷時起動アプリケーション205は、OSの機能を介して、コンフィグレーションモジュール208が生成したPrintCapabilitiesを取得することができる。
なお、図2では、コンフィギュレーションモジュール208をプリンタドライバ201の機能として記載しているが、コンフィギュレーションモジュール208は元々OSの構成物である。ただし、V4プリンタドライバにおいては、ドライバ自体がコンフィグレーションモジュールを備えていないためOSの構成物であるコンフィグレーションモジュール208をドライバのコンフィグレーションモジュールとして利用する。プリンタベンダは、プリンタドライバ201に含まれる不図示のGPDやJava(登録商標)script Constraintによって、コンフィグレーションモジュール208の動作をカスタマイズできる。
図22で示した印刷設定の後に、OSのMPDが提供する設定画面2202において、「印刷」ボタンが指示されると、印刷要求がなされる。MPD上でユーザにより印刷が指示されると、MPDから要求を受け、UWPアプリケーション202は印刷に必要な印刷データを生成する。この印刷データは、XML Paper Specification(以後、XPS)という書式で記述されたXPS文書である。本実施形態の印刷データは、前述のPrintTicketと、描画アプリケーションにより生成された描画データと、を有する。
UWPアプリケーション202が生成したXPS文書は、OSのコンポーネントである印刷時起動アプリランチャー204に渡される。印刷時起動アプリランチャー204は、プリンタドライバ201に関連付けられた印刷時起動アプリケーション205が存在し、かつ起動するように構成されていると判断した場合、印刷時起動アプリケーション205を起動する。なお、該当する印刷時起動アプリケーション205が存在しない場合は、印刷時起動アプリランチャー204はXPS文書をスプールファイル206として格納する。
印刷時起動アプリケーション205は、WSDA207と同様、プリンタベンダが提供するプリンタドライバ201の機能を拡張するためのアプリケーションである。つまり、V4ドライバのようにGUIを提供する機能を有していないドライバが選択された場合に、OSの指示に基づき、GUIを提供することができるGUIアプリケーションである。なお、GUIを提供する機能を有しているV3ドライバが選択された場合は、OSは印刷時起動アプリランチャー204を起動せず、描画アプリケーションが生成したXPS文書をスプールファイル206として格納する。つまり、V3ドライバが選択された場合は、印刷時起動アプリケーション205は起動せず、GUIを提供することもない。
なお、WSDA207と印刷時起動アプリケーション205は、どちらも、プリンタドライバ201の構成物の1つとして提供されるものではなく、単独のアプリケーションである。また、WSDA207と印刷時起動アプリケーション205とは、合わせて1つのアプリケーションとして構成可能であるが、便宜上、ここでは、従来のWSDAとの差異を説明するため、別々のアプリケーションとして説明する。
WSDA207と印刷時起動アプリケーション205は、通常、OSが、不図示のアプリケーション配布システム(Microsoft(登録商標)が管理するサーバ)からインターネットを経由して取得する。さらに、プリンタベンダが、事前にMicrosoft(登録商標)が管理するMetadata用サーバに、後述のMetadataを提供することで、適切なWSDA207及び印刷時起動アプリケーション205が自動的にインストールされる。具体的には、デバイスである印刷装置102が入出力インタフェース116に接続されると、Metadataに基づき、印刷装置102に関連付けられたWSDA207及び印刷時起動アプリケーション205が自動的にインストールされる。
印刷時起動アプリケーション205は、ユーザから操作指示を受け付けるユーザインタフェースを表示することができる。また、印刷データであるXPS文書を受け取り、XPS文書内のPrintTicket及び描画データを編集することができる。印刷時起動アプリケーション205が必要に応じて編集したXPS文書を出力すると、OSはそれをスプールファイル206として格納する。スプールファイル206が格納されると、フィルタパイプラインマネージャ210に処理が渡される。フィルタパイプラインマネージャ210は、複数のフィルタを通すことで印刷が行われる仕組みで、不図示のコンフィグレーションファイルでフィルタの数や順番が制御される。本実施形態におけるフィルタ群は、レイアウト処理部であるレイアウトフィルタ211と、印刷コマンド変換部である印刷コマンドフィルタ212とを含んで構成される。
レイアウトフィルタ211は、XPSスプールファイル206に格納されたXPS文書を入力とし、印刷設定情報に基づきページのレイアウト処理を行い、レイアウト済みのXPS文書を出力する機能を有する。レイアウト処理とは、例えば複数のページを一つの用紙面に印刷する割り付け印刷や、一つのページを複数の用紙面に印刷するポスター印刷を含む。
印刷コマンドフィルタ212は、レイアウトフィルタ211の出力を入力とし、印刷設定情報に従い、XPS文書を印刷装置102が解釈可能な印刷コマンドに変換し出力する機能を有する。印刷コマンドフィルタ212が入力のXPS文書を一度イメージデータに変換する場合、印刷コマンドフィルタ212は一般的にレンダフィルタと呼ばれる。レンダフィルタは、インクジェットプリンタに代表される廉価なラスタプリンタ用のプリンタドライバにおいて多く見られる。印刷コマンドフィルタ212がレンダフィルタとして動作する場合は、入力のXPS文書を一度イメージデータに変換する。その後、色空間の変換や二値化等の画像処理の過程を経て、ラスタプリンタが解釈可能な印刷コマンドに変換される。
ページプリンタに代表される高機能なプリンタにおいて、印刷装置102が解釈できる印刷コマンドの種類にXPSが含まれる場合、印刷コマンドフィルタ212は、入力のXPS文書を編集してXPS文書を出力する。印刷コマンドフィルタ212にて処理する必要がなければ、入力のXPS文書をそのまま出力しても良いし、若しくは、印刷コマンドフィルタ212はプリンタドライバ201に含められなくても良い。以上が、UWPアプリケーション202からの印刷の基本処理である。
Win32アプリケーション等の描画アプリケーションであるLegacyアプリケーション203は、印刷設定を設定するためにPrinter Extensions209(以後、PEX)を起動することができる。PEXは、コンフィグレーションモジュール208を経由して起動され、ユーザが印刷設定を指定可能なユーザインタフェースを提供することができる。PEX209は、プリンタドライバ201と共にドライバパッケージ内の構成物として提供しても良いし、別で配布しても良い。WSDA207同様、PEX209はPrintTicketを参照及び変更することができるが、描画データ(紙面上に印刷を形成する元となる画像やテキスト情報等)を参照することはできない。また、PEX209は、Legacyアプリケーション203上でユーザが指示した場合にのみ起動されるものであって、印刷時に必ず起動されるわけではない。Legacyアプリケーション203で印刷が指示されると、Legacyアプリケーション203は印刷データとしてXPS文書を生成する。以後の流れは、UWPアプリケーション202からの印刷時と同等であるため省略する。
なお、本構成におけるプリンタドライバ201は、Faxドライバとして機能しても良い。この場合、プリンタドライバ201は、印刷装置が解釈可能な印刷コマンドではなく、印刷装置にFax送信を要求するためのFaxコマンドを生成する。以降の説明においても、便宜上、Faxドライバの場合であっても、プリンタドライバ201として記載し、Fax指示の場合であっても、印刷指示として記載する場合もある。
<印刷装置と印刷時起動アプリケーションを関連付けるMetadata>
図3は、印刷装置102と印刷時起動アプリケーション205を関連付けるMetadata301において、対応デバイス情報を示す記述の一例である。Metadata301には、Metadata301を利用する印刷装置102の一覧を示すHardwareIDListタグ302が記述される。項目303は、MFP1_abcdというHardware IDを持つ印刷装置102がこのMetadataを利用することを示している。同様に、項目304は、MFP2_ijklというHardware IDを持つ印刷装置102がMetadata301を利用することを示している。このように、1つのMetadataに、そのMetadataを利用するデバイスを複数列挙することができる。Metadata301には、デバイスとして2つの印刷装置が指定されているが、1つであっても、3つ以上であっても構わない。なお、Hardware IDとは、印刷装置102から返却される、印刷装置102を一意に特定するための識別情報である。
図4は、デバイスである印刷装置102と、GUIアプリケーションである印刷時起動アプリケーション205と、を関連付けるMetadata301において、関連付ける印刷時起動アプリケーション205を示す記述の一例である。図4のMetadata内には、Metadata301が関連付ける印刷時起動アプリケーション205を示すDeviceCompanionApplicationsタグ401が記述されている。項目402は、12345678-abcd-efgh-ijkl-123456789012というプリンタベンダが提供する、1234abcd.MFPUtilityという印刷時起動アプリケーション205を、HardwareIDListタグ302に列挙された印刷装置102に関連付けることを示す。
ホストコンピュータ101に印刷装置102が接続されると、OSは所定のサーバ(Microsoft(登録商標)が管理するMetadata用サーバ)に登録されているMetadataを検索する。そして、HardwareIDListに、接続された印刷装置102の返却するHardware IDが記述されたMetadataを見つけると、それを印刷装置102の外部記憶装置114に保存する。さらに、OSは、保存したMetadataのDeviceCompanionApplicationタグ401に記述された印刷時起動アプリケーション205を不図示のアプリケーション配布システムから取得する。そして、外部記憶装置114に印刷時起動アプリケーション205をインストールし、印刷装置102と関連付ける。これにより、印刷装置102に対してプリンタドライバ201を経由して印刷要求が発生した際に、関連付けられている印刷時起動アプリケーション205が起動される。
このMetadataはプリンタベンダにより提供されるものである。プリンタベンダは、このMetadataを事前にMicrosoft(登録商標)が管理するMetadata用サーバに提供することにより、ユーザ環境にプリンタドライバ201がインストールされた際に、接続されたデバイスに最適な印刷時起動アプリケーション205を自動的にインストールするように制御することができる。なお、ユーザの指示により、1つのデバイスに対して複数のプリンタドライバ201がインストールされることもあり得る。
<Metadata301で構築される印刷環境>
図5は、Metadata301で構築される印刷環境の一例を示す図である。印刷装置102であるMFP501は、1つの装置中に、印刷機能部504と、受け付けた印刷要求をFaxとして送信するFax機能部505を有する。印刷装置部504は、MFP1_abcdというHardware IDを有する。Fax機能部505は、MFP1_efghというHardware IDを有する。Fax機能部505のHardware IDは、印刷装置部504と同じHardware IDとして、コマンドによって処理を切り替えるよう構成することもできる。
MFP501をホストコンピュータに接続すると、OSは、HardwareIDListタグにMFP1_abcdというHardware IDが記述されているMetadata301を取得する。
さらに、Metadata301に記述されているMFPUtility506という印刷時起動アプリケーション205を取得し、MFP501と関連付ける。なお、Fax機能部505は印刷装置部504と異なるHardware IDを有しているが、OSは、印刷装置102から取得した情報を元に、これら2つの処理部を同一のデバイス(コンポジットデバイス)として判断する。従って、Fax機能部505についても、印刷装置部504と同一のMetadata301並びにMFPUtility506が関連付けられる。なお、Metadata301のHardwareIDList302に、Fax機能部505のHardware IDであるMFP1_efghを記述するよう構成しても良い。
MFP501の印刷装置部504用にインストールされるプリンタドライバ201は複数種類存在しうる。つまり、1つのデバイスであるMFP501に対応するドライバとして、複数のドライバが存在しうる。機種別プリンタドライバ508は、プリンタベンダにより提供されるMFP501の印刷装置部504の専用プリンタドライバである。共通プリンタドライバ509は、プリンタベンダにより提供される、該プリンタベンダの複数種類の印刷装置102を処理可能な、共通プリンタドライバである。そして、複数ベンダにより提供される印刷装置に共通して利用可能なクラスドライバである標準プリンタドライバ510は、OSと共にOSのパッケージ内の機能の1つとして提供されるプリンタドライバである。標準プリンタドライバ510は、標準化された印刷方法を利用することで、幅広い印刷装置102を処理可能なプリンタドライバである。
このように、ある印刷装置102用に利用可能なプリンタドライバ201は複数存在し、利用されるプリンタドライバ201は、インターネット接続状態やOSの種類、利用環境等に応じて異なる。通常、OSは、プリンタドライバのバージョン情報等を参照して、利用可能なプリンタドライバ201のうち、もっとも機能が高く新しいプリンタドライバ201を自動的に選定しインストールする。なお、プリンタドライバ201には、Hardware IDや、Compatible IDと呼ばれる装置を特定するための情報が含まれている。ホストコンピュータ101に印刷装置102が接続されると、OSは印刷装置102からこれらのID情報を取得し、該当するIDを有するプリンタドライバ201を探索し、インストールする。
MFP501のFAX機能部505用には、MFP1_efghというHardware IDを含むFaxドライバ511がインストールされる。また、ホストコンピュータ101に、MFP2_ijklというHardware IDを持つMFP502が接続された場合、このMFP502にはMFPUtility506が関連付けられる。これは、図3の304に示されるように、Metadata301の対象とするHardwareIDListに、MFP2_ijklが含まれているためである。MFP3_mnopというHardware IDを持つMFP503に対しては、Metadata301とは異なる不図示のMetadataの指定に伴って、MFPUtility506とは異なる、MFPUtility507が関連付けられる。
以上のように、印刷装置102を提供するプリンタベンダは、Metadataを提供することで、それぞれの印刷装置102に対してどの印刷時起動アプリケーション205を提供するかを制御することができる。例えば、プリンタベンダは、複数の印刷装置102で共通して一つの印刷時起動アプリケーション205を提供することもできるし、それぞれ異なる印刷時起動アプリケーション205を提供することもできる。しかしながら、印刷装置102に関連付けられたプリンタドライバ201の種類に応じて、印刷時起動アプリケーション205を提供し分けることはできない。図5においては、MFP501で利用されるプリンタドライバ201はドライバ508からドライバ511の4種類存在するが、関連付けられる印刷時起動アプリケーション205は常に1種類である。
なお、WSDA207についても、印刷時起動アプリケーション205と同等の仕組みで印刷装置102やプリンタドライバ201と関連付けられる。従って、関連付けに関する制約等については、印刷時起動アプリケーション205と同等である。
<印刷時起動アプリケーションのセットアップ処理>
図6は、本印刷システムにおける印刷時起動アプリケーション205のセットアップ処理のうち主要な処理フローを示した図である。本処理フローは、例えば図5のMFPUtility506のような構成下にある印刷時起動アプリケーション205の処理の一例である。以降、印刷時起動アプリケーション205を、各処理の主体として説明することもあるが、実際には、対応するプログラムをCPU111が実行することで、対応する機能が実現されることになる。なお、全ての処理は必ずしも一つのプロセス上で逐次的に実行されるものではなく、一度OS側に処理が移り、再度OSから呼び出されるようなケースもあり得る。あくまで印刷時起動アプリケーション205の主要な処理を、便宜的にわかりやすく示したフローである。
印刷時起動アプリランチャー204は、印刷要求元の描画アプリケーションからXPS文書を受け取ると、印刷装置102に関連付けられた印刷時起動アプリケーション205の初期化処理を呼び出す。なお、前述の図22にて説明した印刷設定の後、OSが提供する設定画面2202において「印刷」ボタンが指示されると、印刷要求がなされ、描画アプリケーションからXPS文書が出力される。
印刷時起動アプリケーション205は、初期化処理において、図6に示されるセットアップ処理と、後述する図8に示される編集及び終了処理を、OSの規定するイベントハンドラとして登録する。印刷時起動アプリケーション205が初期化処理を終了すると、OSは、規定のイベントハンドラとして登録された印刷時起動アプリケーション205のセットアップ処理を実行する。図6はそのセットアップ処理を示すものである。
まず、印刷時起動アプリケーション205は、XPS文書中に格納されたPrintTicketを取得する(S601)。PrintTicketは、図2で説明したとおり、印刷設定を示す情報を含むデータであり、ユーザにより指示された印刷設定に基づき、コンフィグレーションモジュール208によって生成される。PrintTicketは、OSの所定のAPIを呼び出すことでXPS文書中から取得することができる。
次に、印刷時起動アプリケーション205は、プリンタドライバ201の能力を示す情報を含むデータであるPrintCapabilitiesを取得する。そして、その中の名前空間を確認することで、アプリケーションから印刷要求を受けたプリンタドライバ201の種別を判定する(S602)。PrintCapabilitiesの名前空間と判定方法の詳細については後述する。
なお、通常であれば、PrintTicketにもPrintCapabilitiesと同等の名前空間情報が格納されているため、S602の判定はPrintTicketを利用しても良い。PrintCapabilitiesの取得は時間を要するため、構成によってはPrintTicketを利用することにより処理時間を短縮することができる。また、プリンタドライバ201が、不図示のDriverPropertyBag等に判定のための情報を格納してもよい。印刷時起動アプリケーション205は、そのDriverPropertyBagに格納した情報を取得し判定に用いるよう構成しても良い。
S602の判定の結果、アプリケーションから印刷要求を受けたプリンタドライバ201がFaxドライバであった場合、印刷時起動アプリケーション205は、動作モードがFaxドライバモードであることを保存する(S603)。S603の処理、及び以降で説明する印刷時起動アプリケーション205の情報の保持は、一例として、OSにより提供されるLocal Storageを利用する。Local Storageに格納する情報の全体構成は後述する。同様に、印刷時起動アプリケーション205は、Local Storageに、UI表示が有効であることを保存する(S604)。
その後、OSの提供する規定のAPIを呼び出して、今回の印刷時起動アプリケーション205の実行に於いて、ユーザインタフェースを表示することを指示する(S605)。このAPIを実行することで、後述の図7で示す印刷時起動アプリケーション205のUI処理が呼び出され、印刷時起動アプリケーション205はユーザインタフェースを表示する。Faxドライバモード時の印刷時起動アプリケーション205のセットアップ処理は以上で終了である。
S602の判定の結果、アプリケーションから印刷要求を受けたプリンタドライバ201がFaxドライバではなかった場合、印刷時起動アプリケーション205は、動作モードがプリンタドライバモードであることを保存する(S606)。
次に、PrintTicketを参照し、印刷プレビュー起動指示が存在するかを確認する(S607)。PrintTicketの具体的な確認方法は、図13を用いて後述する。また、印刷プレビューの起動指示は、WSDA207及びPEX209から指定可能で、かつ印刷時起動アプリケーション205から参照可能な手段であれば、PrintTicket以外の方法により実現しても良い。例えば、プリンタドライバ201の設定情報の格納場所としてOSにより提供される、UserPropertyBag、あるいはQueuePropertyBagを利用するよう構成しても良い。なお、印刷プレビューとは、印刷設定とアプリケーションが生成した印刷データとを元に、紙面上に生成されることになる印刷結果のイメージを表示部119に表示することを指す。つまり、「印刷プレビュー起動指示がPrintTicketに存在する」ことは、印刷プレビュー画面の表示がユーザにより指示されたことを示す。ユーザは、印刷プレビュー画面を見ることで、所望の印刷結果が得られるかを印刷前に確認し、必要に応じて印刷設定の修正や特定ページの削除、印刷処理の中止を指示することができる。
S607で印刷プレビュー起動指示が存在しないと判断した場合、印刷時起動アプリケーション205は、S609に進む。S607で印刷プレビュー起動指示が存在すると判断した場合、印刷時起動アプリケーション205は、印刷プレビューが有効であることを保存する(S608)。
次に、S609で、印刷時起動アプリケーション205は、PropertyBagに機能拡張指示が存在するか否かを確認する。PropertyBagは、前述の通り、UserPropertyBagあるいはQueuePropertyBagを指す。この機能拡張は、例えばプリンタドライバが標準プリンタドライバ510のような基本的な機能しか有さない場合に、印刷時に指定可能な機能をプリンタベンダが拡張するためのものである。なお、標準プリンタドライバ510に対し、機能拡張を指示するような指定を含むPrintTicketを渡すと、その指定は標準プリンタドライバ510にとって未知の情報であるため、不正な指定として削除されてしまう。このようなケースに於いては、機能拡張指示をPropertyBagに格納することで、削除されずに維持される。一方、PrintTicketは、印刷データであるXPS文書に含まれ、印刷データ単位で保持される情報である。よって、複数の印刷要求が連続して生じた場合にも、印刷要求毎に印刷プレビューや機能拡張の有効、無効を、正確に切り替える事ができるというメリットがある。なお、印刷時起動アプリケーション205は、S609の処理をスキップし、拡張可能である場合は、常に機能拡張を有効化するように構成しても良い。
S609でPropertyBag内に機能拡張指示が存在しないと判断した場合、印刷時起動アプリケーション205は、S613に進む。S609でPropertyBagに機能拡張指示が存在すると判断した場合、印刷時起動アプリケーション205は、PrintCapabilitiesを取得する(S610)。S602で既にPrintCapabilitiesを取得している場合は、S610の処理はスキップする。
次に、印刷時起動アプリケーション205は、PrintCapabilitiesでサポートされていない所定機能が存在するか否かを判定する(S611)。所定機能とは、印刷時起動アプリケーション205が自身で編集能力を有し、拡張機能として印刷時起動アプリケーション205が提供可能な機能を指す。すなわち、印刷時起動アプリケーション205は、PrintCapabilities内に記載されていない機能であり、印刷時起動アプリケーション205が提供可能な機能が存在するかを判定する。これにより、プリンタドライバ201がサポートしておらず、自身が提供可能な機能が存在するか否かを判定する。この判定処理については図15を用いて詳細を後述する。
S611で該当機能が存在しないと判断した場合、印刷時起動アプリケーション205はS613に進む。S611で該当機能が存在すると判断した場合、印刷時起動アプリケーション205は、該当機能を拡張機能としてLocal Storageに保存する(S612)。
次に印刷時起動アプリケーション205は、印刷プレビューが有効、あるいは提供する拡張機能が存在するかを判断する(S613)。S613がYesの場合、印刷時起動アプリケーション205はS604に進み、ユーザインタフェースの表示を指示する。S614がNoの場合、印刷時起動アプリケーション205はセットアップ処理を終了する。
以上のように、印刷時起動アプリケーション205のセットアップ処理では、ユーザインタフェースの起動が必要か否かを判断し、必要な場合はそれを指示すると共に、その後の処理に必要な情報の格納を行う。
<PrintTicket、PrintCapabilitiesの構成例と関連処理>
図9から図12は、それぞれ異なる構成のプリンタドライバおよびFaxドライバのPrintCapabilitiesの例である。なお、これらのPrintCapabilitiesは、説明に必要な部分を中心に記述したものであり、一部省略されている。
図9は、Faxドライバ511のPrintCapabilitiesの例である。PrintCapabilitiesの先頭には、psf:PrintCapabilities要素があり、その属性として、そのPrintCapabilitiesで利用する名前空間が定義されている。通常、ここには、PrintSchemaと呼ばれるOS標準の定義を示す名前空間に加え、このプリンタドライバ201を提供するプリンタベンダが独自に定義した名前空間が列挙される。図9で示されるPrintCapabilitiesには、プリンタベンダが独自に定義した名前空間901が含まれる。
一方、図10は、機種別プリンタドライバ508のPrintCapabilitiesの一例である。図10で示されるPrintCapabilitiesには、プリンタベンダが独自で定義した名前空間1001が含まれる。また、図11は、共通ドライバ509のPrintCapabilitiesの一例を示し、図12は標準プリンタドライバ510のPrinntCapabilitiesの一例を示している。
名前空間は、選択可能な機能や選択項目、その定義を一意に定めるためのものであり、同じプリンタベンダが提供するプリンタドライバ201であっても、プリンタとFax等、機能集合が大きく異なる場合は、異なる値とすることが一般的である。これを利用して、S602は、名前空間に、図9の名前空間901内に示されるような、http://www.mfpvendor.com/ns/printschema/fax/v100というURLが含まれるか否か、という判定を行えばよい。
図13は、図10に示した機種別プリンタドライバ508のPrintCapabilities1000を元に生成される、PrintTicketの一例である。図13に示されるように、PrintTicketには、PrintCapabilitiesで定義された各機能の設定値が格納される。例えば、psk:PageMediaTypeというFeatureは、印刷に利用する用紙種類を示しており、図13のPrintTicketでは、psk:Plain、つまり普通紙が指定されている。S607の印刷プレビューの起動指示有無の判定処理は、ns0000:JobPreviewというFeatureの指定値が、ns0000:ONになっているか否かを判定する事になる。
次に、S611の判定処理について、図10から図12のPrintCapabilitiesと、図15を用いて詳細に説明する。図15は、印刷時起動アプリケーション205が拡張機能として提供可能な所定機能と、その選択項目の一覧を示す。ここでは、印刷時起動アプリケーション205は、複数ページを1ページに割り付けて印刷するページ割り付け機能と、印刷結果に指定されたスタンプを重ね合わせるスタンプ機能を有する。
印刷時起動アプリケーション205は、S611の判定処理において、PrintCapabilitiesを解析して、図15の“機能名”で示される機能が存在しているか否かを確認する。印刷対象が機種別プリンタドライバ508のPrintCapabilities1000であった場合、JobNUpAllDocumentsContiguouslyというFeatureとPageStampというFeatureが存在する。よって、S611の判定結果はNoとなる。
印刷対象が共通プリンタドライバ509のPrintCapabilities1100であった場合、JobNUpAllDocumentsContiguouslyというFeatureは存在するが、PageStampというFeatureは存在しない。よって、S611の判定結果はYesとなる。その時に印刷時起動アプリケーション205が拡張機能として提供するのは、PageStamp、つまりスタンプ機能となる。印刷対象が標準プリンタドライバ510のPrintCapabilities1200であった場合、JobNUpAllDocumentsContiguouslyというFeatureもPageStampというFeatureも存在しない。よって、S611の判定結果はYesとなる。その時に印刷時起動アプリケーション205が拡張機能として提供するのは、JobNUpAllDocumentsContiguouslyとPageStamp、つまり割り付け機能とスタンプ機能となる。
<WSDAの処理及びユーザインタフェース構成例>
図17は、ユーザにより機種別プリンタドライバ508が選択された場合にWSDA207により提供されるユーザインタフェースの一例を示す図である。この図17の画面は、WSDA207が提供する設定画面の一例であり、描画アプリケーションから印刷要求が行なわれる前に提供される画面である。機種別プリンタドライバ508は、1002に示されるように、JobPreviewというFeatureをサポートしており、これは印刷プレビュー機能を示している。WSDA207は、プリンタドライバ201から取得したPrintCapabilitiesを元にユーザインタフェースを構成するため、1002に基づいて、印刷プレビューの有効無効を切り替えるためのコントロールアイテム1701を表示する。WSDA207は、ユーザの指定に応じて、JobPreviewというFeatureのON、OFFをPrintTicketに格納する。印刷時起動アプリケーション205は、S607の処理でこの情報を参照して、印刷プレビューの起動指示があるか否かを判断する。
図18は、印刷先として標準プリンタドライバ510が選択されたときのWSDA207のユーザインタフェースの一例を示す図である。この図18の画面も、WSDA207が提供する設定画面の一例であり、描画アプリケーションから印刷要求が行なわれる前に提供される画面である。標準プリンタドライバ510は、JobPreviewというFeatureをサポートしていない。このような場合、WSDA207は、拡張機能を有効にするか否かを選択するためのコントロールアイテム1801を表示する。WSDA207は、ユーザがOKボタン1802を押下したタイミングで、コントロール1801に指定された値をPropertyBagに格納する。なお、WSDA207は、拡張機能に加えて、印刷プレビューの起動を指示するよう構成しても良い。この場合、拡張機能と印刷プレビューは、それぞれ異なるコントロールで指定可能であっても、一つのコントロールで同時に指定可能であっても良い。
なお、PEX209についても、WSDA207の上記処理と同等の処理によって、印刷時起動アプリケーション205の起動をコントロールするための手段を提供することができる。
<印刷時起動アプリケーションのUI処理>
S605のUIの表示指定が実行された場合、OSは、印刷時起動アプリケーション205のセットアップ処理が終了した後、印刷時起動アプリケーション205のUI処理を呼び出す。図7は、本印刷システムにおける印刷時起動アプリケーション205のUI処理のうち主要な処理フローを示した図である。本処理フローは、例えば図5のMFPUtility506のような構成下にある印刷時起動アプリケーション205の処理の一例である。以降、印刷時起動アプリケーション205を、各処理の主体として説明することもあるが、実際には、対応するプログラムをCPU111が実行することで、対応する機能が実現されることになる。なお、全ての処理は必ずしも一つのプロセス上で逐次的に実行されるものではなく、一度OS側に処理が移り、再度OSから呼び出されるようなケースもあり得る。あくまで印刷時起動アプリケーション205の主要な処理を、便宜的にわかりやすく示したフローである。なお、S605のUIの表示指定が実行されなかった場合、OSは、図7に示されるUI処理をスキップし、後述の編集及び終了処理を呼び出す。
まず、印刷時起動アプリケーション205は、S603やS606で保存した動作モードをLocal Storageから読み出し(S701)、Faxドライバモードであるか、プリンタドライバモードであるかを判断する(S702)。
動作モードがFaxドライバモードであった場合、印刷時起動アプリケーション205は、Faxドライバ用のユーザインタフェースを構成する(S703)。Faxドライバ用のユーザインタフェースは、送信先とFax番号をユーザが指定可能なコントロールアイテムを有する。Faxドライバ用のユーザインタフェースの詳細は図19を用いて後述する。
印刷時起動アプリケーション205は、ユーザから入力を受け付け(S704)、ユーザインタフェース上でFax送信が指示されると、ユーザの指定した送信先とFax番号をLocal Storageに保存する(S705)。
以上で印刷時起動アプリケーション205のFaxドライバモードの処理は終了である。このように、印刷時起動アプリケーション205は、Faxドライバモードでは、常に送信先とFax番号を指定可能な入力画面としてのユーザインタフェースを表示する(後述の図19参照)。Faxドライバにおいて、送信先とFax番号は、Faxを送信する上で必須の送信先情報である。仮にWSDA207やPEX209でユーザが送信先とFax番号を指定可能なように構成していても、これらのユーザインタフェースは、印刷時に必ず開かれるとは限らない。印刷時起動アプリケーション205で送信先とFax番号を指定可能にすることで、ユーザは、現在のFax送信処理の宛先を確実に入力することができる。また、ユーザの指示があった場合にのみ表示されるWSDA207やPEX209の画面でも、送信先とFax番号を指定可能に構成しても良い。こうすることで、何らかの理由で印刷時起動アプリケーション205が起動しないケースにおいても、送信先とFax番号を指定する手段を提供することができる。なお、WSDA207やPEX209でユーザが送信先とFax番号を指定可能なように構成した場合、印刷時起動アプリケーション205は、所定の場合のみUI表示指示を実行するようにしてもよい。すなわち、印刷時起動アプリケーション205は、PrintTicketに送信先とFax番号が含まれる場合はS605のUI表示指示を実行し、PrintTicketに送信先とFax番号が含まれない場合はS605のUI表示指示を実行しない。こうすることで、ユーザがWSDA207やPEX209で送信先とFax番号を指定し忘れた場合にのみ、印刷時起動アプリケーションが起動するよう構成することができる。
S702の判定で、動作モードがFaxドライバモードではなかった場合、印刷時起動アプリケーション205は、S612で保存した拡張機能を読み込む(S706)。
次に、印刷時起動アプリケーション205は、S608で保存した情報を参照し、印刷プレビューが有効か否かを判断する(S707)。印刷プレビューが有効でない場合、印刷時起動アプリケーション205は、S713のユーザインタフェース構成処理に進む。印刷プレビューが有効である場合、印刷時起動アプリケーション205は、PrintTicketを取得する(S708)。
さらに、印刷時起動アプリケーション205は、そのPrintTicketを元に、PrintCapabilitiesを取得する(S709)。なお、PrintCapabilitiesの取得には時間を要するため、図6のSetup処理で必要な情報をLocal Storageに保存しておき、S709ではそれを利用するように構成しても良い。
次に、印刷時起動アプリケーション205は、取得したPrintCapabilitiesを解析し、特定機能がサポートされているかを探索する。そして、見つかった機能とPrinTicketに指定されている設定値をドライバ機能としてLocal Storageに保存する(S710)。ここでは、一例として、印刷時起動アプリケーション205は、割り付け機能と用紙種類設定の2つを特定機能として探索する。探索処理は、PrintCapabilitiesに、規定の名前を持つFeatureが存在するか否かを判断することで実行される。なお、S612で保存した拡張機能が、ドライバが有していない機能を示していたのに対して、S710で保存するドライバ機能は、ドライバが有している機能である。従って、PrintTicketでこれらドライバ機能が有効化された場合、プリンタドライバ201は、その指定に応じた処理を正しく実行することができる。
次に、印刷時起動アプリケーション205は、OSの所定のAPIを利用してXPS文書を取得する(S711)。さらに、印刷時起動アプリケーション205は、そのXPS文書の内容を解析し、表示部119に表示する(S712)。この時、印刷時起動アプリケーション205は、PrintTicketに設定された設定値を印刷結果に反映することで、より正確な印刷プレビューを実現することができる。
印刷時起動アプリケーション205が受け取るXPS文書は、印刷要求元のアプリケーションが生成したものであって、プリンタドライバ201が処理する前のデータである。従って、例えばXPS文書中のPrintTicketで割り付け印刷が指定されていたとしても、印刷時起動アプリケーション205が受け取るXPS文書には、割り付け処理が施されていない。このようなケースを考慮し、印刷時起動アプリケーション205は、その後のドライバで実施されるのと同等のロジックで印刷設定を反映した印刷イメージを表示部119に表示する。印刷時起動アプリケーション205の表示するユーザインタフェース上で印刷設定が変更された場合、印刷時起動アプリケーション205は、変更を反映した印刷イメージを表示部119に再表示する。なお、標準プリンタドライバ510のように、プリンタベンダが提供していないプリンタドライバにおいては、どのようなロジックで印刷設定がXPS文書に反映されるかわからない。その場合は、印刷時起動アプリケーション205は、指定された機能の反映をスキップするか、独自のロジックで反映した上で、異なる可能性がある旨を合わせて表示部119に表示する。また、印刷時起動アプリケーション205がXPS文書の編集も含めて機能を提供する拡張機能に関しては、印刷時起動アプリケーション205は実際の編集と同じロジックで印刷設定を反映した印刷イメージを表示部119に表示すればよい。
次に、印刷時起動アプリケーション205は、S612で保存した拡張機能、及びS710で保存したドライバ機能を指定可能なコントロールを持つユーザインタフェースを構成する(S713)。S612で保存した拡張機能の選択肢として表示する項目は、図15の“オプション”の情報、つまり印刷時起動アプリケーション205がサポートする項目である。S710で保存したドライバ機能の選択肢として表示する項目は、PrintCapabilitiesの該当機能のOptionの一覧である。例えば、PrintCapabilities1000の情報を元に用紙種類を指定可能にする場合、psk:PageMediaTypeのサポートOption(psk:Plain、ns0000:PhotoPaper等)を全て選択肢として列挙する。なお、PrintCapabilities1000では省略されているが、各FeatureやOptionには、通常DisplayNameという要素が存在する。DisplayNameには、ローカライズ実施済みの適切な名称情報が格納されているので、印刷時起動アプリケーション205は、各ドライバ機能の選択肢として、DisplayNameの名称を表示する。
印刷時起動アプリケーション205は、ユーザから入力を受け付け(S714)、ユーザインタフェース上で印刷が指示されると、ユーザの指定した各機能の設定値をLocal Storageに保存する(S715)。以上で印刷時起動アプリケーション205のプリンタドライバモードの処理は終了である。
なお、S708からS710までの処理は、S707の判定で印刷プレビューが有効でなかった場合にも実行するように構成しても良い。これにより、印刷前に必ず確認が必要な重要な印刷設定について、印刷時起動アプリケーション205で再度確認を促し、必要であれば変更可能な手段をユーザに提供することができる。
図19は、印刷時起動アプリケーション205がFaxドライバモードで動作した場合に表示される入力画面としてのユーザインタフェースの一例を示す図である。表示アイテム1901は、ユーザが送信先を指定するためのコントロールアイテムである。表示アイテム1902は、ユーザがFax番号を入力するためのコントロールアイテムである。表示アイテム1903は、アドレス帳を起動するためのボタンである。このボタンを押下するとアドレス帳が起動され、アドレス帳上で宛先を選択することで、送信先とFax番号が自動入力される。表示アイテム1905はFax送信を開始するためのボタンである。送信先とFax番号が未入力の状態では、ユーザはこのボタンを押下することはできない。表示アイテム1906はキャンセルボタンで、ユーザがこのボタンを押下すると、その後のFax送信処理はキャンセルされる。
本構成により、印刷時起動アプリケーション205は、Faxドライバモードでは、常に送信先とFax番号を指定可能な入力画面としてのユーザインタフェースを表示することが可能となる。Faxドライバにおいて、送信先とFax番号は、Faxを送信する上で必須の情報である。印刷時起動アプリケーション205で送信先とFax番号を指定可能にすることで、ユーザは、現在のFax送信処理の宛先を確実に入力することができる。
図20は、標準プリンタドライバ510動作時に、印刷時起動アプリケーション205がプリンタドライバモードで動作した場合に表示される拡張機能を指定するためのユーザインタフェースの一例である。なお、図20では印刷プレビュー機能は有効にされていないものとする。標準プリンタドライバ510のPrintCapabilities1200では、割り付け印刷機能もスタンプ機能もサポートされていない。従って、印刷時起動アプリケーション205は、S611及びS612の処理で、拡張機能として、割り付け印刷機能、及びスタンプ機能の2つを保存する。その結果、これら2つの機能が拡張機能として提供される。表示アイテム2001は、割り付け印刷機能の設定を指定するためのコントロールアイテムである。表示アイテム2002は、スタンプ機能の設定を指定するためのコントロールアイテムである。表示アイテム2003は印刷を開始するためのボタンである。表示アイテム2004はキャンセルボタンで、ユーザがこのボタンを押下すると、その後の印刷処理はキャンセルされる。なお、動作ドライバが共通プリンタドライバ509であった場合は、拡張機能として、スタンプ機能のみが表示される。これは共通プリンタドライバ509のPrintCapabilities1100において、割り付け機能はサポートされているためである。
本構成により、標準プリンタドライバ510のように、OSと同様にMicrosoft(登録商標)によって提供されプリンタベンダが機能拡張できないドライバにおいて、印刷時起動アプリケーション205を利用することで、印刷機能の拡張を実現できる。また、動作するドライバの能力を示す情報を判断し、不足している機能のみが拡張機能として提供される。これにより、利用可能なプリンタドライバ201が複数種類存在するようなケースにおいて、それぞれのプリンタドライバ201に最適な拡張機能を提供することができる。また、印刷時にユーザインタフェースを表示して機能拡張するか否かはユーザがコントロールすることができる。これにより、都度ユーザインタフェースが表示されることが好ましくないユースケースにも対応することができる。
図21は、機種別プリンタドライバ508動作時に、印刷時起動アプリケーション205がプリンタドライバモードで動作した場合のユーザインタフェースの一例である。なお、印刷プレビュー機能は有効にされているものとする。表示アイテム2101は、印刷プレビュー上で表示するページを変更するためのコントロールアイテムである。ユーザは、このコントールアイテムを利用して表示ページを変更できるし、また、現在の印刷データと印刷設定で発生する印刷の総ページ数を確認することもできる。表示アイテム2102は、指定されているページの印刷結果のイメージを示す印刷プレビュー画面である。表示アイテム2103は、割り付け印刷機能を指定するためのコントロールアイテムである。表示アイテム2104は、用紙種類を指定するためのコントロールアイテムである。表示アイテム2013、2014で表示されているのは拡張機能ではなくドライバ機能なので、前述の通り、選択項目はプリンタドライバ201の機能に準ずる。表示アイテム2105は印刷を開始するためのボタンである。表示アイテム2106はキャンセルボタンで、ユーザがこのボタンを押下すると、その後の印刷処理はキャンセルされる。なお、図21では、ドライバ機能のみが表示されているが、図6と図7の処理の結果、ドライバ機能と拡張機能が共に有効化された場合、印刷時起動アプリケーション205は、その全ての機能について指定可能なコントロールを表示する。
本構成により、描画アプリケーションの生成したXPS文書とユーザにより指定された印刷設定を元に、印刷結果に近い印刷イメージを印刷前に表示する印刷プレビュー機能を実現できる。また、印刷結果や印刷ページ数を確認しながら、印刷設定を最終調整するための変更も可能となる。これらの機能により、ミスプリントを防ぐと共に、所望のページ数に印刷を収める等の最終調整手段を提供することが可能となる。
<印刷時起動アプリケーションの編集及び終了処理>
図7の印刷時起動アプリケーション205のUI処理が終了した後、OSは、図8の印刷時起動アプリケーション205の編集及び終了処理を呼び出す。なお、S605のUIの表示指定処理が実行されなかった場合は、OSは、図7の印刷時起動アプリケーション205のUI処理を呼び出すことなく、本処理を呼び出す。本処理フローは、例えば図5のMFPUtility506のような構成下にある印刷時起動アプリケーション205の処理の一例である。以降、印刷時起動アプリケーション205を、各処理の主体として説明することもあるが、実際には、対応するプログラムをCPU111が実行することで、対応する機能が実現されることになる。また、全ての処理は必ずしも一つのプロセス上で逐次的に実行されるものではなく、一度OS側に処理が移り、再度OSから呼び出されるようなケースもあり得る。あくまで印刷時起動アプリケーション205の主要な処理を、便宜的にわかりやすく示したフローである。
印刷時起動アプリケーション205は、Local StorageよりS603及びS606で保存した動作モード、及びS604で保存されたUI表示情報を読み込む(S801)。S802でUI表示がなかったと判断した場合、印刷時起動アプリケーション205は、OSのAPIを利用してXPS文書を取得し(S806)、そのまま何も改変することなく、XPS文書を出力する(S807)。このように、印刷時起動アプリケーション205は、XPS文書を変更しない場合も、XPS文書を一度全て取得し、出力する必要がある。ユーザインタフェースを表示しなかった場合の印刷時起動アプリケーション205の処理は、以上で終了である。このように、印刷時起動アプリケーション205は、ユーザインタフェースの表示が不要と判断した場合は、ユーザインタフェースを表示することなく処理を終了する。
S802でUI表示があったと判断した場合、印刷時起動アプリケーション205は、S801で読み込んだ情報を元に、動作モードがFaxドライバモードであったか否かを判断する(S808)。Faxドライバモードであると判断した場合、印刷時起動アプリケーション205は、S705で保存された送信先とFax番号をLocal Storageから取得する(S803)。次に、印刷時起動アプリケーション205は、OSのAPIを利用してPrintTicketを取得する(S804)。さらに、印刷時起動アプリケーション205は、S803で取得した送信先とFax番号をPrintTicketに格納する(S805)。
これらの情報を格納したPrintTicketの一例を図14に示す。ここでは、送信先はJobRecipientNameとして、Fax番号はJobFaxNumberとして格納されている。PrintTicketを編集後、印刷時起動アプリケーション205は、必要に応じてそのPrintTicketをXPS文書に格納した上で、XPS文書を出力し、処理を終了する。Faxドライバ511は、PrintTicketを参照して送信先とFax番号を取得し、指定されたFax番号にFax送信するためのジョブを印刷装置102に送信する。
S808で、動作モードがFaxドライバモードではないと判定した場合、印刷時起動アプリケーション205は、S710で提供する機能が決定される。そして、2104等でユーザに指定されたドライバ機能の設定値をLocal Storageから読み込む(S809)。次に、印刷時起動アプリケーション205は、ドライバ機能の設定値が初期状態から変更されたか否かを判断する(S810)。
S810でドライバ機能の設定値の変更が無いと判断した場合、印刷時起動アプリケーション205は、S813の処理に進む。S810でドライバ機能の設定値が変更されたと判断した場合、印刷時起動アプリケーション205は、PrintTicketを取得し(S811)、S809で取得したドライバ機能の設定値をPrintTicketに反映する(S812)。これらの処理を実現するための、Local Storageに格納する情報の構成や、PrintTicketへの反映方法については後述する。設定値が変更されたドライバ機能が複数存在する場合は、印刷時起動アプリケーション205は、全てのドライバ機能についてPrintTicketへの反映処理を行う。PrintTicketへの反映後、印刷時起動アプリケーション205は、XPS文書を取得する(S813)。
次に、印刷時起動アプリケーション205は、S612で提供機能が決定され、2002等からユーザにより指定された拡張機能の設定値をLocal Storageから読み込む(S814)。次に、印刷時起動アプリケーション205は、拡張機能の設定値が指定されたか否かを判断する(S815)。S815で拡張機能の設定値が指定されていない判断した場合、印刷時起動アプリケーション205は、XPS文書を出力し(S807)、処理を終了する。
S815で拡張機能の設定値が指定されたと判断した場合、印刷時起動アプリケーション205は、ユーザの指定した拡張機能とその設定値に従い、XPS文書内の描画データを編集する。例えば、2ページを1ページに割り付ける割り付け印刷機能が指定されていた場合を説明する。この場合、印刷時起動アプリケーション205は、XPS文書内の描画データにおけるページの概念であるFixedPageを2ページ分取得し、1ページのFixedPage上に縮小配置する。その上で、印刷時起動アプリケーション205は、元の2ページ分のFixedPageを描画データ内から削除し、新たに作成したFixedPageを描画データに追加する。このような処理を全てのページに対して繰り返し実行する。指定された拡張機能が複数存在する場合は、それらの指定全てを反映した描画データを生成する。最後に、印刷時起動アプリケーション205は、編集した描画データを含むXPS文書を出力し、処理を終了する。
以上のように、本構成における印刷時起動アプリケーション205は、プリンタドライバ201がサポートするドライバ機能の設定値が変更された場合は、その変更をPrintTicketに反映する。そして、XPS文書内の描画データの編集処理は、プリンタドライバ201に任せる。これにより、印刷時起動アプリケーション205は不要なXPS文書の編集処理を実施する必要が無く、高速な処理が可能である。加えて、プリンタドライバ201の機能を利用するため、WSDA207等から機能が指定された場合と、印刷時起動アプリケーション205から機能が指定された場合とで、完全に同一の結果を得ることができる。
一方、本構成における印刷時起動アプリケーション205は、プリンタドライバ201がサポートしない拡張機能については、印刷時起動アプリケーション205自身が、XPS文書内の描画データの編集を実行する。これにより、プリンタドライバ201がサポートしない機能をユーザに提供することができる。
図16は、Local Storageに格納される情報の一例を示した図である。格納情報は名称と値で構成される。この例では、印刷時起動アプリケーション205はプリンタドライバモードで動作し、拡張機能としてスタンプ機能を、ドライバ機能として割り付け印刷機能を、それぞれ提供したことを示している。S612の処理では、LocalStorageには、拡張機能_PageStampという名称で、値が空の情報が追加される。
印刷時起動アプリケーション205のユーザインタフェース上でスタンプ機能が指定された場合、S715の処理によって、指定された値が拡張機能_PageStampの値として格納される。ここでは、ユーザによって “Confidential”という設定値に変更されている。ドライバ機能である割り付け印刷機能は、S710の処理によって、ドライバ機能_JobNUpAllDocumentsContiguouslyという名称で、値がPrintTicketに設定されている初期値の情報が追加される。印刷時起動アプリケーション205のユーザインタフェース上で割り付け印刷機能の指定値が変更された場合、S715の処理によって、変更された値が格納される。ここでは、ユーザによって “ns0000:PagesPerSheet_2”という設定値に変更されている。この名称は、プリンタドライバ201のPrintCapabilitiesに定義されているOption名である。以上ように、拡張機能かドライバ機能かは、Local Storageに格納されている情報の接頭辞によって判断することができる。
S810の処理では、印刷時起動アプリケーション205は、Local Storageに“ドライバ機能_”という接頭辞で始まるドライバ機能が存在するかを判定する。S812の処理では、印刷時起動アプリケーション205は、Local Storageに値として格納されたOption名を、そのままPrintTicketのOption名として反映する。S815の処理では、印刷時起動アプリケーション205は、Local Storageに“拡張機能_”という接頭辞で始まる拡張機能が存在するかを判定する。
以上のように、本実施形態では、ユーザの印刷指示後(つまり描画アプリケーションからXPS文書が出力された後)、印刷装置102による印刷動作の前に、印刷時起動アプリケーション205のユーザインタフェースを表示するよう構成することができる。さらに、印刷時起動アプリケーション205が、プリンタドライバ201の種類に関わらず、印刷装置102に対して一意に割り当てられるようなケースにおいて、プリンタドライバ201の種類に応じた最適な機能拡張を実現することができる。Faxドライバが接続されている場合、Fax送信に必須である送信先とFax番号を入力するための入力画面としてのユーザインタフェースを表示する。
プリンタドライバが接続されている場合は、ユーザの指定に応じて、印刷結果を事前に表示部119上で確認するための印刷プレビュー機能を実現することができる。さらに、接続されているプリンタドライバ201の能力を示す情報を基に機能を判定し、不足している機能を拡張機能として提供することができる。これによって、接続されたドライバが、OSと共にMicrosoft(登録商標)の提供する標準プリンタドライバであり、プリンタベンダが機能拡張できないようなケースでも、印刷時起動アプリケーション205を利用することで、プリンタベンダが独自の機能を拡張することができる。
なお、本実施形態では、Faxドライバモード、プリンタドライバモードの印刷プレビュー、及び機能拡張を1つのGUIアプリケーションである印刷時起動アプリケーション205で実現している。しかしながら、これら3つの機能は必ずしも組み合わせて実施する必要があるものではなく、3つの機能のうち1つ乃至は2つを有するよう印刷時起動アプリケーション205を構成することが可能であることは言うまでもない。
<実施形態2>
上述した実施形態は、以下の処理を実行することによっても実行される。すなわち、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システムあるいは装置に供給する。そして、そのシステムあるいは装置のコンピュータ(またはCPUまたはMPU)が記録媒体に格納されたプログラムコードを読み出し実行する。これによって、上述した目的を達成することができる。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することとなり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD-ROM、CD-R、磁気テープ、不揮発性のメモリカード、ROM、DVDなどを用いることができる。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施例の機能が実現されるだけでない。そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOSなどが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれる。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれてもよい。そして、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行ってもよい。その処理によって前述した実施形態の機能が実現される。