(57)【要約】      （修正有）【課題】印刷設定で動的に機能を追加するときに、他の機能の無効な組み合わせを複製する情報処理装置を提供する。【解決手段】情報処理装置は、印刷を行うプリンタードライバーが持つ機種依存データを読み込む手段と、動的に機能を追加する手段と、１つの機能に関する無効な組み合わせをすべて選び出す手段とＳ７０１、選びだしたすべての無効な組み合わせを複製する手段Ｓ７０２と、複製した無効な組み合わせの中の機能を動的に追加した機能に置き換える手段Ｓ７０３と、動的に追加した機能に置き換えたすべての無効な組み合わせを元の機種依存データと組み合わせて処理を行う手段Ｓ７０４と、を有する。【選択図】図７
2017033050.tif 000002
【特許請求の範囲】
【請求項１】
印刷を行うプリンタードライバーが持つ機種依存データを読み込む手段（Ｓ５０２）と、動的に機能を追加することができる手段（Ｓ６０２）と、１つの機能に関する無効な組み合わせをすべて選び出す手段と（Ｓ７０１）、選びだしたすべての無効な組み合わせを複製する手段（Ｓ７０２）と、複製した無効な組み合わせの中の機能を動的に追加した機能に置き換える手段（Ｓ７０３）と、動的に追加した機能に置き換えたすべての無効な組み合わせを元の機種依存データと組み合わせて処理を行う手段（Ｓ７０４）を持つことを特徴とする情報処理装置。
【請求項２】
動的に機能を追加する際に、機能の属性情報もあわせて保存することができる手段（Ｓ６０３）を持つことを特徴とする請求項１に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンターに印刷するためのプリンタードライバーにおいて、印刷設定で動的に機能を追加するときに、他の機能の無効な組み合わせを複製するプログラムに関する。
【背景技術】
【０００２】
Ｍｉｃｒｏｓｏｆｔ（登録商標）のＷｉｎｄｏｗｓ（登録商標）８では、新しいアーキテクチャーのＶ４プリンタードライバーが導入された。Ｖ４プリンタードライバーは、ＰＰＤ（ＰｏｓｔＳｃｒｉｐｔ  Ｐｒｉｎｔｅｒ  Ｄｅｓｃｒｉｐｔｉｏｎ）やＧＰＤ（Ｇｅｎｅｒｉｃ  Ｐｒｉｎｔｅｒ  Ｄｅｓｃｒｉｐｔｉｏｎ）という機種依存ファイルで、各機種で使用できる印刷設定の機能を表現する。同時に設定することができない機能については、無効な組み合わせ（Ｉｎｖａｌｉｄ  Ｃｏｍｂｉｎａｔｉｏｎ）としてＰＰＤやＧＰＤに記載する。たとえば、Ａ５用紙は小さくステイプルできないので、「用紙サイズのＡ５」と「ステイプルのオン」は同時に指定できない機能になり、機能同士をそれぞれ無効な組み合わせとして記載する。ユーザーが印刷設定を変更することによって、ＰＰＤやＧＰＤに記載した無効な組み合わせになったときは、Ｖ４プリンタードライバーは、優先順位が最も低い機能を使用できないように強制的に設定を変更する。このように印刷設定の無効な組み合わせによって設定を変更することは、禁則による丸め処理と呼ばれることもある。
【０００３】
印刷設定の中には動的に機能を追加するものがある。たとえば、ユーザー定義用紙は、ユーザーが印刷設定をする際に、好きな幅と高さを指定したカスタムの用紙を作成する機能である。カスタムの用紙であることを利用して、事前にＰＰＤやＧＰＤにカスタム用紙用の無効な組み合わせを記載しているが、幅と高さによってはこの組み合わせが変わることがある。たとえば、定型用紙に近い用紙サイズであればステイプルや両面などのフィニッシング機能を使うことができるが、幅と高さが定型用紙から大きく離れている場合は片面印刷しかできないといったものである。このように、ユーザー定義用紙の幅と高さによって動的に変化する無効な組み合わせは、事前にＰＰＤやＧＰＤに記載しておけないので、カスタムの用紙のための無効な組み合わせは１つしか記載できない。
【０００４】
そこで、Ｖ４プリンタードライバーのＵＩを使って、ＰｒｉｎｔＴｉｃｋｅｔとして機能を指示して、機能を動的に追加する方法（特許文献１）や、ＰＰＤやＧＰＤとは別の拡張機能情報を用いて、機能を動的に追加する方法（特許文献２）が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−９０６３４号公報
【特許文献２】特開２０１４−２０９３１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ＰｒｉｎｔＴｉｃｋｅｔを使って機能を指示する方法では、ＰｒｉｎｔＴｉｃｋｅｔを２回変換しなければならないため、無効な組み合わせを処理するのに時間がかかり、プリンタードライバーの性能が落ちてしまう。また、新しい拡張機種情報を利用する方法では、ＰＰＤやＧＰＤに記載された無効な組み合わせと連携することができないので、拡張機種情報にもすべての無効な組み合わせを記述しておく必要があり、２重管理となってしまう。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために、本発明に係る情報処理装置は、
印刷を行うプリンタードライバーが持つ機種依存データを読み込む手段（Ｓ５０２）と、動的に機能を追加することができる手段（Ｓ６０２）と、１つの機能に関する無効な組み合わせをすべて選び出す手段と（Ｓ７０１）、選びだしたすべての無効な組み合わせを複製する手段（Ｓ７０２）と、複製した無効な組み合わせの中の機能を動的に追加した機能に置き換える手段（Ｓ７０３）と、動的に追加した機能に置き換えたすべての無効な組み合わせを元の機種依存データと組み合わせて処理を行う手段（Ｓ７０４）を持つことを特徴とする。
【発明の効果】
【０００８】
本発明に係る情報処理装置によれば、ＰＰＤやＧＰＤをそのまま使用しながら、動的に無効な組み合わせを追加して無効な組み合わせを実現できるので、プリンタードライバーの性能の劣化はなく、機種情報もＰＰＤやＧＰＤのみに集中させることができる。
【図面の簡単な説明】
【０００９】
【図１】コンピューターシステムのハードウェアとソフトウェアのブロック構成図の一例を示す図である。
【図２】クライアントとサーバーとプリンターが接続されたネットワークの構成図の一例を示す図である。
【図３】Ｖ４プリンタードライバー印刷処理システムのブロック構成図の一例を示す図である。
【図４】Ｖ４プリンタードライバーの機種依存ファイルのＧＰＤのサンプルである。
【図５】Ｖ４プリンタードライバーのデバイスアプリのコンフリクトエンジンのユーザーインターフェースを表示する前の初期化のフローチャートである。
【図６】Ｖ４プリンタードライバーのユーザー定義用紙を追加する際に、デバイスアプリが複製する無効な組み合わせを選択しているフローチャートである。
【図７】Ｖ４プリンタードライバーのデバイスアプリのコンフリクトエンジンにおいて、無効な組み合わせを複製するフローチャートである。
【図８】Ｖ４プリンタードライバーのユーザー設定用紙タイプを取得する際に、デバイスアプリが複製する無効な組み合わせを選択しているフローチャートである。
【図９】Ｖ４プリンタードライバーで、動的にユーザー定義用紙を追加して、無効な組み合わせを複製した機種依存ファイルのＧＰＤのサンプルである。
【図１０】Ｖ４プリンタードライバーで、デバイスアプリが表示するユーザーインターフェースである。
【図１１】Ｖ４プリンタードライバーで、デバイスアプリが表示するユーザーインターフェースのうち、ユーザー定義用紙を登録するダイアログである。
【発明を実施するための形態】
【００１０】
以下、本発明を実施するための形態について図面を用いて説明する。
【実施例１】
【００１１】
図１は本発明の実施形態を示す一般的な情報処理装置（コンピューター）を用いたシステムのブロック構成図である。なお、特に断らない限り、本発明の機能が実行されるのであれば、単体の機能であっても、複数の機器からなるシステムであっても、ネットワークを介して接続がなされ処理が行われるシステムであっても、本発明を適用できることは言うまでもない。
【００１２】
ＣＰＵ１０１は主記憶装置１０２のＲＯＭ１０２１あるいはＲＡＭ１０２２あるいは補助記憶装置１０５に格納されたプログラムに従って情報処理装置全体を制御する。ＲＡＭ１０２２はＣＰＵ１０１が各種処理を行う際のワークエリアとしても使用される。補助記憶装置１０５はアプリケーション１０５１、プリンタードライバー１０５２、オペレーティングシステム（ＯＳ）１０５３等を記録する。キーボード１０３１やマウス・タッチパネルなどに代表されるポインティングデバイス１０３２などの入力機器は、入力Ｉ／Ｆ１０３を通じて、ユーザーがコンピューターに対して各種指示を与えるためのデバイスである。出力Ｉ／Ｆ１０４は、データを外部に出力するためのインターフェースであり、モニタ１０４１やプリンター１０４２などの出力機器に対してデータを出力する。プリンター１０４２とは直接接続されるローカルＩ／Ｏのみならず、通信Ｉ／Ｆ１０６を通じて接続されるネットワーク１０６１を通して接続されていてもよい。また、１０７は共通データシステムバスで、Ｉ／Ｆやモジュール間でデータのやりとりを行う。
【００１３】
なお、本発明のフローチャートの各ステップは、ＣＰＵが、フローチャートに関するプログラムをメモリから読み出して実行することで実現される。また、プリンター１０４２は、印刷機能のみを持った印刷装置でも良いし、ＦＡＸ機能のみを持ったＦＡＸ装置でも良いし、スキャン機能および印刷機能など複数の機能を持った複合機でも良い。なお、プリンター１０４２を画像処理装置と呼ぶこともある。
【００１４】
図２は本発明の実施の形態におけるネットワーク１０６１の環境を簡略した図である。
【００１５】
印刷される文書や画像を作成する単体もしくは複数のクライアントコンピュータ２０１／２０２がネットワークに接続されている。また、クライアントコンピュータのユーザーやプリンターを管理するサーバーコンピュータ２０３が接続されていることもある。単体もしくは複数のプリンター２０５および１０４２がネットワークに接続されている。
【００１６】
なお、プリンター２０５は、物理的にネットワークに接続されているが、実際には使用できないオフライン状態であることを示している。ネットワークにはＰＡＮ（Ｐｅｒｓｏｎａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＭＡＮ（Ｍｅｔｒｏｐｏｌｉｔａｎ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などの小規模から大規模までのネットワークがあり、これらの機器がすべてのネットワークに接続されている。クラウドなど、サーバーやプリンターがインターネットを越えて接続されていてもかまわない。つまり、情報処理装置とは、他の装置（例えば、プリンター等の画像処理装置）と接続可能な装置である。
【００１７】
図３はＶ４プリンタードライバー印刷システムのブロック構成図である。
【００１８】
Ｖ４プリンタードライバー印刷システムはＸＭＬ  Ｐａｐｅｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（以下、ＸＰＳと略す）と呼ばれるファイルフォーマットをスプールデータとして使用し、印刷を行うシステムである。図３におけるソフトウェアコンポーネントである１０５１、１０５２、１０５３は、補助記憶装置１０５に記憶されており、実行時にＲＡＭ１０２２にロードされ、ＣＰＵ１０１によって実行される。Ｖ４プリンタードライバー印刷システムは、オペレーティングシステム１０５３上で動作している。
【００１９】
プリントマネージャ３１８、ＧＤＩｔｏＸＰＳ変換モジュール３０７、フィルターパイプラインマネージャ３１２はオペレーティングシステム１０５３に含まれるモジュールである。ＧＤＩｔｏＸＰＳ変換モジュール３０７、フィルターパイプラインマネージャ３１２は、プリンタードライバー１０５２に含まれているが、オペレーティングシステム１０５３から提供されているプリンタードライバー１０５２専用のモジュールである。
【００２０】
プリンタードライバー１０５２とフィルターパイプラインマネージャ３１２の各フィルターである３１３から３１５と、デバイスアプリ３１０は、図１の補助記憶装置１０５にプリンタードライバー１０５２として格納されている。なお、デバイスアプリ３１０は、プリンタードライバーのインストールに連動して、ネットワークを介して自動的にインストールされる。
【００２１】
ＧＤＩ印刷アプリケーション３０１（以下、ＧＤＩアプリと略す）とＸＰＳ印刷アプリケーション３０２（以下、ＸＰＳアプリと略す）は、図１の補助記憶装置１０５にアプリケーション１０５１として格納されている。ＧＤＩアプリ３０１は、オペレーティングシステム１０５３が用意するＧＤＩ（Ｇｒａｐｈｉｃｓ  Ｄｅｖｉｃｅ  Ｉｎｔｅｒｆａｃｅ）を使用して印刷を行うアプリである。ＸＰＳアプリ３０２は、ＸＰＳスプールファイル３０６を直接使用して印刷を行うアプリである。ユーザーはキーボード１０３１やタッチパネル／マウス１０３２などといった入力装置を使用して、出力装置のモニタ１０４１に映し出されたＧＤＩアプリ３０１、もしくはＸＰＳアプリ３０２から印刷処理を指示する。なお、印刷処理は「プリンターの選択」、「印刷設定データの作成」、「描画データの変換」と３つの処理を順番に行うことで実現される。以下、印刷処理の流れを説明する。
【００２２】
まず、ユーザーは、印刷したいプリンター１０４２を選択する。ユーザーから見るとプリンター１０４２の選択は、印刷を実行するプリンター１０４２に対応したプリンタードライバー１０５２を選択することと同じである。
【００２３】
次に印刷設定データが作成される。印刷設定データが作成される場合、アプリケーション１０５１が印刷設定データ用のメモリ領域をＲＡＭ１０２２に確保する。そして、アプリケーション１０５１は、プリンタードライバー１０５２のコンフィグモジュール３０８を呼び出して、印刷設定データを作成して格納する。ＧＤＩアプリ３０１では印刷設定データとしてバイナリのＤＥＶＭＯＤＥ構造体３０３を用い、ＸＰＳアプリ３０２ではマークアップ言語のＸＭＬ（ｅＸｔｅｎｓｉｖｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）で記載されたプリントチケット３０４を用いる。ＤＥＶＭＯＤＥ構造体３０３は、オペレーティングシステムが定義する標準領域とプリンタードライバーが独自で定義する拡張領域を持つ。
【００２４】
プリントチケット３０４は、ＸＭＬ形式で記述された印刷設定データで、標準領域と拡張領域は名前空間によって記載が分かれている。印刷設定データには機種固有の情報も含まれているので、コンフィグモジュール３０８は、機種依存ファイル３０９を利用して、印刷設定データを作成する。アプリケーション１０５１は、ＤＥＶＭＯＤＥ構造体３０３もしくはプリントチケット３０４の内容を書き換えることで印刷設定を変更する。印刷設定データには、出力する用紙サイズの情報（例えば「Ａ４」）、両面印刷の指定、カラーと白黒、給紙段の指定など、印刷に必要な設定値が含まれる。印刷設定データの標準領域は仕様が外部に公開されているので、アプリケーションが直接変更できる。プリンター１０４２に依存した拡張領域は、プリンタードライバー１０５２だけが詳細な仕様を把握しているので、通常はデバイスアプリ３１０が持つユーザーインターフェースを使ってユーザーが設定する。ＤＥＶＭＯＤＥ構造体３０３と異なり、プリントチケット３０４は設定値がＸＭＬ形式で記述されているので、ＸＰＳアプリ３０２がすべての設定値を直接変更して書き換えることは可能ではある。しかし拡張領域は、プリンタードライバーごとの独自定義であるため詳細な仕様まではわからず、プリンター１０４２によって仕様が異なることから、デバイスアプリ３１０のユーザーインターフェースを使って設定値を変更するほうが容易である。
【００２５】
デバイスアプリ３１０は、プリンタードライバー１０５２の一種ではあるが、プリンタードライバーとは別のプログラムとしてインストールされる。デバイスアプリ３１０は、プリンタードライバーと、プリントチケット３０４を使用して印刷設定データをやりとりする。デバイスアプリ３１０は、印刷設定データの無効な組み合わせを解決して、正しい印刷設定データを作成するための、コンフリクトエンジン３１０１を保持する。印刷設定データの無効な組み合わせは、機種依存ファイル３０９に記載されているので、ユーザーインターフェースを表示する前に、コンフリクトエンジン３１０１は、機種依存ファイル３０９を読み込む。プリンタードライバー１０５２は、ユーザーインターフェースの設定に従い、ＤＥＶＭＯＤＥ構造体３０３もしくはプリントチケット３０４のプリンター１０４２に依存した設定を変更する。印刷設定データは文書を印刷するたびに必要となるので、印刷を実行するたびに作成される。プリンター１０４２のオプション機器や、ユーザーごとの環境設定などは、プリンタードライバーがオペレーティングシステムのレジストリデータベース３０５、もしくはプロパティバッグ３１７に保存される。印刷設定データのデフォルト値はオペレーティングシステムのプリントマネージャ３１８が、レジストリデータベース３０５に保存する。レジストリデータベース３０５や、プロパティバッグ３１７は、補助記憶装置１０５に保存される。
【００２６】
最後に描画データの変換を行う。印刷設定データが確定したら、ユーザーはアプリケーションから印刷処理を指示する。ＧＤＩアプリ３０１から印刷する場合は、ＧＤＩｔｏＸＰＳ変換モジュール３０７に描画データが送られ、ＸＰＳスプールファイル３０６が作成される。このときＧＤＩｔｏＸＰＳ変換モジュール３０７はコンフィグモジュール３０８を呼び出し、印刷設定データをＤＥＶＭＯＤＥ構造体３０３からプリントチケット３０４に変換する。変換する際には、ＤＥＶＭＯＤＥ−プリントチケット変換モジュール３０８１が使用される。ＤＥＶＭＯＤＥ−プリントチケット変換モジュール３０８１は、プロパティバッグ３１７の情報を読み書きできるので、デバイスアプリ３１０が保存したデータを参照して変換することもできる。ＸＰＳアプリ３０２から印刷する場合は、ＸＰＳスプールファイル３０６をＸＰＳアプリ自身が生成するのと、オペレーティングシステムがＸＰＳアプリからの描画命令に応じてＸＰＳスプールファイル３０６を生成するのと２通りの方法がある。どちらの方法であっても、印刷の途中でＸＰＳスプールファイル３０６が生成される。
【００２７】
このようにＶ４プリンタードライバー印刷システムは、印刷時に必ず描画データに基づくＸＰＳスプールファイル３０６を生成する点が特徴である。ＸＰＳスプールファイル３０６が生成されたら、プリントフィルタパイプライン３１１に処理が渡される。プリントフィルタパイプライン３１１は複数のフィルターを通すことで印刷が行われる仕組みで、フィルタコンフィギュレーションファイル３１６がフィルターの数や順番を制御する。プリントフィルタパイプライン３１１で動作するフィルターパイプラインマネージャ３１２はフィルタコンフィギュレーションファイル３１６に従って、この実施例では通信フィルター３１３、レイアウトフィルター３１４、レンダラーフィルター３１５の順に処理を行う。フィルターはプリンタードライバー１０５２の構成によって、数や種類が異なる。例えば、図３の３つのフィルターに加えて、更に、印刷ジョブを暗号化するための暗号化フィルターが含まれていても良い。
【００２８】
印刷処理はＸＰＳスプールファイル３０６をフィルターに受け渡すことで行われ、フィルターがそれぞれＸＰＳスプールファイル３０６を加工し次のフィルターに渡していくことで処理が進む。最終的にはＸＰＳスプールファイル３０６が印刷ジョブに変換されて、プリンターに送信される。
【００２９】
なお、プリンターは、印刷ジョブを解釈可能であり、送信された印刷ジョブを解釈することで印刷ジョブに基づく印刷処理を実行する。それぞれのフィルターは独自のデータをプロパティバッグ３１７に保存することができる。
【００３０】
また、それぞれのフィルターは、プロパティバッグ３１７から、オペレーティングシステム１０５３の情報や、他のフィルターのデータを取得することもできる。通信フィルター３１３では、印刷時に必要な情報をプリンターから取得し、プロパティバッグ３１７に保存しておく。レイアウトフィルター３１４では倍率の変更や製本の面付けレイアウトやスタンプなどレイアウトに関する処理を行う。レイアウトフィルター３１４では、ＸＰＳスプールファイル３０６に含まれるプリントチケット３０４に従って動作する。そのため、たとえば面付けの設定がプリントチケット３０４に存在しないときは、レイアウトフィルター３１４は何も動作せずスルーして、次のフィルターにＸＰＳスプールファイル３０６をそのまま渡す。
【００３１】
レンダラーフィルター３１５は、入力されたＸＰＳスプールファイル３０６をレンダリングしてページ記述言語（以下、ＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）と略す）に変換する。また、レンダラーフィルター３１５は、プリントチケット３０４の印刷設定データのうち標準領域の設定を、プリンタジョブ言語（以下、ＰＪＬ（Ｐｒｉｎｔｅｒ  Ｊｏｂ  Ｌａｎｇｕａｇｅ）と略する）に変換する。レンダラーフィルター３１５は、ＰＤＬとＰＪＬをまとめて印刷ジョブとして、次のフィルターにストリームデータとして渡す。レンダラーフィルター３１５は、変換したＰＪＬと渡されたＰＤＬとＰＪＬをまとめて印刷ジョブとして、フィルターパイプラインマネージャ３１２に渡す。印刷ジョブは、印刷処理のスケジュール管理を行うプリントマネージャ３１８に送られ、キュー（待ち行列）に印刷ジョブが次々と登録される。プリントマネージャ３１８は、プリンター１０４２と通信してプリンター１０４２が印刷できる状態になり次第、キューに登録した順にポートモニター３１９を通して印刷ジョブを送信する。
【００３２】
このようにして、描画データをおよび印刷設定データを印刷ジョブに変換することがプリンタードライバーの主な役目であり、情報処理装置での印刷が実施される。
【００３３】
なお、本実施例では、印刷処理を用いて説明しているためプリンタードライバーと記載しているが、ＦＡＸ送信処理の際にも本発明を適用できる。この場合は、レンダラーフィルター３１５の代わりにＦＡＸデータを作成するＦＡＸフィルターを搭載して、ＦＡＸ機器に送信するＦＡＸドライバーとなる。
【００３４】
図４は機種依存ファイル３０９の１つであるＧＰＤの例を示したものである。
【００３５】
機種依存ファイル３０９は、印刷設定データを構成する機能（Ｆｅａｔｕｒｅ）の定義と、選択された印刷設定の無効な組み合わせ（ＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎ）を記載する。機能にはそれぞれ名称をつけることができ、図４では用紙サイズのＰａｐｅｒＳｉｚｅ、印刷の向きのＯｒｉｅｎｔａｔｉｏｎ、ステイプルのＳｔａｐｌｉｎｇがそれぞれ定義されている。機能には設定としての選択肢（Ｏｐｔｉｏｎ）が定義されており、選択肢の中からどれか１つを選択することで、印刷設定データが確定する。初期状態の印刷設定データ（ＤｅｆａｕｌｔＯｐｔｉｏｎ）を定義することも可能で、機種依存ファイル３０９を読み込んで何もしていない状態の印刷設定データを明示的に決めることも可能である。
【００３６】
機能には優先順位（ＣｏｎｆｌｉｃｔＰｒｉｏｒｉｔｙ）を設けることができる。機能の優先順位は、数値の小さいものほど高く、数値が大きくなるにつれて優先順位が低くなる。印刷設定データの無効な組み合わせが発生したときは、優先順位が低い機能の選択肢が他の選択肢に丸められることで、正しい印刷設定データが作成される。無効な組み合わせ（ＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎ）は、機能と設定である選択肢の複数の組からなるリストとして定義する。一対一の組み合わせだけでなく、複数の組み合わせも定義することができ、その場合は記載されたすべての設定が一致するときに無効であることを意味する。図４では、用紙サイズ（ＰａｐｅｒＳｉｚｅ）と印刷の向き（Ｏｒｉｅｎｔａｔｉｏｎ）とステイプル（Ｓｔａｐｌｉｎｇ）の３つのＦｅａｔｕｒｅを使用して、用紙サイズＡ３との無効な組み合わせ、カスタム用紙との無効な組み合わせがそれぞれ記載されている。
【００３７】
以下、デバイスアプリ３１０がコンフリクトエンジン３１０１と機種依存ファイル３０９のＧＰＤファイル（図４）を使って、動的に機能を追加する方法を、フローチャートを使用して説明する。
【００３８】
ユーザーは印刷に必要な印刷設定を作成するために、アプリケーション１０５１からデバイスアプリ３１０を起動してユーザーインターフェースを開く。図５のフローチャートは、デバイスアプリ３１０がユーザーインターフェースを起動するためのシーケンスである。まず、デバイスアプリ３１０は、コンフリクトエンジン３１０１を初期化する（Ｓ５０１）。次にデバイスアプリ３１０は、コンフリクトエンジン３１０１に、機種依存ファイル３０９のＧＰＤファイルを渡す（Ｓ５０２）。コンフリクトエンジン３１０１は、渡されたＧＰＤファイルを読み込んで解釈し、印刷設定を作成する。コンフリクトエンジン３１０１による印刷設定が作成されたら、デバイスアプリ３１０は、ユーザーインターフェースを構築し（Ｓ５０３）、印刷設定を適用する。このようにして、デバイスアプリ３１０において、ユーザーが印刷設定を作成するためのユーザーインターフェースが表示される（図１０）。
【００３９】
次に、動的に機能を追加する例として、ユーザー定義用紙の追加の方法を、図６のフローチャートを使用して説明する。
【００４０】
デバイスアプリ３１０は、ユーザーがユーザー定義用紙ダイアログ（図１１）の登録ボタンを押して、ユーザー定義用紙の作成処理に入ることを知ると、ユーザーによって入力された幅と高さの値を元に、レジストリデータベース３０５に値を保存する（Ｓ６０１）。次にデバイスアプリ３１０は、コンフリクトエンジン３１０１に対して、ＰａｐｅｒＳｉｚｅのＦｅａｔｕｒｅにユーザー定義用紙のＯｐｔｉｏｎを追加するように指示する（Ｓ６０２）。ここでは、ユーザー定義用紙のＯｐｔｉｏｎの名称として“ＵｓｅｒＦｏｒｍ１１９”を指定する。オペレーティングシステム１０５３のレジストリデータベース３０５では、用紙サイズのリストが用紙ＩＤとともに管理されており、標準では定型用紙として１１８まで登録されている。そこで、新しいユーザー定義用紙を作成する際に、現在の用紙ＩＤの最大値に１つ足した値の１１９を利用して名称をつけている。このように用紙サイズの用紙ＩＤを利用して名称を決定している理由は、複数のユーザー定義用紙が登録された際に、区別したいからである。コンフリクトエンジン３１０１は、指定された名称を元に、内部でＦｅａｔｕｒｅにＯｐｔｉｏｎを追加する。
【００４１】
次にデバイスアプリ３１０は、ユーザーによって入力されたユーザー定義用紙の幅と高さが、プリンタードライバーが持っている定型用紙の幅と高さの値と一致しているか、もしくは０．２５ｍｍ以内にあるかどうかを調査する（Ｓ６０３）。これは、プリンター１０４２の仕様として、定型用紙サイズに近い幅と高さを持ったユーザー定義用紙は、該当する定型用紙の無効な組み合わせと同じ無効な組み合わせを持つためである。もし、ユーザー定義用紙の幅と高さが近い値の定型用紙サイズがあれば、デバイスアプリ３１０は、コンフリクトエンジン３１０１に対して、最も近い値を持つ定型用紙サイズのＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎを複製するように依頼する（Ｓ６０５）。コンフリクトエンジン３１０１に対してこの依頼処理は、ＬｉｎｋＯｐｔｉｏｎＲｕｌｅｓ（）というコンフリクトエンジンの関数を通じて行われる。もし、定型用紙サイズに近い値がなければ、デバイスアプリ３１０は、コンフリクトエンジン３１０１に対して、カスタム用紙のＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎを複製するように依頼する（Ｓ６０４）。このようにして、動的に追加するユーザー定義用紙の無効な組み合わせを、幅と高さに応じて最適な無効な組み合わせを設定できる。
【００４２】
図７のフローチャートは、コンフリクトエンジン３１０１のＬｉｎｋＯｐｔｉｏｎＲｕｌｅｓ（）の関数の動作を記載したものである。
【００４３】
デバイスアプリ３１０は、前述のフローチャートのＳ６０４やＳ６０５で、コンフリクトエンジン３１０１の関数であるＬｉｎｋＯｐｔｉｏｎＲｕｌｅｓ（）を呼び出す。デバイスアプリ３１０は、ＬｉｎｋＯｐｔｉｏｎＲｕｌｅｓ（）を呼び出す際に、複製元のＦｅａｔｕｒｅ、Ｏｐｔｉｏｎと、動的に追加した機能のＦｅａｔｕｒｅとＯｐｔｉｏｎもあわせて引数として提供する。ここでは、追加したユーザー定義用紙のＵｓｅｒＦｏｒｍ１１９は、Ａ３の定型用紙サイズに近い幅と高さを持った用紙だとする。
【００４４】
まず、コンフリクトエンジン３１０１は、複製元として指定されたＦｅａｔｕｒｅ．Ｏｐｔｉｏｎを含むＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎを、ＧＰＤの中から列挙する（Ｓ７０１）。ここでは、ＰａｐｅｒＳｉｚｅ．Ａ３を含むすべてのＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎを列挙する。すべて列挙したら、コンフリクトエンジン３１０１は、列挙したＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎを複製する（Ｓ７０２）。
【００４５】
次に、コンフリクトエンジン３１０１は、複製元として指定されたＦｅａｔｕｒｅ．Ｏｐｔｉｏｎを、動的に追加したＦｅａｔｕｒｅ．Ｏｐｔｉｏｎで置き換える。ここでは、コンフリクトエンジン３１０１は、ＰａｐｅｒＳｉｚｅ．Ａ３を、ＰａｐｅｒＳｉｚｅ．ＵｓｅｒＦｏｒｍ１１９で置き換える（Ｓ７０３）。
【００４６】
すべてのＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎの置き換えが完了したら、コンフリクトエンジン３１０１は、複製したＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎを新しいＩｎｖａｌｉｄＣｏｍｂｉｎａｔｉｏｎとして登録する（Ｓ７０４）。
【００４７】
このようにして出来上がったＧＰＤが、図９になる。動的に追加されたＵｓｅｒＦｏｒｍ１１９が、Ａ３と同じ無効な組み合わせを持つことが確認できる。
【００４８】
以上のように、動的に追加した機能について、無効な組み合わせを他の機能から複製して置き換えることで、機能の設定値に応じた無効な組み合わせを作りだすことができる。
【実施例２】
【００４９】
実施例１では、ユーザー定義用紙を追加する際に、デバイスアプリ３１０とコンフリクトエンジン３１０１が、無効な組み合わせを複製していた。プリンター１０４２のパネル上で登録して作成するユーザー設定用紙タイプについても、同じように適用することができる。
【００５０】
図８のフローチャートが、ユーザー設定用紙タイプで無効な組み合わせを複製する際の動作フローである。
【００５１】
まず、デバイスアプリ３１０は、ユーザーがユーザーインターフェース上にある用紙情報取得のボタンを押すと、プリンター１０４２と通信してユーザー設定用紙タイプの情報を取得する（Ｓ８０１）。
【００５２】
次にデバイスアプリ３１０は、コンフリクトエンジン３１０１に対して、ＭｅｄｉａＴｙｐｅのＦｅａｔｕｒｅにＯｐｔｉｏｎを追加する（Ｓ８０２）。ここでは、プリンター１０４２から取得したユーザー設定用紙タイプのＯｐｔｉｏｎの名称として、ＵｓｅｒＰａｐｅｒ００１を使用する。他に複数のユーザー設定用紙タイプがあれば、００２、００３と数字が繰り上がっていく。定型の用紙タイプは以下の表Ａのように、坪量・特徴・表面性・色といった属性データを持っている。
【００５３】
【表１】
2017033050.tif 000003
【００５４】
ユーザー設定用紙タイプも定型の用紙タイプと同じ属性データを持っている。
【００５５】
そこで、デバイスアプリ３１０は、ユーザー設定用紙タイプの坪量・特徴・表面性・色が、表Ａにある定型の用紙タイプと一致するかどうかを調査する（Ｓ８０３）。
【００５６】
合致する定型の用紙タイプがあれば、デバイスアプリ３１０はコンフリクトエンジン３１０１に対して、定型の用紙タイプの無効な組み合わせを複製するように、依頼する（Ｓ８０５）。合致するものがなければ、デバイスアプリ３１０はコンフリクトエンジン３１０１に対して、普通紙の無効な組み合わせを複製するように、依頼する（Ｓ８０４）。
【００５７】
このようにして、動的に追加するユーザー設定用紙タイプも、属性データに応じてそれぞれ適した無効な組み合わせを適用することができる。
【符号の説明】
【００５８】
３０９  機種依存ファイル、３１０  デバイスアプリ、３１０１  コンフリクトエンジン
【図１】
2017033050.tif 000004
【図２】
2017033050.tif 000005
【図３】
2017033050.tif 000006
【図４】
2017033050.tif 000007
【図５】
2017033050.tif 000008
【図６】
2017033050.tif 000009
【図７】
2017033050.tif 000010
【図８】
2017033050.tif 000011
【図９】
2017033050.tif 000012
【図１０】
2017033050.tif 000013
【図１１】
2017033050.tif 000014