(57)【要約】【課題】  モノリシックプリンタドライバに対して、そのソースコードを書き換えて再コンパイルし、再インストールすることなく、後から機能の追加を実現することができ、かつ印刷処理にかかる時間の遅延を最小限にすることができるプログラムを提供する。【解決手段】  このプログラムは、印刷に際して実行すべき処理以外の処理を実行させる機能をプリンタドライバに追加することを可能にするコンピュータ可読な機能追加プログラムであり、印刷対象の情報を出力する出力元からの呼び出しを受け、その出力元から印刷対象の情報を受け取るステップと、プリンタドライバを呼び出し、当該プリンタドライバへ印刷対象の情報を送信するステップと、印刷対象の情報を送信する処理とは非同期に、印刷対象の情報を使用してその機能に基づく処理を実行するステップとをコンピュータに実行させるものである。【選択図】図４
2013168112.tif 000002
【特許請求の範囲】
【請求項１】
印刷に際して実行すべき処理以外の処理を実行させる機能をプリンタドライバに追加することを可能にするコンピュータ可読な機能追加プログラムであって、前記機能追加プログラムは、
印刷対象の情報を出力する出力元からの呼び出しを受け、前記出力元から前記印刷対象の情報を受け取るステップと、
前記プリンタドライバを呼び出し、当該プリンタドライバへ前記印刷対象の情報を送信するステップと、
前記印刷対象の情報を送信する処理とは非同期に、前記印刷対象の情報を使用して前記機能に基づく処理を実行するステップとをコンピュータに実行させる、機能追加プログラム。
【請求項２】
前記機能追加プログラムは、前記出力元と前記プリンタドライバとの間に配置され、前記出力元が呼び出す前記プリンタドライバがもつ関数と同じ関数を有することにより、前記出力元からの呼び出しを受けることを可能にし、前記プリンタドライバがもつ関数を呼び出すことにより、前記プリンタドライバを呼び出すことを可能にする、請求項１に記載の機能追加プログラム。
【請求項３】
前記プリンタドライバがもつ関数へのアドレスを取得し、前記アドレスを参照して前記プリンタドライバがもつ関数を呼び出すステップをさらに実行させる、請求項２に記載の機能追加プログラム。
【請求項４】
前記印刷対象の情報を使用して当該印刷に際して実行すべき処理を実行するステップをさらに実行させ、前記印刷対象の情報を送信するステップでは、当該処理の実行結果を含む前記印刷対象の情報を送信する、請求項１〜３のいずれか１項に記載の機能追加プログラム。
【請求項５】
前記出力元からの機能についての問い合わせを受けて、前記プリンタドライバに問い合わせ、前記プリンタドライバがもつ機能に関する情報を取得するステップと、取得した前記機能に関する情報に代えて、追加した前記機能に関する情報を前記出力元へ返信するステップとをさらに実行させる、請求項１〜４のいずれか１項に記載の機能追加プログラム。
【請求項６】
前記プリンタドライバがもつ機能が、画像のみを描画する機能である場合、前記機能追加プログラムがもつ機能は、文字と画像とを描画する機能、もしくは図形と画像とを描画する機能、または文字と図形と画像とを描画する機能である、請求項１〜５のいずれか１項に記載の機能追加プログラム。
【請求項７】
前記印刷に際して実行すべき処理以外の処理は、前記印刷対象の情報をログとして出力する処理、ネットワークを介して外部と通信する処理、文字列を検索する処理のいずれか、またはこれらの組み合わせである、請求項１〜６のいずれか１項に記載の機能追加プログラム。
【請求項８】
印刷に際して実行すべき処理以外の処理を実行させる機能をプリンタドライバに追加するために機能追加プログラムを実装し、追加した前記機能を利用可能にした印刷制御システムであって、前記機能追加プログラムを実行することにより前記印刷制御システムを、
印刷対象の情報を出力する出力元からの呼び出しを受け、前記出力元から前記印刷対象の情報を受け取る第１処理部と、
前記プリンタドライバを呼び出し、当該プリンタドライバへ前記印刷対象の情報を送信する第２処理部と、
前記印刷対象の情報を送信する処理とは非同期に、前記印刷対象の情報を使用して当該機能に基づく処理を実行する非同期処理部として機能させる、印刷制御システム。
【請求項９】
前記印刷対象の情報を使用して当該印刷に際して実行すべき処理を実行する第３処理部としてさらに機能させ、前記第２処理部は、当該処理の実行結果を含む前記印刷対象の情報を送信する、請求項８に記載の印刷制御システム。
【請求項１０】
前記第２処理部は、前記出力元からの機能についての問い合わせを受けて、前記プリンタドライバに問い合わせ、前記プリンタドライバがもつ機能に関する情報を取得し、前記第１処理部は、取得した前記機能に関する情報に代えて、追加する前記機能に関する情報を前記出力元へ返信する、請求項８または９に記載の印刷制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モノリシックプリンタドライバに対して内容の変更を行うことなく、後からそのプリンタドライバに機能を追加することを可能にするプログラム、およびそのプログラムを実装して機能を追加し、それを利用できるようにした印刷制御システムに関する。
【背景技術】
【０００２】
過去機種のプリンタに対して提供されているプリンタドライバの多くは、モノリシックプリンタドライバである。モノリシックプリンタドライバは、全体が１つのモジュールで構成されたプリンタドライバである。
【０００３】
市場では、まだ、このような過去機種のプリンタも数多く使用されており、そのプリンタで印刷を行うためにモノリシックプリンタドライバも数多く使用されている。このモノリシックプリンタドライバに対して機能を追加する場合は、ソースコードを書き換えて再コンパイルし、再インストールすることが必要とされている。
【０００４】
例えば、性能を重視するためにログを出力しないプリンタドライバに対して、障害解析を行う必要が出てきたときに、後にログを出力する機能を追加することが考えられる。従来の技術では、そのログを出力する機能を追加するためだけに、ソースコードを書き換えて再コンパイルし、再インストールしなければならない。このような方法では、追加する機能の割に手間がかかり、コスト面でも望ましいとは言えない。
【０００５】
ところで、機能の追加を簡単に行うことができるプリンタドライバとして、プラグイン機能を備えたプリンタドライバが提案されている（例えば、特許文献１参照）。プラグイン機能とは、プリンタドライバの機能を拡張するために、再コンパイルや再インストールを行うことなく、プラグインとしてプリンタドライバに機能を追加する技術である。このプラグイン機能を備えたプリンタドライバを実装することで、プリンタドライバを変更することなく、後から機能を追加することができるようになる。
【０００６】
また、オペレーティングシステムにインタフェースするデバイスドライバとして、１つ以上のドライバプラグインモジュールを検出し、検出されたドライバプラグインモジュールに対応する情報をオペレーティングシステムに提供し、その後、検出された各ドライバプラグインモジュールの機能を動的にアクセスする構成とされたデバイスドライバも提案されている（特許文献２参照）。
【０００７】
このデバイスドライバを実装することにより、デバイスドライバを再設計、再コンパイルおよび再試験することなく、このデバイスドライバにより検出されたドライバプラグインモジュールの数や型に基づき動的に機能を拡張することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１および２に記載されたドライバを用い、拡張した機能を使用するためには、既にモノリシックドライバが実装され、それが使用されている装置においては、その装置の機種に対応したプラグイン機能を備えたドライバを構成から作り直してインストールし直さなければならない。例えば、ログを出力する機能のみを追加したいときに、この機能を追加するためだけに、ドライバを作り直して再インストールするのでは手間がかかり、コスト面でも望ましくはない。このようなドライバの作成には、ソースコードを書き換える以上に時間、労力、コストがかかるからである。
【０００９】
また、機能が追加されると、印刷に要する時間は、その追加した機能による処理時間だけ長くなる。新たに追加する機能には、モノリシックプリンタドライバが画像のみの描画機能を備える場合、文字および画像の描画機能のように、印刷に直接関係する機能もあるが、上記のログを出力する機能のように、印刷に直接関係のない機能もある。追加された機能が、印刷に直接関係のない機能である場合、印刷処理に関係なくても、その機能による処理が終了するまで、印刷処理が待たされることになる。追加する機能によっては、その処理が終了するまでに相当の時間を要するものもあり、これでは、生産性を大きく低下させることになってしまう。
【００１０】
したがって、モノリシックプリンタドライバに対して、そのソースコードを書き換えて再コンパイルし、再インストールすることなく、後から機能の追加を実現することができ、かつ印刷処理にかかる時間の遅延を最小限にすることができるプログラムやシステムの提供が望まれていた。
【課題を解決するための手段】
【００１１】
本発明は、上記課題に鑑み、印刷に際して実行すべき処理以外の処理を実行させる機能をプリンタドライバに追加することを可能にするコンピュータ可読なプログラムであって、このプログラムは、印刷対象の情報を出力する出力元からの呼び出しを受け、その出力元から印刷対象の情報を受け取るステップと、プリンタドライバを呼び出し、受け取った印刷対象の情報をプリンタドライバへ送信するステップと、印刷対象の情報をプリンタドライバへ送信する処理とは非同期に、受け取った印刷対象の情報を使用して当該機能に基づく処理を実行するステップとをコンピュータに実行させる、プログラムが提供される。
【図面の簡単な説明】
【００１２】
【図１】印刷システムの全体構成図。
【図２】印刷制御システムのソフトウェア構成を示した図。
【図３】各ソフトウェアのＤＬＬ名を例示した図。
【図４】ログを出力する処理の流れを示したフローチャート。
【図５】ログを出力する処理の流れを示したシーケンス図。
【図６】画像データのみ描画可能なプリンタドライバに対し、図形や文字も描画可能な機能と、ログを出力することが可能な機能とをもつ機能追加プログラムを追加した場合に実行される処理の流れを示したフローチャート。
【図７】描画ＤＤＩをサポートしていないプリンタドライバに対し、文字の描画が可能な機能と、ログを出力することが可能な機能とをもつ機能追加プログラムを追加した場合に実行される処理の流れを示したシーケンス図。
【図８】印刷制御システムの機能ブロック図。
【発明を実施するための形態】
【００１３】
図１は、印刷を実行するための印刷システムの全体構成図である。この印刷システムは、印刷を実行する画像形成装置としてのプリンタ１０と、そのプリンタ１０の制御を行う印刷制御システムとしてのＰＣ１１とを含み、プリンタ１０とＰＣ１１とがネットワーク１２を介して接続された構成とされている。
【００１４】
図１では、プリンタ１０とＰＣ１１とを１台ずつ備える構成とされているが、２台以上のプリンタおよびＰＣを含んでいてもよく、また、プリンタ１０とＰＣ１１とがケーブルにより接続された構成であってもよい。また、複数のＰＣを備える場合には、プリンタを共有することができるように制御を行うプリンタサーバを設けることができる。
【００１５】
プリンタ１０は、ＰＣ１１からの印刷命令を受けて印刷を実行する。プリンタ１０としては、レーザプリンタやインクジェットプリンタを採用することができ、印刷機能のほか、スキャナ機能やＦＡＸ機能等の複数の機能を備えるＭＦＰ(Multi Function Peripheral)を採用することも可能である。プリンタ１０は、印刷命令に基づき、印刷を実行するエンジンと、そのエンジンを制御するコントローラと、ネットワーク１２に接続するためのネットワークＩ／Ｆとを含んで構成される。
【００１６】
ＰＣ１１は、印刷すべき文書等を作成するためのアプリケーションと、作成した文書等のファイルをプリンタ１０が解釈可能な印刷命令へ変換するプリンタドライバと、アプリケーションにより作成した文書等のファイルをプリンタドライバへ送る処理を含む、ＰＣ１１全体の制御を行うＯＳと、その他のソフトウェアおよびデータを記憶するための記憶装置と、アプリケーション、プリンタドライバ、ＯＳおよびその他のソフトウェアを実行するＣＰＵと、ネットワーク１２に接続するためのネットワークＩ／Ｆと、作成した文書等を表示するための表示装置と、文字等の入力を行うキーボードや表示装置の画面上に表示されたアイコン等を選択するマウスといった入力装置とを含んで構成される。
【００１７】
ここで、ＰＣ１１に実装されるプリンタドライバは、プラグイン機能を備えておらず、そのソースコードを書き換えて再コンパイルし、再インストールしなければ、新たな機能の追加を行うことができない、過去機種で採用されていたモノリシックプリンタドライバである。以下、モノリシックプリンタドライバとして、Ｗｉｎｄｏｗｓ（登録商標）のプリントアーキテクチャを用いたモノリシックプリンタドライバを実装するものとして詳細に説明する。
【００１８】
図２は、印刷制御システムとしてのＰＣ１１のソフトウェア構成を示した図である。ＰＣ１１は、上述したアプリケーション２０と、ＯＳ２１と、プリンタドライバ２２と、プリンタ１０との間の通信を実現するための通信モジュール２３とを含む。さらに、ＰＣ１１は、追加の機能を実現するための機能追加プログラムとして、非同期モジュール２４と、ＯＳ２１およびプリンタドライバ２２と非同期モジュール２４との間のやりとりを実現するための中間モジュール２５とを含んで構成される。なお、機能追加プログラムは、機能を追加するために、後から追加されるプログラムであり、アプリケーション２０およびＯＳ２１は、印刷対象の情報を、機能追加プログラムに対して出力する出力元として機能する。
【００１９】
いずれのソフトウェアも、記憶装置に記憶されており、ＣＰＵによりその記憶装置から読み出されて実行される。そして、その実行により各処理を行うが、説明を容易にするために、各ソフトウェアが各処理を実行するものとして以下に説明する。
【００２０】
アプリケーション２０は、文書ファイル等を生成するために使用される。ユーザは、アプリケーション２０を使用して印刷対象の情報を生成し、出力することができるが、アプリケーション２０が出力した印刷対象の情報は、ＯＳ２１を介してプリンタドライバ２２へ送られることから、ＯＳ２１に渡される。
【００２１】
印刷対象の情報には、文字、図形、画像等のデータのほか、印刷設定情報として、フォント、モノクロ／カラー、印刷枚数、集約印刷の有無、両面印刷の有無、用紙サイズ、給紙向き、印刷範囲、拡大／縮小等の情報が含まれる。
【００２２】
本発明では、ＯＳ２１は、その印刷対象の情報をプリンタドライバ２２へ送るのではなく、まず中間モジュール２５へ送り、中間モジュール２５が、追加の機能を有する場合には、印刷対象の情報に対して何らかの処理を行った後、その処理の実行結果を含む印刷対象の情報をプリンタドライバ２２へ送り、追加の機能を有しない場合には、何も処理することなく、印刷対象の情報をプリンタドライバ２２へ送る。プリンタドライバ２２は、受け取った印刷対象の情報をプリンタ１０が解釈可能な印刷命令へ変換し、その印刷命令を、通信モジュール２３を介してプリンタ１０へ送信する。
【００２３】
また、中間モジュール２５は、上記の何らかの処理を行い、あるいは何もすることなく、印刷対象の情報をプリンタドライバ２２へ送る処理を実行する際、機能として追加された通信、検索、ログの保存等の、印刷に際して実行すべき処理以外の処理を非同期モジュール２４に委託する。
【００２４】
非同期モジュール２４は、中間モジュール２５が印刷に際して実行すべき処理を行っている間（例えば、追加の機能により描画を行っている間）に、それとは非同期に、その委託された処理を実行する。すなわち、中間モジュール２５は、印刷処理に直接必要とされる処理を実行し、その間に、非同期モジュール２４が、印刷処理に直接必要とされない処理を実行する。このように並列に処理を行うことで、機能追加に伴う印刷処理の遅延を最小限に留めることができる。
【００２５】
アプリケーション２０は、ＯＳ２１へ印刷対象の情報を送って描画処理を実行させるために、ＯＳ２１が有するＧＤＩ(Graphic Driver Interface)関数を呼び出す。なお、関数は、引数と呼ばれるデータを受け取り、定義された通りに処理を実行し、その実行結果を返す一群の命令である。ＯＳ２１は、ＧＤＩ関数の呼び出しに応答して、アプリケーション２０から印刷対象の情報を受け取る。
【００２６】
ＯＳ２１は、図３に示すように、描画処理を実行させ、印刷命令へ変換させるために、ＤＤＩ(Device Driver Interface)関数を呼び出す。ＯＳ２１によって呼び出されるＤＤＩ関数は、中間モジュール２５がエクスポートしている。このため、ＯＳ２１は、中間モジュール２５がもつＤＤＩ関数を呼び出すことになる。
【００２７】
なお、ＯＳ２１がＤＤＩ関数を呼び出す際、中間モジュール２５を意識することはない。これは、中間モジュール２５にＷｉｎｄｏｗｓ（登録商標）のプリンタアーキテクチャで定められたＤＤＩ関数がエクスポートされており、ＯＳ２１がそのＤＤＩ関数を呼び出すことしか意識していないため、そのＤＤＩ関数がどのモジュールに存在するかを意識することはないからである。
【００２８】
このようなＤＤＩ関数は、プリンタドライバ２２にも同様にエクスポートされている。このため、中間モジュール２５は、プリンタドライバ２２がもつＤＤＩ関数を呼び出す際、そのＤＤＩ関数がプリンタドライバ２２に存在することを意識することなく呼び出すことができる。
【００２９】
中間モジュール２５は、図２に示すようにＯＳ２１とプリンタドライバ２２との間に配置され、ＯＳ２１からのＤＤＩ関数の呼び出しを受け、ＯＳ２１から印刷対象の情報を受け取る。また、中間モジュール２５は、プリンタドライバ２２によりその後の処理を実行させるために、プリンタドライバ２２がエクスポートするＤＤＩ関数を呼び出す。
【００３０】
中間モジュール２５は、印刷対象の情報に対して何らかの処理を実行したり、その印刷対象の情報をプリンタドライバ２２へ送信する処理を実行するほか、プリンタドライバ２２に対してプリンタ１０の機能についての問い合わせを行い、プリンタドライバ２２から返されるプリンタドライバ２２がもつ機能に関する情報に対して、処理を行うことも可能である。この処理の例については後述する。
【００３１】
ここで、図２に示すようなソフトウェア構成を実現するための一例として、以下の方法を採用することができる。機能追加プログラムが追加されるまでは、ＯＳ２１は、プリンタドライバ２２のＤＤＩ関数を呼び出し、印刷対象の情報を処理させる。プリンタドライバ２２は、図３（ａ）に示すように、ＯＳ２１が呼び出すＤＤＩ関数に対応したＤＬＬ(Dynamic Link Library)を有している。このＤＬＬは、ＯＳ２１から渡される印刷対象の情報をプリンタ１０が解釈可能な印刷命令へ変換するものである。
【００３２】
図３（ａ）では、ＤＬＬを識別するためのＤＬＬ名として「driver.dll」という名前が付されている。ＯＳ２１は、このＤＬＬ名を使用して、このＤＬＬのＤＤＩ関数を呼び出している。
【００３３】
そこで、ＤＤＩ関数をエクスポートする中間モジュール２５のＤＬＬを作成する際、そのＤＬＬのＤＬＬ名を、プリンタドライバ２２のＤＬＬ名と同一のものとし、他の名前のＤＬＬ名のＤＤＩ関数を呼び出す構成として作成する。そして、プリンタドライバ２２のＤＬＬ名を、当該他の名前のＤＬＬ名へ変更する。
【００３４】
具体的には、図３（ｂ）に示すようなものとされる。すなわち、中間モジュール２５のＤＬＬ名を、元々プリンタドライバ２２に付されていた「driver.dll」という名前とし、プリンタドライバ２２のＤＬＬ名を、「driver.dll」からそれとは別の「originaldriver.dll」という名前に変更する。図３（ｂ）では、非同期モジュール２４にもＤＬＬ名「asynchronous.dll」が付されており、このＤＬＬ名は、中間モジュール２５が非同期モジュール２４を呼び出す際に使用される。
【００３５】
このようにすることで、ＯＳ２１は、ＯＳ２１が知っているプリンタドライバ２２に元々付与されていたＤＬＬ名を使用して、中間モジュール２５を呼び出し、印刷対象の情報を送ることができる。中間モジュール２５は、その印刷対象の情報を受け取り、追加の機能を有する場合には何らの処理を行った後、プリンタドライバ２２に新たに付与されたＤＬＬ名を使用して、プリンタドライバ２２を呼び出し、その後の処理を実行させることができる。
【００３６】
上記の例は一例であり、その他の方法として、ＯＳ２１が提供するフックを利用し、フック処理として、中間モジュール２５を実行させ、追加の機能を有する場合には何らかの処理を行わせることも可能である。
【００３７】
このように中間モジュール２５と非同期モジュール２４を追加し、プリンタドライバ２２のＤＬＬ名を変更するのみで、プリンタドライバ２２の内容を一切変更することなく機能の追加を行うことができる。また、印刷に際して実行すべき処理以外の処理については、印刷に直接関係がなく非同期に行うことができるので、上述したように、機能の追加に伴う印刷処理時間の遅延を最小限に留めることができる。
【００３８】
アプリケーション２０、ＯＳ２１、プリンタドライバ２２、非同期モジュール２４、中間モジュール２５によって行われる処理の一例として、ログを出力する処理の流れを、図４に示すフローチャートを参照して説明する。この処理は、ステップ４００から開始し、ステップ４０５で、アプリケーション２０が印刷を開始させる。ステップ４１０で、アプリケーション２０がＯＳ２１を呼び出し、ＯＳ２１へ印刷対象の情報を送る。
【００３９】
ＯＳ２１は、ステップ４１５で、中間モジュール２５を呼び出し、中間モジュール２５へその印刷対象の情報を送る。ステップ４２０では、中間モジュール２５が非同期モジュール２４を呼び出し、非同期モジュール２４へ印刷対象の情報を送る。ステップ４２５では、中間モジュール２５が追加の機能を有していないので、中間モジュール２５は何も処理を行うことなく、プリンタドライバ２２を呼び出し、プリンタドライバ２２へその印刷対象の情報を送る。
【００４０】
ステップ４３０では、非同期モジュール２４が、中間モジュール２５が印刷対象の情報をプリンタドライバ２２へ送る処理とは非同期に、ログを出力する処理を実行する。非同期モジュール２４は、印刷対象の情報として画像データ等をログとして出力し、それをメモリ等の記憶装置に保存させる。これにより、後にこのログを使用して障害解析を行うことが可能となる。
【００４１】
ステップ４３５では、プリンタドライバ２２が、受け取った印刷対象の情報をプリンタ１０が解釈可能な印刷命令へ変換し、プリンタ１０へ送信する。この送信が終了し、ログを出力する処理が終了したところで、ステップ４４０へ進み、この処理を終了する。
【００４２】
図５に示すシーケンス図を参照して、ログを出力する処理の具体的な例について説明すると、ＯＳ２１は、ＤＬＬ名を使用して中間モジュール２５がもつＤＤＩ関数を呼び出す。中間モジュール２５は、ＯＳ２１から印刷対象の情報を受け取り、ＤＤＩ関数の引数の情報を非同期モジュール２４へ送る。このとき、引数の情報として、その情報のアドレスのみが渡される。
【００４３】
非同期モジュール２４は、中間モジュール２５から受け取ったそのアドレスを参照し、引数の情報をログとして出力する。その後、中間モジュール２５は、プリンタドライバ２２のＤＬＬ名からプリンタドライバ２２がもつＤＤＩ関数のアドレスを取得する。中間モジュール２５は、取得したアドレスを使用してプリンタドライバ２２がもつＤＤＩ関数を呼び出す。
【００４４】
なお、プリンタドライバ２２は、受け取った印刷対象の情報を印刷命令に変換してプリンタ１０へ送信し、プリンタ１０から印刷出力が終了した旨の通知を受ける。また、プリンタドライバ２２は、プリンタ１０において何らかのエラーが発生した場合も通知を受けることができる。エラーとしては、紙づまりやトナー切れ等が挙げられる。プリンタドライバ２２は、その通知を中間モジュール２５へ返し、中間モジュール２５がＯＳ２１へ返す。ＯＳ２１は、その通知を受けて、印刷が終了した旨を表示装置の画面上に表示する。
【００４５】
画像データをログとして保存する場合、文字や図形のデータに比較してデータサイズが大きいため、多くの時間を要することになる。しかしながら、中間モジュール２５が行う処理とは非同期に、非同期モジュール２４がこのログを出力する処理を実行するので、中間モジュール２５がプリンタドライバ２２のＤＤＩ関数を呼び出すまでの遅延を小さくすることができ、効率的に印刷処理を実行することができる。
【００４６】
別の処理例として、画像データのみ描画可能なプリンタドライバに対し、機能追加プログラムがログの出力を可能とする機能を有し、画像に加えて図形や文字も描画可能とする機能を有する場合に実行される処理の流れを、図６に示すフローチャートを参照して説明する。この処理は、ステップ６００から開始し、ステップ６０５で、アプリケーション２０が印刷を開始させる。ステップ６１０で、アプリケーション２０がＯＳ２１を呼び出し、ＯＳ２１へ印刷対象の情報を送る。
【００４７】
ステップ６１５では、ＯＳ２１は、印刷対象の情報を中間モジュール２５に送る前に、利用可能な機能についての問い合わせを行う。その問い合わせを受けて、中間モジュール２５は、ステップ６２０で、その機能についてプリンタドライバ２２に問い合わせる。
【００４８】
プリンタドライバ２２は、ステップ６２５で、その機能として、画像のみが描画可能であるので、その旨を機能に関する情報として中間モジュール２５へ返す。中間モジュール２５は、ステップ６３０で、自己が文字と図形と画像とを描画する機能を有するので、プリンタドライバ２２から受け取った機能に関する情報に代えて、文字と図形と画像とを描画することが可能である旨を機能に関する情報としてＯＳ２１へ返す。
【００４９】
これを受けて、ステップ６３５で、ＯＳ２１は、文字データと図形データと画像データを印刷対象の情報として中間モジュール２５へ送る。ステップ６４０で、中間モジュール２５は、受け取ったこれらのデータを非同期モジュール２４へ送り、ステップ６４５で、プリンタドライバ２２の代わりに、それらのデータを使用して文字、図形、画像の描画を行う。
【００５０】
その一方で、非同期モジュール２４は、ステップ６５０で、中間モジュール２５が行う描画とは非同期に、ログを出力する処理を実行する。中間モジュール２５は、描画が終了すると、その結果をＯＳ２１へ返し、ステップ６５５で、ＯＳ２１が中間モジュール２５へその結果を含む印刷対象の情報を送る。このときの印刷対象の情報は、描画結果および印刷設定情報である。
【００５１】
中間モジュール２５は、ステップ６６０で、その印刷対象の情報をプリンタドライバ２２へ送り、ステップ６６５で、プリンタドライバ２２が、受け取った印刷対象の情報をプリンタ１０が解釈可能な印刷命令へ変換し、プリンタ１０へ送信する。この送信が終了し、ログを出力する処理が終了したところで、ステップ６７０へ進み、この処理を終了する。
【００５２】
ここでは、中間モジュール２５が、文字と図形と画像とを描画する機能をもつものとされているが、追加する機能はこれに限定されるものではなく、例えば、文字の色を赤に変更して描画する機能や、印刷設定の部数を、例えば１部から２部へ変更し、その情報をプリンタドライバ２２へ送り、変更された部数で印刷させる機能等を追加することも可能である。
【００５３】
なお、追加する機能が、描画機能である場合は、ＯＳ２１は、文字データ、図形データ、画像データのみを中間モジュール２５へ送り、中間モジュール２５から描画結果を受け取り、その描画結果と印刷設定情報とを印刷対象の情報として中間モジュール２５を介してプリンタドライバ２２へ送ることができる。また、印刷設定を変更する機能である場合は、ＯＳ２１は、印刷設定情報のみを中間モジュール２５へ送り、中間モジュール２５から変更された印刷設定情報を受け取り、その印刷設定情報と画像データ等とを印刷対象の情報として中間モジュール２５を介してプリンタドライバ２２へ送ることができる。このようにして、様々な機能の追加を実現することができる。
【００５４】
上記の例では、プリンタドライバ２２から取得した機能に関する情報に代えて、中間モジュール２５がもつ機能に関する情報をＯＳ２１に返しているが、両方の機能に関する情報を返し、一方をユーザが選択することができるようにされていてもよい。この場合、中間モジュール２５は、両方の情報をＯＳ２１へ返し、ＯＳ２１は、表示装置の画面上にその両方の情報を表示させ、ユーザの選択を受け付けることができる。これにより、追加した機能だけではなく、プリンタドライバ２２の機能も選択して利用することが可能となる。
【００５５】
図７に示すシーケンス図を参照して、描画ＤＤＩをサポートしていないプリンタドライバに対してサポートできる描画ＤＤＩを増やし、また、ログを出力する機能を、機能追加プログラムの実装により追加した場合に行われる処理について説明する。ＯＳ２１は、中間モジュール２５に対して、利用可能な機能についての問い合わせを行い、それを受けた中間モジュール２５は、プリンタドライバ２２に、プリンタドライバ２２がもつ機能について問い合わせる。
【００５６】
プリンタドライバ２２は、描画ＤＤＩ関数をもっていないので、その旨を中間モジュール２５に返答する。中間モジュール２５は、自己が文字を描画するＤＤＩ関数をもっていることから、文字を描画することが可能である旨を、ＯＳ２１へ返答する。ＯＳ２１は、これを受けて、あたかもプリンタドライバ２２が文字を描画するＤＤＩ関数をサポートしているものと捉える。
【００５７】
そのため、ＯＳ２１は、中間モジュール２５がもつ文字描画のＤＤＩ関数を呼び出す。これを受けて、中間モジュール２５は、非同期モジュール２４にログの出力を依頼し、また、プリンタドライバ２２の代わりに文字を描画し、その結果をＯＳ２１へ返す。ＯＳ２１は、その結果を含む印刷対象の情報を中間モジュール２５へ送り、中間モジュール２５がそれをプリンタドライバ２２へ送り、その後の処理を実行させる。
【００５８】
なお、プリンタドライバ２２は、受け取った印刷対象の情報を印刷命令に変換してプリンタ１０へ送信し、プリンタ１０から印刷出力が終了した旨の通知を受ける。また、プリンタドライバ２２は、プリンタ１０において何らかのエラーが発生した場合も通知を受ける。プリンタドライバ２２は、その通知を中間モジュール２５へ返し、中間モジュール２５がＯＳ２１へ返す。ＯＳ２１は、その通知を受けて、印刷が終了した旨を表示装置の画面上に表示する。
【００５９】
ここでは、文字のみを描画する機能、文字と図形と画像とを描画する機能について説明したが、プリンタドライバ２２が描画ＤＤＩをサポートしていない場合は、図形のみを描画する機能や画像のみを描画する機能を追加してもよく、文字と図形、文字と画像、図形と画像、文字と図形と画像を描画する機能を追加してもよいものである。また、プリンタドライバ２２が画像のみを描画する機能を有する場合、中間モジュール２５は、文字と画像、図形と画像、文字と図形と画像を描画する機能を備え、これらの機能を追加することも可能である。
【００６０】
また、非同期モジュール２４が行う印刷に際して実行すべき処理以外の処理として、上記ではログを出力する処理を１つの例として説明してきたが、上述したように、外部と通信する処理や、文字列を検索する処理等であってもよい。
【００６１】
外部と通信する処理としては、例えば、印刷対象の情報を、ネットワークを介してサーバ装置等へ送信する処理等が挙げられる。また、文字列を検索する処理としては、ＰｏｓｔＳｃｒｉｐｔ（登録商標）により記述されたファイルに含まれる特定のコマンド文字列を検索する処理等が挙げられる。これらはあくまで例であり、これら以外の処理であってもよいものである。
【００６２】
なお、これらの処理は、図４に示したステップ４３０および図６に示したステップ６５０において実行することができる。また、非同期に行うこれらの処理は、ログを出力する処理の１つに限定されるものではなく、ログを出力する処理、外部と通信する処理、文字列を検索する処理のうちの２つあるいは全部を組み合わせたものであってもよい。
【００６３】
本発明では、上記の中間モジュール２５および非同期モジュール２４からなる機能追加プログラムを提供することができるが、このプログラムは、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ、ＳＤカード、ＵＳＢメモリ等の記録媒体に格納して提供することができる。また、このプログラムは、ネットワークに接続されたサーバ装置に格納しておき、ダウンロード要求に応答して、サーバ装置が提供することも可能である。
【００６４】
また、上記のプログラムに限らず、このプログラムが実装されたＰＣ１１等の印刷制御システムも提供可能である。さらには、この印刷制御システムと、プリンタ１０といった画像形成装置とを含む印刷システムも提供することができるものである。
【００６５】
ここで、機能追加プログラムが実装された印刷制御システムの機能ブロック図を、図８に示し、これを参照して、システム構成について説明する。なお、このシステムが行う処理については、上記で説明したので、ここでは省略する。システムは、図２に示すようなアプリケーション２０、ＯＳ２１、プリンタドライバ２２、通信モジュール２３、中間モジュール２５、非同期モジュール２４を実装するが、これらがＣＰＵにより実行され、各機能部として機能する。このため、システムは、各機能部を備えるものとなる。
【００６６】
印刷制御システムは、各機能部として、各ソフトウェアに対応して、アプリケーション実行部３０と、制御部３１と、印刷制御部３２と、通信部３３と、中間処理部３５と、非同期処理部３４とを備える。中間処理部３５は、制御部３１から印刷対象の情報を受け取り、非同期処理部３４へその印刷対象の情報を送る第１処理部３６と、印刷対象の情報をプリンタドライバ２２へ送る第２処理部３７とを含む。追加する機能が、印刷に際して実行すべき処理以外の処理のみである場合には、このような構成により、追加の機能を実施することができる。
【００６７】
しかしながら、プリンタドライバ２２がサポートしない、印刷に際して実行すべき処理として文字と図形と画像とを描画する処理等を実行する場合、印刷制御システムは、この処理を実行するための第３処理部をさらに備えるものとされる。
【００６８】
第１処理部３６は、印刷対象の情報を出力する出力元となるアプリケーション実行部３０および制御部３１のうち、制御部３１から機能についての問い合わせを受け付け、機能に関する情報を返すことができ、第３処理部が実行した結果も返すことができる。第２処理部３７は、第１処理部３６が受け付けた問い合わせに対し、プリンタドライバ２２に機能についての問い合わせを行い、プリンタドライバ２２から機能に関する情報を取得することができる。
【００６９】
これまで本発明の機能追加プログラムおよび印刷制御システムについて図面に示した実施形態を参照しながら詳細に説明してきたが、本発明は、上述した実施形態に限定されるものではなく、他の実施形態や、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。したがって、ここではプリンタドライバに機能を追加するためのプログラムとして説明してきたが、他のデバイスドライバに対しても、機能を追加するために、この機能追加プログラムを提供することが可能である。そして、このプログラムを実装したデバイス制御システムも提供することができるものである。
【符号の説明】
【００７０】
１０…プリンタ、１１…ＰＣ、１２…ネットワーク、２０…アプリケーション、２１…ＯＳ、２２…プリンタドライバ、２３…通信モジュール、２４…非同期モジュール、２５…中間モジュール、３０…アプリケーション実行部、３１…制御部、３２…印刷制御部、３３…通信部、３４…非同期処理部、３５…中間処理部、３６…第１処理部、３７…第２処理部
【先行技術文献】
【特許文献】
【００７１】
【特許文献１】特開２０１０−２８２５０５号公報
【特許文献２】特許第３７４５３４４号公報
【図１】
2013168112.tif 000003
【図２】
2013168112.tif 000004
【図３】
2013168112.tif 000005
【図４】
2013168112.tif 000006
【図５】
2013168112.tif 000007
【図６】
2013168112.tif 000008
【図７】
2013168112.tif 000009
【図８】
2013168112.tif 000010