(57)【特許請求の範囲】
【請求項１】
外部プログラムとの間で印刷設定情報の授受を行うためのデータ構造体を介して印刷設定を行うことができるプリンタドライバにおいて、
コンピュータを、
前記データ構造体に、印刷設定情報および印刷設定値適正化プログラムを格納する格納手段と、
前記データ構造体に格納された印刷設定値適正化プログラムを利用して、前記データ構造体に格納された設定値情報を適正化する設定値適性化手段として機能させる
ことを特徴とするプリンタドライバ。
【請求項２】
前記設定値適性化プログラムは、スクリプト言語によるものであることを特徴とする請求項１に記載のプリンタドライバ。
【請求項３】
前記データ構造体に格納される印刷設定情報は、設定名と設定値の組からなる文字列で構成された形式を基とすることを特徴とする請求項１または請求項２に記載のプリンタドライバ。
【請求項４】
前記データ構造体に格納される設定値適性化プログラムは、バイトコード化されたスクリプトであることを特徴とする請求項２に記載のプリンタドライバ。
【請求項５】
前記データ構造体に格納される設定値適性化プログラムは、圧縮されていることを特徴とする請求項１から請求項４のいずれか１項に記載のプリンタドライバ。
【請求項６】
前記データ構造体に格納される印刷設定情報は、圧縮されていることを特徴とする請求項１から請求項５のいずれか１項に記載のプリンタドライバ。
【請求項７】
前記格納手段は、前記データ構造体に格納された印刷設定値適正化プログラムに対し、当該プリンタドライバが具備する印刷設定値適正化プログラムに変更がある場合に、当該変更分を前記データ構造体に格納された印刷設定値適正化プログラムに反映させることを特徴とする請求項１から請求項６のいずれか１項に記載のプリンタドライバ。
【請求項８】
外部プログラムとの間で印刷設定情報の授受を行うためのデータ構造体を介して印刷設定を行うことができるプリンタドライバを実装する情報処理装置において、
前記データ構造体に、印刷設定情報および印刷設定値適正化プログラムを格納する格納手段と、
前記データ構造体に格納された印刷設定値適正化プログラムを利用して、前記データ構造体に格納された設定値情報を適正化する設定値適性化手段と、
を備えることを特徴とする情報処理装置。
【請求項９】
前記設定値適性化プログラムは、スクリプト言語によるものであることを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記データ構造体に格納される印刷設定情報は、設定名と設定値の組からなる文字列で構成された形式を基とすることを特徴とする請求項８または請求項９に記載の情報処理装置。
【請求項１１】
前記データ構造体に格納される設定値適性化プログラムは、バイトコード化されたスクリプトであることを特徴とする請求項９に記載の情報処理装置。
【請求項１２】
前記データ構造体に格納される設定値適性化プログラムは、圧縮されていることを特徴とする請求項８から請求項１１のいずれか１項に記載の情報処理装置。
【請求項１３】
前記データ構造体に格納される印刷設定情報は、圧縮されていることを特徴とする請求項８から請求項１２のいずれか１項に記載の情報処理装置。
【請求項１４】
前記格納手段は、前記データ構造体に格納された印刷設定値適正化プログラムに対し、当該プリンタドライバが具備する印刷設定値適正化プログラムに変更がある場合に、当該変更分を前記データ構造体に格納された印刷設定値適正化プログラムに反映させることを特徴とする請求項８から請求項１３のいずれか１項に記載の情報処理装置。
【請求項１５】
請求項１から請求項７のいずれか１項に記載のプリンタドライバを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンタドライバ、情報処理装置、およびプリンタドライバを記録したコンピュータ読み取り可能な記録媒体に関する。
【背景技術】
【０００２】
プリンタドライバは、アプリケーションからの指示を受けて印刷を実行する。その際、アプリケーションからの印刷指示は、例えば、ＭＳ  Ｗｉｎｄｏｗｓ（登録商標）環境では、ＤＥＶＭＯＤＥ構造体と呼ばれるデータ構造体を利用することで、プリンタドライバへ伝達される。このＤＥＶＭＯＤＥ構造体には、プリンタドライバが備える印刷機能を余すことなくその設定情報を保持することができる。
【０００３】
ところで、プリンタは、バージョンアップやオプションの追加によって機能が拡張される場合がある。例えば、プリンタ本体にフィニッシャーなどを取り付けたり、取り外したりすると利用できる機能が増減する。このような機能の増減があると、プリンタドライバが保持しなければならない設定値等の情報も変化する。
【０００４】
このような状況に対して、印刷装置の機能拡張に依らずに印刷装置が処理可能なデータを生成することができるようにした技術が提案されている。例えば、特許文献１に開示された技術では、まず、印刷設定を格納するためのデータ構造体（例えば、ＤＥＶＭＯＤＥ構造体）に、印刷装置の機能に関する機能設定情報に基づき設定される印刷設定値を割り当てるための領域を確保して、この領域に印刷設定値を割り当てている。そして、上記機能設定情報を参照することによってデータ構造体に割り当てられた印刷設定値から印刷装置が処理可能なデータを生成している。特許文献１の技術では、このような構成をとることにより、印刷装置の機能拡張に依らずに印刷装置が処理可能なデータを生成することができるようにしている。
【０００５】
このように、従来のプリンタドライバでは、上記特許文献１でもそうであるが、設定値はＤＥＶＭＯＤＥ構造体のようなデータ構造体という形式で保存するのが一般的である。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、ＤＥＶＭＯＤＥ構造体は、プログラム上でデータを格納する形式であり、コーディング時にそのデータ構造が静的に決定するものである。よって、プリンタドライバに機能が拡張されるようなバージョンアップが行われその機能が増減すると、特に機能が増えたときには、増えた機能をアプリケーションから利用できるように、このデータ構造体を更新（再設計）しなければならない。つまり再度コーディングおよびコンパイルをして印刷設定を格納するデータ構造体を拡張しなければならない。
【０００７】
他方、ＤＥＶＭＯＤＥ構造体には複数の機能の設定情報（各設定情報は基本的には独立している）を値として保持することができるものであるが、ある機能が有効な場合、排他的に別の機能は無効にしなければならない、等の機能間の排他制御が必要になる場合がある。プリンタドライバのバージョンアップ等により機能拡張を行うと、この排他制御の数も、同時に増えることが知られている。そのため、設定値を保存するＤＥＶＭＯＤＥ構造体の拡張と同時に、ＤＥＶＭＯＤＥ構造体に格納されている設定値の排他制御を行う処理も同時に拡張しなければならない。
【０００８】
しかし、プリンタドライバには、アプリケーションからバージョンアップ前（機能拡張前）の古いＤＥＶＭＯＤＥ構造体を受け取り、印刷指示を受けることがある。これはアプリケーション自身がＤＥＶＭＯＤＥ構造体を保持することができることに起因する（例えば、アプリケーションによって作成されたファイル中にＤＥＶＭＯＤＥ構造体が保持され、ファイルを開いたときに保持されているＤＥＶＭＯＤＥ構造体が利用される場合がある）。
【０００９】
その場合、プリンタドライバは古い形式のＤＥＶＭＯＤＥ構造体を受け取り、その受け取ったＤＥＶＭＯＤＥ構造体に対して、適切な排他制御や設定値の妥当性検証を行うＶａｌｉｄａｔｉｏｎ処理を実施しなければならない。ところが、従来の方法では、古いＤＥＶＭＯＤＥ構造体と新しいＶａｌｉｄａｔｉｏｎ処理の間で不整合が生じて、正確な排他制御ができなくなるという問題があった。
【００１０】
本発明は、上記に鑑みてなされたものであって、プリンタドライバのバージョンアップ等により機能の変更があっても、印刷に係る諸設定値（印刷設定情報）が設定されるデータ構造体と、印刷設定情報を適正化するための印刷設定値適正化プログラムとの間に生じる不整合を解消して、適切な印刷設定値適正化処理を実施できるようにした、プリンタドライバ、情報処理装置、およびプリンタドライバを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するために、本発明は、外部プログラムとの間で印刷設定情報の授受を行うためのデータ構造体を介して印刷設定を行うことができるプリンタドライバにおいて、コンピュータを、前記データ構造体に、印刷設定情報および印刷設定値適正化プログラムを格納する格納手段と、前記データ構造体に格納された印刷設定値適正化プログラムを利用して、前記データ構造体に格納された設定値情報を適正化する設定値適性化手段として機能させることを特徴とする。
【００１２】
また、本発明は、外部プログラムとの間で印刷設定情報の授受を行うためのデータ構造体を介して印刷設定を行うことができるプリンタドライバを実装する情報処理装置において、前記データ構造体に、印刷設定情報および印刷設定値適正化プログラムを格納する格納手段と、前記データ構造体に格納された印刷設定値適正化プログラムを利用して、前記データ構造体に格納された設定値情報を適正化する設定値適性化手段と、を備えることを特徴とする。
【００１３】
また、本発明は、上記プリンタドライバを記録したコンピュータ読み取り可能な記録媒体である。
【発明の効果】
【００１４】
本発明によれば、プリンタドライバの機能が拡張（変更）されても、印刷に係る諸設定値が設定されるデータ構造体と、諸設定値を適正化するための印刷設定値適正化処理を行うプログラムとの間に生じる不整合を解消することができる。その結果、適切な印刷設定値適正化処理を実施することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本発明の一実施の形態にかかるプリンタシステムの全体構成図を示した図である。
【図２】図２は、同実施形態におけるＰＣの構成を示すブロック図である。
【図３】図３は、ＤＥＶＭＯＤＥ構造体について説明する図である。
【図４】図４は、アプリケーションとプリンタドライバ間で行われるＤＥＶＭＯＤＥ構造体のハンドリングについて説明する図である。
【図５】図５は、レイアウト情報の一例を示した図である。
【図６】図６は、図５のレイアウト情報および図８の機能情報に基づいた印刷設定画面の例を示した図である。
【図７】図７は、保存先情報の一例を示した図である。
【図８】図８は、機能情報の一例を示した図である。
【図９】図９は、アプリケーションとプリンタドライバ間におけるＤＥＶＭＯＤＥ構造体を用いた印刷設定に係る処理の概要を示すフローチャートである。
【図１０】図１０は、入力ＤＥＶＭＯＤＥ処理の詳細を説明するためのフローチャートである。
【図１１】図１１は、出力ＤＥＶＭＯＤＥ処理の詳細を説明するためのフローチャートである。
【図１２】図１２は、入力ＤＥＶＭＯＤＥのプログラム領域に格納されたＶａｌｉｄａｔｉｏｎ用プログラム（スクリプト）の一例を示す図である。
【図１３】図１３は、図１２に示した入力ＤＥＶＭＯＤＥのプログラム領域に格納されたＶａｌｉｄａｔｉｏｎ用プログラム（スクリプト）に対し、バージョンアップ等により新たなスクリプトが追加され出力ＤＥＶＭＯＤＥのプログラム領域に格納されたＶａｌｉｄａｔｉｏｎ用プログラムの一例を示す図である。
【図１４】図１４は、Ｖａｌｉｄａｔｉｏｎ処理に係わる各プログラム間の処理の流れについて、その概要を説明するための概略図である。
【発明を実施するための形態】
【００１６】
以下に添付図面を参照して、この発明にかかるプリンタシステムの一実施の形態を詳細に説明する。なお、共通する構成要素には共通の符号を附している。
【００１７】
（プリンタシステムの全体構成）
図１は、本発明の一実施の形態にかかるプリンタシステムの全体構成図を示した図である。図１に示すように、本実施の形態ではＰＣ１００とプリンタ１５０とがネットワーク１６０を介して接続されているものとする。そして、ＰＣ１００からの印刷要求に応じて、プリンタ１５０が印刷処理を行う。
【００１８】
（ＰＣ１００の構成）
図２は、ＰＣ１００の構成を示すブロック図である。図２に示すように、ＰＣ１００は、処理部１０１と、記憶部１０２と、通信部１０３とを備えている。処理部１０１は、図示しない制御手段としてのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＲＯＭおよびメインメモリとなるＲＡＭを有するメモリ群とを含んで構成されている。ＰＣ１００の起動・実行時には、ＲＯＭおよび記憶部１０２からアプリケーション１０４と、ＯＳ１０５と、各種ドライバ（図２においては、プリンタドライバ１０６のみ記載）が、メインメモリ上にロードされ展開されて、これらがＣＰＵにより実行される。なお、ＰＣ１００は、キーボードやマウスなどの入力装置やディスプレイなどの出力装置等を備える通常のコンピュータを利用したハードウェア構成を有するが、図２においては説明の簡単のため省略している。
【００１９】
図２に示すプリンタドライバ１０６内の機能ブロックは、プリンタ１５０の制御を実現するための主要部となる機能又は手段である。特に、コアドライバ１１１は、プリンタドライバ１０６の核となる部分であり、プリンタドライバとしての基本的な機能を有する。これに対し、各プラグイン（図２では、プラグインＡ・１１３およびプラグインＢ・１１４のみ例示）は、コアドライバ１１１のみからなるプリンタドライバ１０６に対してその機能を拡張するためのプログラムであり、コアドライバ１１１と組み合わさって（機能拡張された）プリンタドライバ１０６を構成する。
【００２０】
通信部１０３は、図１に示したネットワーク１６０を介して接続されたプリンタ１５０と情報の送受信を行う。
【００２１】
アプリケーション１０４は、ユーザが印刷指示をすることができるソフトウェアとする。ユーザはアプリケーション１０４で編集したデータを印刷したい場合、アプリケーション１０４が、ユーザによる印刷指示を受け付ける。この場合、アプリケーション１０４は、単体でプリンタ１５０に対する印刷データの生成を行わず、上記印刷指示に応じた印刷要求と共に、印刷対象の情報をＯＳ１０５に渡す。
【００２２】
ＯＳ１０５は、ＰＣ１００のハードウェアとソフトウェアとを管理するプログラムである。ＯＳ１０５は、プログラムの起動、情報の読み込みや保存の制御等を行う。ＯＳのうち代表的なものとしては、ＭＳ  Ｗｉｎｄｏｗｓ（登録商標）等が知られている。また、ＯＳ１０５は、アプリケーション１０４から渡された印刷要求と共に、印刷対象の情報（ドキュメントデータ、画像データ等）を、プリンタドライバ１０６に渡す。
【００２３】
記憶部１０２は、様々な情報を記憶する記憶手段である。具体的にはＨＤＤ等である。記憶される情報には、コアドライバ１１１や各プラグインが有する所定の機能を実現するための処理に関する情報（処理に用いる設定値や、設定値の変更をするための表示情報など、処理に必要なあらゆる情報）を定義した設定情報がある。この設定情報の例としては、レイアウト情報、保存先情報、機能情報、及びプラグイン情報等が挙げられる（下記）。
【００２４】
その他、ＯＳ１０５により提供されるＤＥＶＭＯＤＥ構造体やレジストリ等や、初期の標準機能についてＶａｌｉｄａｔｉｏｎ処理を行うためのＶａｌｉｄａｔｉｏｎプログラムや、プリンタドライバ１０６のバージョンアップに伴い追加されるバージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムや、プラグインの追加に伴い追加される追加機能用Ｖａｌｉｄａｔｉｏｎプログラムも記憶部１０２に記憶される。なお、本明細書において、上記各Ｖａｌｉｄａｔｉｏｎプログラムを、Ｖａｌｉｄａｔｉｏｎ用プログラム（印刷設定値適正化プログラム）と総称する。
【００２５】
レイアウト情報は、設定画面に表示されるＧＵＩコンポーネントのレイアウトが記述された情報である。保存先情報は、各設定値の保存場所についての情報が記述された情報である。機能情報は、接続されたプリンタの機能（仕様）に関する情報等が記述された情報である。プラグイン情報は、追加されたプラグインに関して記述された情報である。
【００２６】
プリンタドライバ１０６は、このドライバが有する機能を果たすためのモジュール群として、コアドライバ１１１と、インターフェース部１１２と、プラグインとして、プラグインＡ・１１３と、プラグインＢ・１１４とを備えている。もちろん、図２の例は一例であって、プラグインは任意に追加および削除することができる。
【００２７】
コアドライバ１１１は、プリンタドライバ１０６としての標準機能を有する。また、コアドライバ１１１は、プリンタドライバ１０６としての機能を果たすためのモジュール群として、ＵＩの制御を行う印刷設定部１２０、描画の制御を行う描画部１３０、およびＶａｌｉｄａｔｉｏｎ用の各プログラム（スクリプト）を実行するインタプリタであるＶａｌｉｄａｔｉｏｎプログラム実行環境１４０を備える。なお、印刷設定部１２０及び描画部１３０は、インストールされたプラグインを確認する際に、上記プラグイン情報を参照する。これにより、コアドライバ１１１は、インストールされているプラグインを確認できる。
【００２８】
また、コアドライバ１１１に含まれる上記モジュール群は、標準的な印刷処理のみならず、インストールされたプラグインに含まれるモジュールではできない部分的な処理を、上述した設定情報（レイアウト情報、保存先情報、機能情報、プラグイン情報）に従って代行する。そして、記憶部１０２に記憶される設定情報が、プラグインのインストーラにより書き込まれ、コアドライバ１１１の印刷設定部１２０及び描画部１３０が、書き込まれた設定情報を参照することで、代行することを可能としている。なお、レイアウト情報、保存先情報、プラグイン情報については、各プラグインについての各情報がコアドライバ１１１のレイアウト情報、保存先情報、プラグイン情報に追記され、機能情報については、コアドライバ１１１および各プラグイン用の機能情報が、独立したファイルとして記憶部１０２に記憶される。
【００２９】
印刷設定部１２０は、設定画面表示部１２１、振分部１２２、文字列化部１２３、圧縮部１２４、圧縮データ保存部１２５、圧縮データ取得部１２６、および解凍部１２７を有している。
【００３０】
設定画面表示部１２１は、ＵＩとしてモニタ画面に表示するＧＵＩ（印刷設定画面）の表示制御をする。本実施形態にかかる設定画面表示部１２１は、記憶部１０２に記憶されたレイアウト情報および機能情報に基づいて印刷設定画面を表示する。また、印刷設定画面の表示時には、Ｖａｌｉｄａｔｉｏｎプログラム実行環境１４０にて実行されるＶａｌｉｄａｔｉｏｎ用プログラムによる処理結果を受け、禁則に従った使用可能な機能、および設定可能な設定（設定範囲、設定値）についてのみＧＵＩコンポーネントの表示を行う。
【００３１】
なお、Ｖａｌｉｄａｔｉｏｎ用プログラムは、前述のように印刷処理に用いられる諸設定値の妥当性や各設定間の禁則などを検証し管理するためのプログラムである。本実施形態では、例えばＬＵＡ（ルア）形式のスクリプトからなるＶａｌｉｄａｔｉｏｎ用プログラムを、そのインタプリタであるＶａｌｉｄａｔｉｏｎプログラム実行環境（設定値適性化手段）１４０が実行することによって、ＤＥＶＭＯＤＥ構造体に設定された設定値や、その各設定間の禁則等を管理するようにしている。本実施形態では、ＶａｌｉｄａｔｉｏｎプログラムとしてＬＵＡスクリプトを利用することで、プログラムのコンパイルを不要としている。また、このスクリプトをバイトコード化した場合は、処理を高速化することができる。なお、本実施形態において特徴的なＤＥＶＭＯＤＥ構造体の構成の詳細は後述する。
【００３２】
振分部１２２は、保存先情報を参照し、各設定値を保存先情報で指定された保存先毎に振分ける処理を行う。
【００３３】
文字列化部１２３は、振分部１２２によって振分けられた設定値を、保存先毎に、各設定値を設定名と設定値の組みからなる可変長の文字列とする文字列化を行う。例えば、｛“Ｄｕｐｌｅｘ”：“ｏｎ”，“Ｏｒｉｅｎｔａｔｉｏｎ”：“ｐｏｒｔｒａｉｔ”，…｝といった文字列を生成する。この文字列においては、設定名が各設定値を識別するための識別子あるいは設定値のアドレスとして機能するものとなる。このように設定情報を文字列化することにより、設定値の増減に柔軟に対応することができる。
【００３４】
圧縮部１２４は、文字列化部１２３によって生成された保存先毎の各文字列に対しＺｉｐ圧縮等の圧縮処理を施し、保存先毎の圧縮データを生成する。この圧縮処理によってデータサイズを削減することにより、設定値が増加したとしても、固定サイズのデータ構造体であるＤＥＶＭＯＤＥ構造体に格納する圧縮データの増加量を抑えることができる。なお、ここで用いる圧縮方式は任意である。また、この圧縮部１２４は、Ｖａｌｉｄａｔｉｏｎ用プログラムの圧縮も行う。
【００３５】
圧縮データ保存部（格納手段）１２５は、圧縮部１２４により生成された各圧縮データをそれぞれの保存先（レジストリまたはＤＥＶＭＯＤＥ構造体の設定値保存領域）に保存し、圧縮されたＶａｌｉｄａｔｉｏｎ用プログラムはＤＥＶＭＯＤＥ構造体のプログラム領域に格納し保存する。なお、ＤＥＶＭＯＤＥ構造体は、図３に示すように、ＯＳ１０５によって用途が定められた固定領域となるＰｕｂｌｉｃ領域と、ドライバ作成者側が自由に情報を管理できる自由領域となるＰｒｉｖａｔｅ領域とからなっている。本実施形態では、ＤＥＶＭＯＤＥ構造体に格納する圧縮データは、ＤＥＶＭＯＤＥ構造体のＰｒｉｖａｔｅ領域に保存するものとする（詳細は後述）。
【００３６】
圧縮データ取得部１２６は、レジストリおよびＤＥＶＭＯＤＥ構造体から保存されている圧縮データを読み取る。
【００３７】
解凍部１２７は、圧縮データ取得部１２６によりレジストリおよびＤＥＶＭＯＤＥ構造体から取得された圧縮データを解凍し、内部メモリに展開する。
【００３８】
一方、描画部１３０は、圧縮データ取得部１３１、解凍部１３２および印刷データ生成部１３３を有している。
【００３９】
圧縮データ取得部１３１は、レジストリおよびＤＥＶＭＯＤＥ構造体から保存されている圧縮データを読み取る。
【００４０】
解凍部１３２は、圧縮データ取得部１３１により、レジストリおよびＤＥＶＭＯＤＥ構造体から取得された圧縮データを解凍し、内部メモリに展開する。
【００４１】
印刷データ生成部１３３は、解凍後の印刷設定（現在値）について、Ｖａｌｉｄａｔｉｏｎプログラム実行環境１４０にて実行される解凍後のＶａｌｉｄａｔｉｏｎ用プログラムによる処理結果を受け、この設定値が禁則に従っているかどうか、および印刷設定の妥当性の確認を行い、妥当性が確認された印刷設定と、アプリケーション１０４から印刷を要求された描画データとからプリンタ１５０が解釈可能な印刷データを生成する。そして生成された印刷データを、通信部１０３を介して、プリンタ１５０に送信する。
【００４２】
インターフェース（Ｉ／Ｆ）部１１２は、プラグインの追加を受け付けるインターフェースである。プリンタドライバ１０６にプラグインが追加された場合、コアドライバ１１１は、当該インターフェース部１１２を介して、追加されたプラグインの各モジュールを呼び出すことができる。また、追加されたプラグインも、当該インターフェース部１１２を介して、コアドライバ１１１の各モジュールを呼び出すことが可能となる。
【００４３】
図中破線で囲まれたプラグインＡ・１１３及びプラグインＢ・１１４は、コアドライバ１１１に機能を追加するダイナミック・リンク・ライブラリとして構成されたプラグインとする。これらのプラグインは、所定の機能を実現するために、一つ以上のモジュールで構成されている。同図に示すプラグインは、印刷設定部及び描画部を備えたものとなっているが、一般的にはその構成は任意である。
【００４４】
そして、各プラグインの印刷設定部は、インターフェース部１１２を介して行われたコアドライバ１１１の印刷設定部１２０からの表示命令に従って、各プラグインが有する機能についての設定画面を表示する。一方、各プラグインの描画部は、インターフェース部１１２を介して行われたコアドライバ１１１の描画部１３０からの描画命令に従って、プラグインが有する機能を用いてなされる描画機能を実行する。
【００４５】
つまり、コアドライバ１１１の印刷設定部１２０の拡張部分がプラグインの印刷設定部となる。そして、コアドライバ１１１の描画部１３０の拡張部分がプラグインの描画部となる。
【００４６】
また、追加するプラグインによっては、コアドライバ１１１のモジュール（印刷設定部１２０、描画部１３０）の機能を利用することで、すなわち、コアドライバ１１１が機能代行することで、プラグインに全てのモジュールを作成する必要がなくなった。これにより、プラグインの開発負担を軽減できる。
【００４７】
プラグインに必要な機能の一部をコアドライバ１１１のモジュールに代行させるために、コアドライバ１１１の各モジュールが参照する外部ファイルを更新する必要がある。つまり、プラグインは、コアドライバ１１１にはない機能を有する当該プラグインに固有のモジュールの追加と、コアドライバ１１１の各モジュールが参照する設定情報を更新するだけで、プラグインとして動作することができる。
【００４８】
なお、本実施形態にかかるプリンタドライバ１０６に対するプラグインの追加は、プラグイン自身のダイナミック・リンク・ライブラリおよび追加機能用Ｖａｌｉｄａｔｉｏｎプログラムの追加と、さらに、レイアウト情報、保存先情報、及びプラグイン情報のいずれか一つ以上に対する記述の追加ならびに機能情報の追加をすることで行う。これにより、ＰＣ１００にインストール済みのプリンタドライバ１０６に対して、プラグインの追加を容易に行うことが可能となる。つまり、ユーザはプリンタドライバ自体の再インストールをする必要がなくなる。
【００４９】
ここで、本実施形態で用いるＤＥＶＭＯＤＥ構造体について図３、４を用いて説明する。図３は、ＤＥＶＭＯＤＥ構造体について説明する図であり、図４は、アプリケーション１０４とプリンタドライバ１０６間で行われるＤＥＶＭＯＤＥ構造体のハンドリングについて説明する図である。
【００５０】
アプリケーション１０４とプリンタドライバ１０６は、ＤＥＶＭＯＤＥ構造体と呼ばれるデータ構造体で、印刷設定のやり取りを行う。このＤＥＶＭＯＤＥ構造体は、すべてのプリンタドライバで共通のデータ形式である。しかし、プリンタドライバが備える機能は、それぞれ異なるのが常である。よって、ＤＥＶＭＯＤＥ構造体には、どのプリンタドライバでも共通に具備している機能に関する設定値と、プリンタドライバ毎に異なる機能に関する設定値を格納するための２つの領域（Ｐｕｂｌｉｃ領域３０１、Ｐｒｉｖａｔｅ領域３０２）が存在する。
【００５１】
Ｐｕｂｌｉｃ領域３０１は、どのプリンタドライバでも共通の機能に関する設定値を格納する領域である。一方、Ｐｒｉｖａｔｅ領域３０２は、プリンタドライバ毎に異なる機能に関する設定値を格納する領域である。プリンタドライバのベンダーは、Ｐｒｉｖａｔｅ領域３０２を自由に定義して、利用することができる。
【００５２】
アプリケーション１０４は、Ｐｕｂｌｉｃ領域３０１の設定値を取得し、またその設定をすることができる。しかし、Ｐｒｉｖａｔｅ領域３０２の設定値を取得したり、設定したりすることはできない。Ｐｒｉｖａｔｅ領域３０２は、プリンタドライバ１０６のみが参照することができる。
【００５３】
アプリケーション１０４からプリンタドライバ１０６へ印刷設定を指示するときには、先述のＰｕｂｌｉｃ領域３０１の印刷設定をアプリケーション１０４が変更して、プリンタドライバ１０６に対して変更済みのＤＥＶＭＯＤＥ構造体（入力ＤＥＶＭＯＤＥ）を入力することで行う。
【００５４】
しかし、Ｐｕｂｌｉｃ領域３０１で設定できる機能は少なく、アプリケーション利用者は、Ｐｒｉｖａｔｅ領域３０２に存在する設定値を変更しなければ、プリンタドライバ１０６の具備する機能を十分に設定することができない。そこで、一般的にプリンタドライバは、Ｐｒｉｖａｔｅ領域３０２に存在する設定値を変更することができるようにするＧＵＩ表示を行う機能をアプリケーション１０４に提供する。このＧＵＩにより、Ｐｕｂｌｉｃ領域３０１とＰｒｉｖａｔｅ領域３０２に存在するすべての設定値について設定をすることができるように、アプリケーション利用者に対して便宜を図っている。
【００５５】
なお、アプリケーション１０４は、上記のようにＰｕｂｌｉｃ領域３０１のみアクセスできるが、ＤＥＶＭＯＤＥ構造体の全体（Ｐｕｂｌｉｃ領域３０１およびＰｒｉｖａｔｅ領域３０２）を取得して、それを保持することができる。本実施形態では、Ｐｒｉｖａｔｅ領域３０２に、設定値のみならず、Ｖａｌｉｄａｔｉｏｎ用プログラム（スクリプト）を格納し、プリンタドライバ１０６のバージョンアップや、プラグインによる機能拡張があっても、このＤＥＶＭＯＤＥ構造体に格納されたＶａｌｉｄａｔｉｏｎ用プログラムを用いてＶａｌｉｄａｔｉｏｎ処理を行えるようにする。なお、Ｐｒｉｖａｔｅ領域３０２では、設定値は設定値保存領域３０３に格納され、Ｖａｌｉｄａｔｉｏｎ用プログラムはプログラム領域３０４に格納される。
【００５６】
アプリケーション１０４とプリンタドライバ１０６間でＤＥＶＭＯＤＥ構造体を用いて、印刷設定のやり取りを行っていることは前述した。アプリケーション１０４は、プリンタドライバ１０６に対して、そのプリンタドライバ固有のＤＥＶＭＯＤＥ構造体を取得する要求をすることができる。この取得要求によって得られるのが出力ＤＥＶＭＯＤＥ４０２である。
【００５７】
アプリケーション１０４が取得した出力ＤＥＶＭＯＤＥ４０２は、以下に示す３つの方法によって、再度プリンタドライバ１０６に印刷設定を伝達するための入力ＤＥＶＭＯＤＥ４０１とすることができる。出力ＤＥＶＭＯＤＥ４０２を入力ＤＥＶＭＯＤＥ４０１にするためのアプリケーション１０４側の動作は以下の３つである。
【００５８】
（１）プリンタドライバ１０６に対して行った取得要求で得られた出力ＤＥＶＭＯＤＥ４０２をそのまま、入力ＤＥＶＭＯＤＥ４０１とする。
【００５９】
（２）プリンタドライバ１０６に対して行った取得要求で得られた出力ＤＥＶＭＯＤＥ４０２をプリンタドライバ１０６が具備するＧＵＩを表示することにより、そのＰｕｂｌｉｃ領域およびＰｒｉｖａｔｅ領域に存在する、すべての機能に関する設定を行い、変更を行った出力ＤＥＶＭＯＤＥ４０２を入力ＤＥＶＭＯＤＥ４０１とする。
【００６０】
（３）プリンタドライバ１０６に対して行った取得要求で得られた出力ＤＥＶＭＯＤＥ４０２のＰｕｂｌｉｃ領域の設定値のみを変更して、入力ＤＥＶＭＯＤＥ４０１とする。
【００６１】
いずれにせよ、アプリケーション１０４は、プリンタドライバ１０６に対してＤＥＶＭＯＤＥ構造体の取得要求を行い、得られたＤＥＶＭＯＤＥ構造体の内容を変更することにより、任意の印刷設定をプリンタドライバ１０６へと伝達する。
【００６２】
ところで、アプリケーション１０４は前述の通り、プリンタドライバ１０６から得られたＤＥＶＭＯＤＥ構造体（出力ＤＥＶＭＯＤＥ４０２）を保持することができる。そのため、アプリケーション１０４がＤＥＶＭＯＤＥ構造体を保持している間に、プリンタドライバ１０６のみがバージョンアップされてしまうことが多々ある。この場合、アプリケーション１０４はプリンタドライバ１０６のバージョンアップを知ることができないため、古い互換性のないＤＥＶＭＯＤＥ構造体（入力ＤＥＶＭＯＤＥ４０１）を、バージョンアップしたプリンタドライバ１０６に伝達してしまう不都合が生じる。
【００６３】
プリンタドライバ１０６は、このようなＤＥＶＭＯＤＥ構造体の不整合を生じる状況を考慮して、プリンタドライバ１０６は、その入力情報となる入力ＤＥＶＭＯＤＥ４０１に格納されている各設定値を検証し、出力ＤＥＶＭＯＤＥ４０２として、現在の正しい設定状況を反映したＤＥＶＭＯＤＥ構造体をアプリケーション１０４に渡さなければならない。そのために、Ｖａｌｉｄａｔｉｏｎ処理を行う。
【００６４】
Ｖａｌｉｄａｔｉｏｎ処理は、Ｐｕｂｌｉｃ領域に設定された各設定値およびＰｒｉｖａｔｅ領域に設定された各設定値の間に、不整合が生じた場合、それを解決する責務と、設定された値自体の妥当性検証（例えば、入力範囲が０〜１００の場合に、−１や１０１は不正値になるため、補正しなければならない）が主な責務となる。このＶａｌｉｄａｔｉｏｎ処理は、入力ＤＥＶＭＯＤＥ４０１ではＰｕｂｌｉｃ領域の設定値がＰｒｉｖａｔｅ領域の設定値に対して作用する。出力ＤＥＶＭＯＤＥ４０２ではＰｒｉｖａｔｅ領域の設定値がＰｕｂｌｉｃ領域の設定値に対して作用する。ここまでがプリンタドライバ１０６を含む一般的なプリンタドライバが備えるＤＥＶＭＯＤＥ構造体のハンドリング方法の説明である。
【００６５】
続いて、本実施形態におけるＤＥＶＭＯＤＥ構造体の構成について、図４を用いてさらに説明する。
【００６６】
本実施形態では、ＤＥＶＭＯＤＥ構造体に、Ｖａｌｉｄａｔｉｏｎ用プログラム（Ｖａｌｉｄａｔｉｏｎプログラム４０３、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム４０４、追加機能用Ｖａｌｉｄａｔｉｏｎプログラム群（４０５，４０６等）を格納して、それをプリンタドライバ１０６が実行することが特徴である。Ｖａｌｉｄａｔｉｏｎ用プログラムは、入力ＤＥＶＭＯＤＥ用、出力ＤＥＶＭＯＤＥ用の２つのＶａｌｉｄａｔｉｏｎ機能を実現できるプログラム（スクリプト）である。
【００６７】
プリンタドライバ１０６は、入力ＤＥＶＭＯＤＥ４０１に格納されたプログラム領域からＶａｌｉｄａｔｉｏｎ用プログラムを取得し、入力ＤＥＶＭＯＤＥ４０１に対してＶａｌｉｄａｔｉｏｎ処理を実行する。通常は同様に、出力ＤＥＶＭＯＤＥ４０２に対して、入力ＤＥＶＭＯＤＥ４０１に格納されたＶａｌｉｄａｔｉｏｎ用プログラムを実行することでＶａｌｉｄａｔｉｏｎ処理を行う。
【００６８】
例外的な動作としておよびアプリケーション１０４からプリンタドライバ１０６に対してＤＥＶＭＯＤＥ構造体の取得要求があった場合など、アプリケーション１０４から入力ＤＥＶＭＯＤＥを受け取らない場合には、入力ＤＥＶＭＯＤＥ４０１が存在しない。このため、プリンタドライバ１０６は、出力ＤＥＶＭＯＤＥ４０２をアプリケーション１０４に渡す際に、保持しているＶａｌｉｄａｔｉｏｎ用プログラム４０３〜４０６を、出力ＤＥＶＭＯＤＥ４０２のプログラム領域に圧縮して格納し、このＶａｌｉｄａｔｉｏｎ用プログラム４０３〜４０６によりＶａｌｉｄａｔｉｏｎ処理を行う。また、バージョンアップ等によりＶａｌｉｄａｔｉｏｎ用プログラムが変更されている場合も同様である。
【００６９】
プリンタドライバ１０６がバージョンアップしているときには、出力ＤＥＶＭＯＤＥ４０２に対してバージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム４０４の差分も実行されることになる。バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム４０４は入力ＤＥＶＭＯＤＥ４０１に格納されているＶａｌｉｄａｔｉｏｎ用プログラムを補完する。つまり、バージョンアップによって、利用できる機能が増加したとき、その増加分（差分）は入力ＤＥＶＭＯＤＥ４０１に格納されているＶａｌｉｄａｔｉｏｎ用プログラムには存在しない。バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム４０４は、拡張された機能と既存機能との間にＶａｌｉｄａｔｉｏｎを行う必要がある時に呼び出す。バージョンアップによって、Ｖａｌｉｄａｔｉｏｎを拡張しなくてもいい場合には、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム４０４が存在しない場合もある。
【００７０】
また、バージョンアップ以外にも、プリンタドライバ１０６の機能が拡張されることがある。具体的にはプラグイン拡張など、既存プリンタドライバに対して、機能をアドオンするような機構を備える、プリンタドライバ１０６などのプリンタドライバで機能拡張が起こりうる。プラグイン拡張は、動的な機能追加であるため、機能の脱着が行われる。また、プラグインは単数ではなく、複数存在することがある。そのため、拡張される機能に追従して、Ｖａｌｉｄａｔｉｏｎ処理が変化する可能性がある。追加機能用Ｖａｌｉｄａｔｉｏｎプログラム１・４０５や、追加機能用Ｖａｌｉｄａｔｉｏｎプログラム２・４０６は、このような動的な機能拡張に追従したＶａｌｉｄａｔｉｏｎ処理を補完するプログラムである。本実施形態では、Ｖａｌｉｄａｔｉｏｎ用プログラムはＬｕａスクリプトを用いて構成されるものとするが、プリンタドライバ１０６が実行可能なプログラムであれば、その形態は問わない。また、プリンタドライバ１０６の印刷設定部１２０および描画部１３０が直接Ｖａｌｉｄａｔｉｏｎ用プログラムを実行する場合は、これらが設定値適性化手段となる。
【００７１】
次に、上記設定情報（レイアウト情報、保存先情報、および機能情報）の具体例を挙げ説明する。
【００７２】
（レイアウト情報）
図５は、レイアウト情報の一例を示した図である。なお、図５では、一部のみを例示している。また、図５に示すレイアウト情報は、ＪＳＯＮ形式で記述しているが他の形式でも良い。
【００７３】
図５に示すように、レイアウト情報には、印刷設定画面に表示するＧＵＩコンポーネント毎のレイアウトデータが記述されている。このレイアウトデータは、属性としてｔｙｐｅ，ｎａｍｅ，ａｘｉｓを有している。
【００７４】
ｔｙｐｅは、ＧＵＩコンポーネントの種類を表している。ｔｙｐｅの値であるＣｈｅｃｋＢｏｘは、チェックボックスコンポーネントで表示することを示している。ＣｏｍｂｏＢｏｘはコンボボックスコンポーネントで表示することを示している。また、ＳｐｉｎＢｏｘは、スピンボックスコンポーネントで表示することを示している。図示しないが、その他にもＥｄｉｔＢｏｘやＬｉｓｔＢｏｘなどを記述することにより、エディットボックスコンポーネントやリストボックスコンポーネント等でＧＵＩコンポーネントを表示することもできる。
【００７５】
ｎａｍｅは、設定の名前を表している。ｎａｍｅの値のうち、ｄｕｐｌｅｘは両面印刷設定であることを示している。ｏｒｉｅｎｔａｔｉｏｎは、印刷の向き設定であることを示している。また、ｃｏｐｉｅｓは、部数設定であることを示している。図示しないが、ｐａｐｅｒｓｉｚｅやｌａｙｏｕｔなどを記述することにより、用紙サイズ設定や集約設定等を指定することもできる。
【００７６】
ａｘｉｓは、ＧＵＩコンポーネントの表示位置の座標を表している。ａｘｉｓの属性である、ｘはダイアログボックスの左上原点からの水平方向座標を示し、ｙはダイアログボックスの左上原点からの垂直方向座標を示している。例えば、図５に示す両面印刷設定（ｄｕｐｌｅｘ）のａｘｉｓには、属性ｔｙｐｅで指定されたチェックボックスコンポーネントを水平位置２５、垂直位置３０に表示することが記述されている。
【００７７】
そして、設定画面表示部１２１は、記憶部１０２からレイアウト情報を読み込み、読み込んだレイアウト情報に従って設定画面を生成し、ＰＣ１００の表示装置（図示せず）に生成した印刷設定画面を表示する。なお、このとき、印刷設定部１２０は、レイアウト情報に記述されている各ＧＵＩコンポーネントのうち、後述の機能情報を基に設定可能な項目のみを表示する。
【００７８】
図６は、図５のレイアウト情報および後述の図８に示す機能情報を読み込んだ場合に、プリンタドライバ１０６の設定画面表示部１２１が表示する印刷設定画面の例を示した図である。図６に示すように、両面印刷設定用に表示名“Ｄｕｐｌｅｘ”と共にチェックボックスコンポーネントが配置され、印刷の向き設定用に表示名“Ｏｒｉｅｎｔａｔｉｏｎ”と共にコンボボックスコンポーネントが配置され、部数設定用に表示名“Ｃｏｐｉｅｓ”と共にスピンボックスボックスコンポーネントが配置されている（印刷の向き設定および部数設定のデフォルトの設定値は後述の機能情報による）。なお、図６に示す、ＯＫボタンは、変更された印刷設定を保存するボタンであり、Ｃａｎｃｅｌボタンは、変更をキャンセルするボタンである。
【００７９】
（保存先情報）
保存先情報は、各設定値の保存場所を指定する情報が記述されている。図７は、保存先情報の一部のみを例示している。なお、図７に示す例では、保存先情報はＪＳＯＮ形式で記述されているが他の形式であっても良い。
【００８０】
保存先情報のｒｅｇｉｓｔｏｒｙとｄｅｖｍｏｄｅというキーで指定される部分に記述された各設定名は、レイアウト情報および機能情報に記述されている各設定名と対応関係を有している。そして、ｒｅｇｉｓｔｏｒｙというキー内に記述された各設定名（図７の例では、ｆｉｎｉｓｈｅｒ，ｈｄｄ，ｆｏｌｄ…）に対応する設定値は、レジストリに保存される。一方、ｄｅｖｍｏｄｅというキー内に記述された各設定名（図７の例では、ｄｕｐｌｅｘ，ｏｒｉｅｎｔａｔｉｏｎ，…）に対応する設定値は、ＤＥＶＭＯＤＥ構造体に格納される。なお、ｆｉｎｉｓｈｅｒ，ｈｄｄ，ｆｏｌｄはそれぞれ、プリンタ１５０がもつ機能のフィニッシャー、ハーディスク、紙折り機を表わしている。
【００８１】
（機能情報）
図８は、機能情報の一例を示した図である。図８では、説明の簡単のため、両面印刷設定（ｄｕｐｌｅｘ）と印刷の向き設定（ｏｒｉｅｎｔａｔｉｏｎ）と部数設定（ｃｏｐｉｅｓ）のみ例示するが、実際には、用紙サイズ設定やステープル設定など印刷に係わる種々の設定について記述される。なお、図８に示す機能情報は、ＸＭＬ形式で記述するが他の形式（例えば、ＪＳＯＮ等）でも良い。
【００８２】
図８に示す機能情報の例では、各設定の情報を、ｆｅａｔｕｒｅタグ毎に定義している。このｆｅａｔｕｒｅタグは、ｎａｍｅとｄｅｆａｕｌｔとｔｙｐｅの属性を持っている。もちろん、図８に示す例は一例であって、その他の属性を定義し利用することができる。
【００８３】
属性ｎａｍｅは、設定の名前であり、レイアウト情報のｎａｍｅと対応している。図８の例では、属性ｎａｍｅの値であるｄｕｐｌｅｘは両面印刷設定であることを、ｏｒｉｅｎｔａｔｉｏｎは印刷の向き設定であることを、ｃｏｐｉｅｓは部数設定であることを指定している。また、属性ｄｅｆａｕｌｔは、選択肢の初期値を表わしている。また、属性ｔｙｐｅは、入力される設定値の形式を表している。ｔｙｐｅの値である、ｐｉｃｋｏｎｅは、選択肢形式を指定している。このｐｉｃｋｏｎｅの他にも、文字列入力形式を指定するｓｔｒｉｎｇや、数値入力形式を指定するｎｕｍｂｅｒ等がある。
【００８４】
ｐｉｃｋｏｎｅタグは、選択可能な設定値を表すものであり、ｐｉｃｋｏｎｅタグ内の属性ｎａｍｅで、設定値が設定されている。ｐｉｃｋｏｎｅの属性であるｎａｍｅの値は、印刷の向き設定においては、ｐｏｒｔｒａｉｔが縦向き、ｌａｎｄｓｃａｐｅが横向きを表わしている。両面印刷設定においては、ｏｆｆが機能オフ、ｏｎが機能オンを表している。また、部数設定においては、ｍｉｎが最小部数、ｍａｘが最大部数を表している。
【００８５】
ｆｅａｔｕｒｅタグで囲まれる部分には、図示しないがｃｏｎｓｔｒａｉｎｔタグを記述することができる。このｃｏｎｓｔｒａｉｎｔタグを用いて記述された部分は、親タグであるｆｅａｔｕｒｅタグの設定についての禁則情報を表わす（一例：＜ｃｏｎｓｔｒａｉｎｔ  ｆｉｘｖａｌｕｅ＝”ｏｆｆ”＞）。また、このｃｏｎｓｔｒａｉｎｔタグ内の属性であるｆｉｘｖａｌｕｅを用いて、禁則条件が合致している場合に強制的に変更される設定値（上記例では”ｏｆｆ”）を設定することができる。
【００８６】
禁則条件は、ｃｏｎｓｔｒａｉｎｔタグで囲まれる部分に、ｃｏｎｄｉｔｉｏｎタグを用いて記述することができる（一例：＜ｃｏｎｄｉｔｉｏｎ  ｅｘｐｒｅｓｓｉｏｎ＝”ＡＡＡＡ！＝”ｏｎ”＞。このｃｏｎｄｉｔｉｏｎタグは親タグであるｃｏｎｓｔｒａｉｎｔタグの禁則条件を表し、属性であるｅｘｐｒｅｓｓｉｏｎを用いて、その条件を指定することができる（上記例では、設定ＡＡＡＡがｏｎ以外のとき条件を満たすこととなる）。なお、ｐｉｃｋｏｎｅタグに対しても、このタグで囲まれる部分にｃｏｎｓｔｒａｉｎｔタグを記述することができ、ｐｉｃｋｏｎｅタグ自体、すなわち選択肢自身も禁則情報を持つことができる。
【００８７】
以上のように、機能情報は、そのオプションを含めて各プリンタが備えるすべての機能についての記述がなされ、サポートするプリンタの機種毎に用意される。
【００８８】
（印刷設定に係る処理）
次に、アプリケーションとプリンタドライバ間におけるＤＥＶＭＯＤＥ構造体を用いた印刷設定に係る処理について、図９のフローチャートを用いて説明する。図９は、アプリケーションとプリンタドライバ間におけるＤＥＶＭＯＤＥ構造体を用いた印刷設定に係る処理の概要を示すフローチャートである。
【００８９】
プリンタドライバ１０６は、アプリケーション１０４から入力ＤＥＶＭＯＤＥを受け取ると、入力ＤＥＶＭＯＤＥ処理（ステップＳ９０１）として、Ｖａｌｉｄａｔｉｏｎ処理により入力ＤＥＶＭＯＤＥが適切な設定情報になっているか検証を行い、不整合や妥当性に問題があればその解決を行う。
【００９０】
その後、プリンタドライバ１０６は、アプリケーション１０４からの指示により、印刷設定変更処理（ステップＳ９０２）を実行する。具体的には、先述の通り、プリンタドライバ１０６が具備するＧＵＩ（印刷設定画面）を表示することにより、エンドユーザに対して、印刷設定の変更手段を提供し、その設定入力を受け付ける。このとき表示されるＧＵＩには、入力ＤＥＶＭＯＤＥ処理後の入力ＤＥＶＭＯＤＥの設定状況を反映したＧＵＩが表示される。エンドユーザが上記ＧＵＩを操作し、決定した印刷設定は出力ＤＥＶＭＯＤＥとして得ることができる。
【００９１】
次いで、この出力ＤＥＶＭＯＤＥに対し、出力ＤＥＶＭＯＤＥ処理（ステップＳ９０３）として、Ｖａｌｉｄａｔｉｏｎ処理により出力ＤＥＶＭＯＤＥが適切な設定情報になっているか検証を行い、不整合や妥当性に問題があればその解決を行う。そして、出力ＤＥＶＭＯＤＥ処理後の出力ＤＥＶＭＯＤＥが、アプリケーション１０４に渡される。
【００９２】
（入力ＤＥＶＭＯＤＥ処理）
続いて、図９に示した入力ＤＥＶＭＯＤＥ処理の詳細を、図１０のフローチャートを用いて説明する。図１０は、入力ＤＥＶＭＯＤＥ処理の詳細を説明するためのフローチャートである。なお、以下の処理は、アプリケーション１０４から入力ＤＥＶＭＯＤＥ構造体が渡される場合の処理である。アプリケーション１０４から入力ＤＥＶＭＯＤＥ構造体が渡されない場合は、以下の一連の処理は省略される。
【００９３】
プリンタドライバ１０６は、ＤＥＶＭＯＤＥ構造体（入力ＤＥＶＭＯＤＥ）をアプリケーション１０４から受け取る（ステップＳ１００１）。
【００９４】
次いで、ＤＥＶＭＯＤＥ構造体のプログラム領域から、Ｖａｌｉｄａｔｉｏｎ用プログラムを取得する（ステップＳ１００２）。
【００９５】
Ｖａｌｉｄａｔｉｏｎプログラムは圧縮形式で格納されているため、圧縮データの伸長を行い復元させる（ステップＳ１００３）。このとき、標準機能についてＶａｌｉｄａｔｉｏｎ処理を行うＶａｌｉｄａｔｉｏｎプログラムと、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムおよび追加機能用Ｖａｌｉｄａｔｉｏｎプログラムが内部メモリに展開される。ただし、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムおよび追加機能用Ｖａｌｉｄａｔｉｏｎプログラムは、それらが存在する場合にのみ展開される。
【００９６】
そして、標準機能についてＶａｌｉｄａｔｉｏｎプログラムを実行して入力ＤＥＶＭＯＤＥに対してＶａｌｉｄａｔｉｏｎ処理を実行する（ステップＳ１００４）。
【００９７】
次に、プリンタドライバ１０６がバージョンアップされているとバージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムが存在するため、その存在の有無を確認する（ステップＳ１００５）。なお、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムがある場合は、ステップＳ１００３での圧縮データの復元時に内部メモリの所定のディレクトリ領域に各バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムが保存されるものとする。したがって、このディレクトリ領域を確認することにより、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムの存在の有無を確認することができる。
【００９８】
ここでバージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムが存在する場合（ステップＳ１００５でＹｅｓ）、バージョンアップ用の追加のＶａｌｉｄａｔｉｏｎ処理が必要なため、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムを呼び出し実行する（ステップＳ１００６）。一方、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムが存在しない場合（ステップＳ１００５でＮｏ）、ステップＳ１００７へ移行する。
【００９９】
次に、プラグインなどの動的機能拡張がおこなわれている時、追加機能用Ｖａｌｉｄａｔｉｏｎプログラムが存在するため、その存在の有無を確認する（ステップＳ１００７）。この追加機能用Ｖａｌｉｄａｔｉｏｎプログラムも、ステップＳ１００３での復元時に内部メモリの所定のディレクトリ領域に各追加機能用Ｖａｌｉｄａｔｉｏｎプログラムが保存されるものとする。したがって、このディレクトリ領域を確認することにより、追加機能用Ｖａｌｉｄａｔｉｏｎプログラムの存在の有無を確認することができる。
【０１００】
ここで追加機能用Ｖａｌｉｄａｔｉｏｎプログラムが存在する場合（ステップＳ１００７でＹｅｓ）、追加機能に応じた追加のＶａｌｉｄａｔｉｏｎ処理が必要なため、各追加機能用Ｖａｌｉｄａｔｉｏｎプログラムを呼び出し実行する（ステップＳ１００８）。一方、追加機能用Ｖａｌｉｄａｔｉｏｎプログラムが存在しない場合は（ステップＳ１００７でＮｏ）、一連の処理を終了する。
【０１０１】
（出力ＤＥＶＭＯＤＥ処理）
続いて、図９に示した出力ＤＥＶＭＯＤＥ処理の詳細を、図１１に示すフローチャートを用いて説明する。図１１は、出力ＤＥＶＭＯＤＥ処理の詳細を説明するためのフローチャートである。
【０１０２】
出力ＤＥＶＭＯＤＥ処理では、アプリケーション１０４から入力された入力ＤＥＶＭＯＤＥの応答として、出力ＤＥＶＭＯＤＥをアプリケーション１０４に返す場合と、アプリケーション１０４がプリンタドライバ１０６に対して、プリンタドライバ固有のＤＥＶＭＯＤＥ構造体の取得要求に応えて出力ＤＥＶＭＯＤＥを返す場合の２つのケースが考えられる。以下の処理フローは、この２つのケースに対応している。
【０１０３】
はじめに、プリンタドライバ１０６は、入力ＤＥＶＭＯＤＥがあるか、すなわち、アプリケーション１０４から入力ＤＥＶＭＯＤＥを受けたか確認する（ステップＳ１１０１）。
【０１０４】
入力ＤＥＶＭＯＤＥが存在しない場合は（ステップＳ１１０１でＮｏ）、記憶部１０２に格納されているＶａｌｉｄａｔｉｏｎ用プログラム（標準機能についてのＶａｌｉｄａｔｉｏｎプログラム、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム、および追加機能用Ｖａｌｉｄａｔｉｏｎプログラム）を参照し、これらを内部メモリに展開する（ステップＳ１１０２）。
【０１０５】
次いで、上記Ｖａｌｉｄａｔｉｏｎ用プログラムを圧縮して、出力ＤＥＶＭＯＤＥのプログラム領域に格納する（ステップＳ１１０３）。ここで、Ｖａｌｉｄａｔｉｏｎ用プログラムを圧縮することにより、プログラム領域の使用量を削減することができる。なお、これに先立ち、例えば、さらなるバージョンアップまたはプラグインの追加による機能追加またはプラグインの削除による機能の削除が行われていた場合、図１２にその一部を示すＶａｌｉｄａｔｉｏｎ用プログラム（スクリプト）に、追加のスクリプト（差分）が付加された図１３に示すＶａｌｉｄａｔｉｏｎ用プログラムがプログラム領域に上書きされ格納されることになる（なお、図１２，１３では、設定値の妥当性検証用のプログラム例を示しており、これらの図に示した関数では、パラメータとして、テーブル（tbl）に設定された値以外の値が渡された場合や所定の範囲外の値が渡された場合にはデフォルトの値を返し、そうでない場合はテーブル上の対応する値を返している）。このように、バージョンアップ等によりＶａｌｉｄａｔｉｏｎ用プログラムに変更がなされていた場合、その変更（差分）は出力ＤＥＶＭＯＤＥ構造体にも反映される。
【０１０６】
一方、入力ＤＥＶＭＯＤＥが存在する場合は（ステップＳ１１０１でＹｅｓ）、保持されている入力ＤＥＶＭＯＤＥのプログラム領域にあったＶａｌｉｄａｔｉｏｎ用プログラムを参照する（ステップＳ１１０４）。なお、このＶａｌｉｄａｔｉｏｎ用プログラムは、前述のステップＳ１００３で内部メモリに展開されている。
【０１０７】
次いで、記憶部１０２に格納されているＶａｌｉｄａｔｉｏｎ用プログラムを参照する（ステップＳ１１０５）。
【０１０８】
次に、Ｖａｌｉｄａｔｉｏｎ用プログラムに変更があるか確認する（ステップＳ１１０６）。具体的には、内部メモリに展開されている上記入力ＤＥＶＭＯＤＥのプログラム領域にあったＶａｌｉｄａｔｉｏｎプログラムと、記憶部１０２に格納されているＶａｌｉｄａｔｉｏｎプログラムとを比較し、比較の結果、同一である場合、Ｖａｌｉｄａｔｉｏｎ用プログラムに変更は無いと判定し（ステップＳ１１０６でＮｏ）、ステップＳ１１０７へ移行する。一方、比較の結果、異なっている場合、Ｖａｌｉｄａｔｉｏｎ用プログラムに変更があったと判定し（ステップＳ１１０６でＹｅｓ）、上記ステップＳ１１０３の処理を実行する。この結果、Ｖａｌｉｄａｔｉｏｎ用プログラムの変更が出力ＤＥＶＭＯＤＥに反映される。
【０１０９】
次いで、内部メモリに展開されている、Ｖａｌｉｄａｔｉｏｎプログラムを実行して、前述の図９のステップＳ９０２で実行された印刷設定変更処理後の出力ＤＥＶＭＯＤＥに対してＶａｌｉｄａｔｉｏｎ処理を実行する（ステップＳ１１０７）。
【０１１０】
次に、プリンタドライバ１０６がバージョンアップされている場合はバージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムも内部メモリに展開され存在するため、その存在の有無を確認する（ステップＳ１００８）。ここでの処理は、前述の図１０のステップＳ１００５の場合と同様にして行われる。
【０１１１】
ここでバージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムが存在する場合は（ステップＳ１００８でＹｅｓ）、バージョンアップ用の追加のＶａｌｉｄａｔｉｏｎ処理が必要なため、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムを実行する（ステップＳ１１０９）。一方、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムが存在しない場合は（ステップＳ１００８でＮｏ）、ステップＳ１１１０へ移行する。
【０１１２】
次いで、プラグインなどの動的機能拡張がおこなわれている場合、追加機能用Ｖａｌｉｄａｔｉｏｎプログラムも内部メモリに展開され存在するため、その存在の有無を確認する（ステップＳ１１１０）。ここでの確認は、前述の図１０のステップＳ１００７の場合と同様にして行われる。
【０１１３】
ここで追加機能用Ｖａｌｉｄａｔｉｏｎプログラムが存在する場合は（ステップＳ１１１０でＹｅｓ）、追加機能に応じた追加のＶａｌｉｄａｔｉｏｎ処理が必要なため、追加機能用Ｖａｌｉｄａｔｉｏｎプログラムを実行する（ステップＳ１１１１）。一方、追加機能用Ｖａｌｉｄａｔｉｏｎプログラムが存在しない場合は（ステップＳ１１１０でＮｏ）、ステップＳ１１１２へ移行する。
【０１１４】
以上の処理後、出力ＤＥＶＭＯＤＥをアプリケーション１０４に渡す（ステップＳ１１１２）。
【０１１５】
（各プログラム間の処理の流れ）
続いて、図１０のステップＳ１００４〜Ｓ１００８および図１１のステップＳ１１０７〜Ｓ１１１１に示したＶａｌｉｄａｔｉｏｎ処理に係わる各プログラム間の処理の流れについて、図１４を用いて概説する。図１４は、Ｖａｌｉｄａｔｉｏｎ処理に係わる各プログラム間の処理の流れについて、その概要を説明するための概略図である。
【０１１６】
プリンタドライバ１０６のコアドライバ１１１は、前述のように、印刷設定部１２０および描画部１３０を含むメインプログラム１４０１と、Ｖａｌｉｄａｔｉｏｎ処理にて実行するプログラムを動作させるための、Ｖａｌｉｄａｔｉｏｎプログラム実行環境１４０を備える。本実施形態では、Ｖａｌｉｄａｔｉｏｎ用プログラムはＬｕａスクリプトを採用しており、Ｖａｌｉｄａｔｉｏｎプログラム実行環境１４０はＬｕａスクリプト実行環境である。
【０１１７】
標準機能についてのＶａｌｉｄａｔｉｏｎプログラム４０３は、アプリケーション１０４から渡される入力ＤＥＶＭＯＤＥのプログラム領域に格納されたプログラム、もしくはプリンタドライバ１０６が具備するプログラムのいずれかであり、Ｖａｌｉｄａｔｉｏｎプログラム実行環境１４０にて実行され、実行結果は、メインプログラム１４０１へと通知される。
【０１１８】
Ｖａｌｉｄａｔｉｏｎプログラム４０３は、（それが存在すれば内部メモリに展開されている）バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム（４０４）を格納するディテクトリ１４０２を検索して、ディテクトリ１４０２内にバージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム（４０４）の有無を確認し、再帰的に複数のプログラムを呼び出す。呼び出されたプログラムは、Ｖａｌｉｄａｔｉｏｎプログラム実行環境１４０にて実行される。この動作により、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムが複数存在する場合（複数回にわたるバージョンアップがあった場合など）にもそのプログラムを実行することができる。
【０１１９】
バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム（４０４）は、それが存在すれば、Ｖａｌｉｄａｔｉｏｎプログラム４０３によるＶａｌｉｄａｔｉｏｎ処理の後に実行され、実行結果は結合されて、メインプログラム７０１に通知される。
【０１２０】
さらに、プリンタドライバ１０６をプラグイン機構のような動的機能追加機能で追加した場合に対応するため、（それが存在すれば内部メモリに展開されている）追加機能用Ｖａｌｉｄａｔｉｏｎプログラム（４０５）を格納するディレクトリ１４０３を検索して、バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラムと同様に処理を実行する。
【０１２１】
以上、本実施形態についてその詳細を説明した。上述したように、本実施形態では、印刷設定に係る設定情報とＶａｌｉｄａｔｉｏｎ用プログラムとをセットにしてＤＥＶＭＯＤＥ構造体に格納するようにし、このＤＥＶＭＯＤＥ構造体に格納したまたは格納されるＶａｌｉｄａｔｉｏｎ用プログラムを使って設定情報に対するＶａｌｉｄａｔｉｏｎ処理を実行するようにしたので、従来起こりえた設定値とこの設定値に対してＶａｌｉｄａｔｉｏｎ処理を行うプログラム間の不整合を解消することができる。
【０１２２】
なお、上述した実施形態のプリンタドライバ１０６は、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【０１２３】
また、これらのプログラムは、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。
【符号の説明】
【０１２４】
１００…ＰＣ
１０１…処理部
１０２…記憶部
１０３…通信部
１０４…アプリケーション
１０５…ＯＳ
１０６…プリンタドライバ
１１１…コアドライバ
１１２…Ｉ／Ｆ部
１１３…プラグインＡ
１１４…プラグインＢ
１２０…印刷設定部
１２１…設定画面表示部
１２２…振分部
１２３…文字列化部
１２４…圧縮部
１２５…圧縮データ保存部
１２６…圧縮データ取得部
１２７…解凍部
１３０…描画部
１３１…圧縮データ取得部
１３２…解凍部
１３３…印刷データ生成部
１４０…Ｖａｌｉｄａｔｉｏｎプログラム実行環境
１５０…プリンタ
１６０…ネットワーク
３０１…Ｐｕｂｌｉｃ領域
３０２…Ｐｒｉｖａｔｅ領域
３０３…設定値保存領域
３０４…プログラム領域
４０１…入力ＤＥＶＭＯＤＥ
４０２…出力ＤＥＶＭＯＤＥ
４０３…Ｖａｌｉｄａｔｉｏｎプログラム
４０４…バージョンアップ用Ｖａｌｉｄａｔｉｏｎプログラム
４０５…追加機能用Ｖａｌｉｄａｔｉｏｎプログラム１
４０６…追加機能用Ｖａｌｉｄａｔｉｏｎプログラム２
【先行技術文献】
【特許文献】
【０１２５】
【特許文献１】特開２００８−０９７５７４号公報
【図１】
0005533382.tif 000002
【図２】
0005533382.tif 000003
【図３】
0005533382.tif 000004
【図４】
0005533382.tif 000005
【図５】
0005533382.tif 000006
【図６】
0005533382.tif 000007
【図７】
0005533382.tif 000008
【図８】
0005533382.tif 000009
【図９】
0005533382.tif 000010
【図１０】
0005533382.tif 000011
【図１１】
0005533382.tif 000012
【図１２】
0005533382.tif 000013
【図１３】
0005533382.tif 000014
【図１４】
0005533382.tif 000015