(57)【特許請求の範囲】
【請求項１】
コンピュータに、画像処理装置への処理の要求をするための要求情報を複数受け付け、受け付けた前記要求情報それぞれに対応する、前記画像処理装置に処理を実行させる処理に関する処理情報を前記画像処理装置へ出力させるための印刷制御プログラムにおいて、
前記コンピュータを、
前記要求情報それぞれに対応する前記処理情報の生成に用いられ、前記画像処理装置に追加された機能に対応する処理情報を生成するための記述が追加可能なスクリプトを記憶装置に複数記憶する第１の記憶制御手段と、
前記要求情報と前記スクリプトとの対応関係を示す対応情報を前記記憶装置に記憶する第２の記憶制御手段と、
前記要求情報を受け付けたとき、前記第２の記憶制御手段によって記憶された対応情報に基づいて、前記記憶装置に前記要求情報に対応する前記スクリプトが記憶されているか否かを判定する判定手段と、
前記判定手段によって前記記憶装置に記憶されていると判定されたスクリプトを用いて該受け付けた要求情報に対応する処理情報を生成する生成手段と、
前記生成手段で生成された前記処理情報を前記画像処理装置に出力する出力手段と
して機能させるための印刷制御プログラム。
【請求項２】
前記判定手段は、さらに、受信した前記要求情報が、スクリプトを実行すべき所定の要求情報であるか否かを判定し、
前記生成手段は、さらに、前記判定手段に前記所定の要求情報であると判定された場合に、当該要求情報に対応付けられた前記スクリプトに基づいて前記処理情報を生成すること、
を特徴とする請求項１に記載の印刷制御プログラム。
【請求項３】
印刷に関する設定情報を、前記スクリプトに受け渡す受渡手段をさらに備え、
前記生成手段は、前記受渡手段で前記設定情報を受け渡された前記スクリプトに基づいて、前記処理情報を生成すること、
を特徴とする請求項１または２に記載の印刷制御プログラム。
【請求項４】
前記処理情報で用いられる前記設定情報に対して、暗号化処理を施す暗号化手段を、さらに備え、
前記受渡手段は、暗号化処理が施された前記設定情報を、前記スクリプトに受け渡すこと、
を特徴とする請求項３に記載の印刷制御プログラム。
【請求項５】
前記生成手段は、当該スクリプトを実行するためのインタプリタであること又は、当該スクリプトを実行するためにブラウザを呼び出すことを特徴とする、請求項１乃至４のいずれか一つに記載の印刷制御プログラム。
【請求項６】
画像処理装置への処理の要求をするための要求情報を複数受け付け、受け付けた前記要求情報それぞれに対応する、前記画像処理装置に処理を実行させる処理に関する処理情報を前記画像処理装置へ出力する情報処理装置において、
前記要求情報それぞれに対応する前記処理情報の生成に用いられ、前記画像処理装置に追加された機能に対応する処理情報を生成するための記述が追加可能なスクリプトを複数記憶する第１の記憶手段と、
前記要求情報と前記スクリプトとの対応関係を示す対応情報を記憶する第２の記憶手段と、
前記要求情報を受け付けたとき、前記第２の記憶手段によって記憶された対応情報に基づいて、前記第１の記憶手段に前記要求情報に対応する前記スクリプトが記憶されているか否かを判定する判定手段と、
前記判定手段によって前記第１の記憶手段に記憶されていると判定されたスクリプトを用いて該受け付けた要求情報に対応する処理情報を生成する生成手段と、
前記生成手段で生成された前記処理情報を前記画像処理装置に出力する出力手段と、
を備える情報処理装置。
【請求項７】
前記判定手段は、さらに、受信した前記要求情報が、スクリプトを実行すべき所定の要求情報であるか否かを判定し、
前記生成手段は、さらに、前記判定手段に前記所定の要求情報であると判定された場合に、当該要求情報に対応付けられた前記スクリプトに基づいて前記処理情報を生成すること、
を特徴とする請求項６に記載の情報処理装置。
【請求項８】
印刷に関する設定情報を、前記スクリプトに受け渡す受渡手段をさらに備え、
前記生成手段は、前記受渡手段で前記設定情報を受け渡された前記スクリプトに基づいて、前記処理情報を生成すること、
を特徴とする請求項６または７に記載の情報処理装置。
【請求項９】
前記処理情報で用いられる前記設定情報に対して、暗号化処理を施す暗号化手段を、さらに備え、
前記受渡手段は、暗号化処理が施された前記設定情報を、前記スクリプトに受け渡すこと、
を特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記生成手段は、当該スクリプトを実行するためのインタプリタであること又は、当該スクリプトを実行するためにブラウザを呼び出すことを特徴とする、請求項６乃至９のいずれか一つに記載の情報処理装置。
【請求項１１】
請求項１乃至５のいずれか一つ記載の印刷制御プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷に関する機能の追加、削除又は変更が可能なプリンタドライバ、情報処理装置、及び記録媒体に関する。
【背景技術】
【０００２】
従来から、ＰＣ等のホストコンピュータからプリンタに対して印刷命令を行うためには、各種コマンドが用いられていた。コマンドの種類としては、プリンタに対して描画を指示する描画コマンドと別に、プリンタの設定、集約の設定、又は両面の設定などをプリンタに対して行うコマンドとして、ＰＪＬ(Printer  Job  Language)やＪＤＦ（Job  Definition  Format）といったものが既に知られている。
【０００３】
このＰＪＬなどのコマンドは、描画データには含まれないフィニッシャの設定などを行うための、テキストで記述されたコマンドである。そして、ＰＪＬコマンド自体は、プリンタそれぞれに特化したコマンドではなく、複数のプリンタに共通するコマンドが用いられることが多い。しかしながら、近年、プリンタの機種を問わず、ユーザの要求に応えるために納入されるプリンタ毎に異なる機能が搭載されることが多い。このため、プリンタ毎にフィニッシャの設定として用いられるコマンドが異なる。
【０００４】
ところで、当該プリンタと接続されたホストコンピュータは、当該プリンタを呼び出すためにプリンタドライがインストールされている。そして、当該ホストコンピュータは、プリンタドライバを呼び出すことで当該プリンタの機能を利用できる。つまり、当該ホストコンピュータからの要求に応じて、プリンタドライバが、当該機能に対応するコマンドを生成し、プリンタに対して出力する。これにより、プリンタの機能を使用することができる。
【０００５】
このため、プリンタに新たなコマンドや機能が追加された場合、当該プリンタを制御する各ホストコンピュータにインストールされたプリンタドライバも更新を行う必要がある。このプリンタドライバは、通常、コンパイルされたバイナリ形式で配布されている。
【０００６】
ところで、プリンタに新たなコマンドや機能が増えた場合には、当該プリンタドライバのプログラムをプログラマが書き直し、コンパイルした後で、配布する必要があった。そして、配布されたプリンタドライバをホストコンピュータごとにインストールすることで、新たな追加されたコマンドや機能を、ホストコンピュータから使用することが可能となった。
【０００７】
しかしながら、上述した従来の技術では、プリンタドライバがコンパイル済みのバイナリであるため、プリンタの機能が増減するたびにプリンタドライバのプログラムの書き換え、再コンパイル、再配布などをしなければならないため、作業負担が大きいという問題があった。
【０００８】
そして、コンパイルを行わずに、プリンタドライバで複数種類の機器に応じてコマンドを追加する技術として、例えば、特許文献１に記載された技術がある。特許文献１に記載された技術では、プリンタから読み出した機器情報に基づいてコマンドを取得し、当該コマンドに基づいてプリンタが解釈可能な印刷データを生成する技術が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１に記載された技術では、プリンタドライバが、プリンタから機器情報を読み出す必要があるため、プリンタに予め機器情報を格納する必要があるという問題がある。
【００１０】
さらには、従来からプリンタのメンテナンス時に、プリンタから印刷するために別のコマンドを試したい場合に、プリンタドライバの再インストールなどが必要となり、作業負担が大きいという問題があった。これに対し、特許文献１に記載された技術では、メンテナンス時に、別コマンドを試すことができず、作業負担が大きいという問題については解消できない。
【００１１】
本発明は、上記に鑑みてなされたものであって、プリンタに対して出力されるコマンドの変更が容易な印刷制御プログラム、情報処理装置、及び記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するために、本発明にかかる印刷制御プログラムは、コンピュータに、画像処理装置への処理の要求をするための要求情報を複数受け付け、受け付けた前記要求情報それぞれに対応する、前記画像処理装置に処理を実行させる処理に関する処理情報を前記画像処理装置へ出力させるための印刷制御プログラムにおいて、前記コンピュータを、前記要求情報それぞれに対応する前記処理情報の生成に用いられ、前記画像処理装置に追加された機能に対応する処理情報を生成するための記述が追加可能なスクリプトを記憶装置に複数記憶する第１の記憶制御手段と、前記要求情報と前記スクリプトとの対応関係を示す対応情報を前記記憶装置に記憶する第２の記憶制御手段と、前記要求情報を受け付けたとき、前記第２の記憶制御手段によって記憶された対応情報に基づいて、前記記憶装置に前記要求情報に対応する前記スクリプトが記憶されているか否かを判定する判定手段と、前記判定手段によって前記記憶装置に記憶されていると判定されたスクリプトを用いて該受け付けた要求情報に対応する処理情報を生成する生成手段と、前記生成手段で生成された前記処理情報を前記画像処理装置に出力する出力手段として機能させることを特徴とする。
【００１３】
また、本発明にかかる情報処理装置は、画像処理装置への処理の要求をするための要求情報を複数受け付け、受け付けた前記要求情報それぞれに対応する、前記画像処理装置に処理を実行させる処理に関する処理情報を前記画像処理装置へ出力する情報処理装置において、前記要求情報それぞれに対応する前記処理情報の生成に用いられ、前記画像処理装置に追加された機能に対応する処理情報を生成するための記述が追加可能なスクリプトを複数記憶する第１の記憶手段と、前記要求情報と前記スクリプトとの対応関係を示す対応情報を記憶する第２の記憶手段と、前記要求情報を受け付けたとき、前記第２の記憶手段によって記憶された対応情報に基づいて、前記第１の記憶手段に前記要求情報に対応する前記スクリプトが記憶されているか否かを判定する判定手段と、前記判定手段によって前記第１の記憶手段に記憶されていると判定されたスクリプトを用いて該受け付けた要求情報に対応する処理情報を生成する生成手段と、前記生成手段で生成された前記処理情報を前記画像処理装置に出力する出力手段と、を備えることを特徴とする。
【００１４】
また、本発明にかかるコンピュータ読み取り可能な記録媒体は、上述の印刷制御プログラムを記録したことを特徴とする。
【発明の効果】
【００１５】
本発明によれば、プリンタを使用するためのコマンドの変更が容易なので、作業負担を軽減できるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】図１は、第１の実施の形態にかかる情報処理装置の構成を示すブロック図である。
【図２】図２は、情報処理装置のイベント保持部が保持するイベントと当該イベントで実行されるスクリプトファイル名との対応関係を示した図である。
【図３】図３は、情報処理装置のスクリプトファイル記憶部に記憶されたスクリプトの一例を示した図である。
【図４】図４は、“orientation”の初期設定値と“layout”の設定値とから導き出せる“ORIENTATION”の設定値をテーブルで示した図である。
【図５】図５は、フィルタ部により変換される前の設定一覧データと、変換した後の設定一覧データと、を示した図である。
【図６】図６は、第１の実施の形態にかかる情報処理装置におけるスクリプトファイルの更新を示した説明図である。
【図７】図７は、ステープル機能の追加に伴って設定すべき“STAPLE”の値と当該値に対応する変数の値との関係を示した図である。
【図８】図８は、ステープル機能が追加されたスクリプトの一例を示した図である。
【図９】図９は、第１の実施の形態にかかる情報処理装置におけるジョブ開始時の処理の手順を示すシーケンス図である。
【図１０】図１０は、第１の実施の形態にかかる情報処理装置における、図９のステップＳ９０４の具体的な処理の手順を示すフローチャートである。
【図１１】図１１は、第１の実施の形態にかかる情報処理装置におけるジョブ終了時の処理の手順を示すフローチャートである。
【図１２】図１２は、情報処理装置のハードウェア構成を示した図である。
【発明を実施するための形態】
【００１７】
以下に添付図面を参照して、この発明にかかるプリンタドライバ、情報処理装置、及び記録媒体の一実施の形態を詳細に説明する。
【００１８】
（第１の実施の形態）
図１は、第１の実施の形態にかかる情報処理装置の構成を示すブロック図である。図１に示すように、情報処理装置１００は、アプリケーション１０１と、ＯＳ１０２と、通信Ｉ／Ｆ１０３とを備えている。そして、通信Ｉ／Ｆ１０３は、プリンタ１５０とネットワークを介して接続している。これにより情報処理装置１００から、プリンタ１５０に対して印刷要求を行うことができる。
【００１９】
プリンタ１５０は、当該プリンタ１５０が備えた（図示しない）操作部から入力された印刷要求に応じて印刷処理をおこなう。さらに、プリンタ１５０は、情報処理装置１００と接続するインターフェースを備え、ネットワークを介して接続された情報処理装置１００からの印刷要求に応じて印刷処理を行う。本実施の形態にかかるプリンタ１５０は、コピー機能、プリンタ機能、スキャナ機能およびファクシミリ機能のうち少なくとも２つの機能を有する複合機を適用する。なお、複合機以外ではなく単なる印刷処理のみしかおこなわないプリンタであっても良い。
【００２０】
特に近年の複合機では、ユーザの要求に基づいて機能の追加、削除が容易になる傾向にある。例えば、ユーザがステープル機能を追加したい場合には、当該プリンタのメンテナンスに連絡を取ればよい。これにより、メンテナンスが、プリンタに機能（例えば、ステープル機能）を追加するためのプログラム等をインストールすることで、当該機能の利用が可能となる。このような機能（例えばステープル機能）の追加が行われた場合、情報処理装置から当該機能を使用するためには、当該機能に対応したプリンタドライバが必要になる。
【００２１】
しかしながら、プリンタドライバは、バイナリ形式で提供されているため、プリンタに追加した機能に対応するためには、プログラムを書き直し、再コンパイルしたプリンタドライバをインストールする必要があった。そこで、本実施の形態においてはこのような作業負担を軽減する技術について提案する。
【００２２】
情報処理装置１００のアプリケーション１０１は、後述するＯＳ１０２上で動作するソフトウェアであり、ＯＳ１０２内に対して印刷要求を行うものとする。
【００２３】
ＯＳ１０２は、プリンタドライバ１１１と、ＧＤＩ（Graphics  Device  Interface）１１２と、スプーラ１１３とを備え、情報処理装置１００全体の制御を行う。
【００２４】
ＧＤＩ１１２は、ＯＳ１０２が備えるサブシステムの１つであり、描画処理を行う。そして、ＧＤＩ１１２は、ＯＳ１０２がアプリケーション１０１等から印刷要求を受け付けた場合に、プリンタドライバ１１１を呼び出して、印刷処理を要求する。
【００２５】
スプーラ１１３は、ＯＳ１０２が備えるサブシステムの１つであり、プリンタ１５０に送信する印刷ジョブを一時的に蓄積するモジュールとする。
【００２６】
プリンタドライバ１１１は、ＵＩドライバ１２１と、スクリプトファイル記憶部１２２と、グラフィックドライバ１２３と、言語処理実行部１２４と、送信部１２５と、を備え、プリンタ１５０に印刷要求を行うための処理をおこなう。
【００２７】
ＵＩドライバ１２１は、プリンタドライバ１１１を構成するモジュールの一つであり、プリンタ１５０に対する様々な設定を行うためのＧＵＩの表示を行ったり、インストール時の初期設定画面の表示や、表示したＧＵＩや初期設定画面に対する操作の受け付けなどを行う。
【００２８】
スクリプトファイル記憶部１２２は、後述する言語処理実行部１２４が実行可能なスクリプトが記述されたテキストファイル群を記憶する。当該スクリプトファイルは、テキストで記述されたスクリプトであって、プリンタ１５０が実行するコマンドの生成を行うためのスクリプトとする。本実施の形態においては、スクリプトファイルの形式としてlua形式を適用するが、周知の形式を問わず、様々な形式を適用して良い。
【００２９】
これらスクリプトファイルの利用手法としては、いずれの手法を用いても良く、例えば、テキストファイルとしてＯＳ１０２にデプロイされる形態や、複数のテキストファイルを１つのアーカイブファイルに圧縮して、実行時に（図示しない）メモリ上、あるいはファイルシステム上に展開して利用するという形態を適用しても良い。なお、具体的なスクリプトファイルについては後述する。
【００３０】
グラフィックドライバ１２３は、イベント受信部１３１と、描画コマンド生成部１３２と、ジョブフック部１３３と、を備え、プリンタドライバ１１１の構成モジュールの一つであって、主に描画処理をおこなう。
【００３１】
イベント受信部１３１は、プリンタ１５０に対して処理を要求するイベントを受信する。例えば、イベント受信部１３１は、ＧＤＩ１１２から、各種の描画イベントを受信する。イベント受信部１３１は、イベントを受信した場合に、描画コマンド生成部１３２に対して描画コマンドの生成を要求する。
【００３２】
描画コマンド生成部１３２は、受信したイベントに応じた描画コマンドを生成する。描画コマンドは以下の２つで成り立っている。
【００３３】
一つは、線、図形画像などの印刷されるオブジェクトのデータを記述した印刷コマンドである。もう一つは、印刷されるオブジェクトと関係するものではなく、例えば、フィニッシャの設定、ジョブ名、又はユーザ名などベンダごとに多種多様ジョブの情報を記述したジョブコマンドである。
【００３４】
これら描画コマンドのうち、印刷コマンドについてはプリンタ１５０毎に特化したコマンドであり、描画コマンド生成部１３２内部で行うこととする。一方、描画コマンドのうち、ジョブコマンドは、ＰＪＬ(Printer Job Language)など規格として定められたコマンドである。このため、ジョブコマンドは、プリンタそれぞれに特化したコマンドではなく、共通のコマンドが用いられることが多い。そこで、本実施の形態においては、スクリプトファイルでジョブコマンドを生成することとし、実行されるジョブコマンドについて編集可能とした。
【００３５】
ジョブコマンドの例としては、例えば、部数設定、パンチ設定、両面設定、集約印刷設定（例えば２in１）、ステープル設定などがある。そして、スクリプトファイルに対する編集として、コマンドの追加、変更、及び削除や、各コマンドに対して受け渡すべき引数の変更や、環境設定する際のパラメータ変更などがある。
【００３６】
そして、描画コマンド生成部１３２は、ジョブの開始・終了、ドキュメントの開始・終了、物理ページの開始・終了、論理ページの開始・終了のイベントに対応するジョブコマンドを生成する場合には、ジョブフック部１３３にコマンドの生成を要求する。
【００３７】
また、描画コマンド生成部１３２は、その他のイベントに対応する印刷コマンドを生成する場合には、コマンドの生成を行う。なお、印刷コマンドの生成手法については、周知の手法を用いるものとして説明を省略する。
【００３８】
つまり、イベント受信部１３１が描画イベントを受信した際、対応する描画コマンドの生成を描画コマンド生成部１３２に要求する。その際、受信したイベントが印刷に関するイベントの場合には、描画コマンド生成部１３２が自らコマンドを生成し、受信したイベントがジョブに関するイベントの場合には、描画コマンド生成部１３２が、ジョブフック部１３３にコマンドの生成を要求する。
【００３９】
また、描画コマンド生成部１３２は、DEVMODE構造体やPrinterDriverDataレジストリを読み込むことで、設定一覧データを生成する。なお、設定一覧データは、印刷に関する設定パラメータが含まれた情報とする。そして、描画コマンド生成部１３２は、ジョブフック部１３３にコマンドの生成を要求する際、設定一覧データの受け渡しも行う。
【００４０】
ジョブフック部１３３は、イベント保持部１３４と、判定部１３５と、フィルタ部１３６と、暗号化部１３７と、を備え、描画コマンド生成部１３２からのジョブコマンド生成要求に応じて、ジョブコマンドを生成する。本実施の形態にかかるジョブフック部１３３は、生成要求のあったジョブコマンドに対応するスクリプトファイルを実行することで、ジョブコマンドを生成する。次にスクリプトファイルを特定するための構成について説明する。なお、スクリプトの実行は、言語処理実行部１２４が行う。
【００４１】
イベント保持部１３４は、各イベントに対応して実行すべきスクリプトファイル名を保持する。図２は、イベント保持部１３４が保持するイベントと当該イベントで実行されるスクリプトファイル名との対応関係を示した図である。つまり、受信したイベントに応じて実行するスクリプトファイルを特定することができる。
【００４２】
図１に戻り、判定部１３５は、イベント受信部１３１が受信したイベントが、スクリプトファイルを実行すべき所定のイベントであるか否かを判定する。受信したイベントが、イベント保持部１３４が保持するイベントであるか否かにより、スクリプトファイルを実行すべきイベントであるか否かを判定する。さらに、判定部１３５は、実行すべきイベントであると判定し場合に、当該イベントに対応するスクリプトファイルが、スクリプトファイル記憶部１２２に格納されているか否かを判定する。そして、当該スクリプトファイル記憶部１２２に格納されている場合に限り、スクリプトファイルが実行される。
【００４３】
そして、イベント受信部１３１がイベントを受信した場合に、判定部１３５がイベントに対応するスクリプトファイルを特定し、特定されたスクリプトファイルを、後述する言語処理実行部１２４で実行することとする。なお、本実施の形態では、各イベントと対応付けられたスクリプトファイルを実行する例とした。本実施の形態では、実行される関数名は、予め定められたものとし、具体的には“GenerateCommand”とした。そして、ジョブフック部１３３では、呼び出したスクリプトファイルに拘わらず、当該関数名を呼び出すこととする。そして、呼び出されるスクリプトは、図３で示したスクリプトが一例としてあげられる。なお、図３において、引数として“config”が設定されている。当該“config”は、フィルタ部１３６で変換した後の設定一覧データをluaのTable形式に変換したものとする。これにより、スクリプトファイルに対して、設定一覧データの各パラメータを受け渡すことができる。
【００４４】
次にスクリプトファイルについて具体的に説明する。図３は、スクリプトファイル記憶部１２２に記憶されたスクリプトファイル“StartJob.lua”の例を示した図である。図３に示すスクリプトファイルでは、ジョブ開始時に実行されるスクリプトの例を示した図である。図３に示す例では、符号２０１に示す各行で、パラメータ‘ORIENTATION’に対して‘PORTRAIT’又は‘LANDSCAPE’の設定を行っている。なお、‘ORIENTATION’は、紙の方向を設定するパラメータであり、‘PORTRAIT’は縦置きの紙を使用することを示す値であり、‘LANDSCAPE’は横置きの紙を使用することを示す値とする。この‘ORIENTATION’は、例えば２ｉｎ１などを行う場合、集約時に配置する領域の関係から、‘PORTRAIT’と‘LANDSCAPE’とが切り替わる。
【００４５】
図４は、“orientation”の初期設定値と“layout”の設定値とから導き出せる“ORIENTATION”の設定値をテーブルで示した図である。図４に示すように、“orientation”の初期設定値が‘PORTRAIT’であって、“layout”の設定値が“２in１”又は“６in１”の場合には、‘ORIENTATION’に‘LANDSCAPE’を設定する必要がある。また、“orientation”の初期設定値が‘PORTRAIT’であって、“layout”の設定値が“２in１”及び“６in１”以外の場合には、‘ORIENTATION’に‘PORTRAIT’を設定する必要がある。
【００４６】
さらに、“orientation”の初期設定値が“LANDSCAPE”であって、“layout”の設定値が“２in１”又は“６in１”の場合には、‘ORIENTATION’に‘PORTRAIT’を設定する必要がある。また、“orientation”の初期設定値が“LANDSCAPE”であって、“layout”の設定値が“２in１”及び“６in１”以外の場合には、‘ORIENTATION’に‘LANDSCAPE’を設定する必要がある。
【００４７】
そして、図３に示すスクリプトファイル“StartJob.lua”は、ジョブ開始時に実行されるスクリプトであり、符号２０１で示された各行で、上述した‘ORIENTATION’の値が設定される。そして、符号２０２で示した各行は、ＰＪＬによるジョブコマンドが生成するための命令文であって、上述した例に対応するジョブコマンドとして“@PJL  SET  ORIENTATION  =  PORTRAIT”が生成される。
【００４８】
このように、lua形式のスクリプトでコマンドを生成するため、設定値とコマンドが１対１で対応していない場合においても、柔軟な条件に基づいてコマンドの生成を行うことができる。この際のコマンド生成をテキストで記述できるため、メンテナンス性が高い。
【００４９】
そして、図３に示した例では、config内に保持されているlayoutの設定値やorientationの初期値を参照して、ORIENTATIONコマンドの設定値を決定できる。
【００５０】
しかしながら、本実施の形態のように、イベント毎にスクリプトファイルを用意するのではなく、スクリプトファイルを一つのみ用意し、イベントに応じて予め定められた関数名の関数を呼び出すことにしてもよい。
【００５１】
図１に戻り、フィルタ部１３６は、暗号化部１３７を備え、スクリプトファイルに受け渡す設定一覧データに対して、パラメータの追加や変換等を行う。そして、フィルタ部１３６は、パラメータの追加や変換等がなされた後の設定一覧データをスクリプトファイルに受け渡す。
【００５２】
暗号化部１３７は、設定一覧データに含まれているパラメータに対して、暗号化処理を施す。そして、暗号処理が施されたパラメータは、設定一覧データとしてスクリプトファイルに受け渡される。暗号化部１３７は、出力先のプリンタ１５０で復号可能な暗号化処理を施している。つまり、スクリプトファイルは、ユーザが書き換えることができるので、暗号化されていないパスワードでは漏洩する可能性がある。そこで、スクリプトファイルに受け渡す前に、暗号化部１３７が予めプリンタ１５０で復号可能な暗号化処理を施しておく。これにより、悪意でスクリプトファイルを書き換えたとしてもパスワードの漏洩を防ぐことができる。
【００５３】
図５は、フィルタ部１３６により変換される前の設定一覧データと、変換した後の設定一覧データと、を示した図である。図５に示すように、本実施の形態にかかる設定一覧データでは、ＪＳＯＮ形式で記述した例とした。しかしながら、本実施の形態は、当該ＪＳＯＮ形式に制限するものではなく、例えばＩＮＩファイル形式やＸＭＬ形式で記述されたで書かれたテキストデータ、又は構造体のリンクリスト言った形式でも良く、あらゆる形式で記述して良い。
【００５４】
図５に示す例では、フィルタ部１３６は、図５の変換される前の設定一覧データに対して、暗号化部１３７により"password"に暗号化処理を施すと共に、"date”を追加している。そして、言語処理実行部１２４に対して、変換された後の設定一覧データを出力することで、スクリプトファイルに設定一覧データを受け渡すこととする。
【００５５】
言語処理実行部１２４は、イベント受信部１３１がイベントを受信した場合に、当該イベントと対応付けられたスクリプトファイルをスクリプトファイル記憶部１２２から読み出して実行することで、プリンタに出力するコマンドを生成する。つまり、言語処理実行部１２４は、スクリプトファイルに基づいてコマンドを生成するので、換言すればコマンド生成手段としての役割を果たす。そして、言語処理実行部１０４は、スクリプト言語“lua”のインタプリタとする。そして、言語処理実行部１２４は、フィルタ部１３６により入力された設定一覧データを引数として、スクリプトファイルに受け渡す。換言すれば、言語処理実行部１２４は、受渡手段としての役割も果たす。これにより設定一覧データに含まれている各パラメータが受け渡されたスクリプトファイルが実行されることで、出力するプリンタに適切なコマンドが生成できる。
【００５６】
送信部１２５は、言語処理実行部１２４で生成されたコマンド群を、プリンタに出力する制御を行う。具体的には、送信部１２５は、生成されたコマンド群を、スプーラ１１３に出力する。そして、スプーラ１１３に蓄積されたコマンド群は、最終的にプリンタ１５０に送信される。なお、スプーラ１１３からプリンタ１５０に送信される際の処理は、従来と同様の手法を用いることとして、説明を省略する。
【００５７】
図６は、本実施の形態にかかる情報処理装置１００におけるスクリプトファイルの更新を示した説明図である。図６に示すように情報処理装置１００とプリンタ１５０とはネットワーク接続されている。上述したようにプリンタ１５０に対しては、ユーザの要求に応じて機能の追加が行われる。その際、情報処理装置１００から印刷する場合でも、当然に追加された機能を使いたいという要求がある。この追加された機能を使いたい場合、プリンタドライバ１１１が対応している必要がある。このため、従来は追加した機能に対応したプリンタドライバのインストールが行われていた。
【００５８】
しかしながら、情報処理装置１００に対してプリンタドライバのインストールは作業負担が大きい上、そもそも追加した機能に応じたプログラムを予め作成しておく必要がある。そこで、本実施の形態のプリンタドライバ１１１では、上述したようにコマンドを生成するためのスクリプトファイル“*.lua”を用意することとした。つまり、本実施の形態にかかるプリンタドライバ１１１では、ネットワーク接続されたプリンタ１５０に機能が追加された場合、情報処理装置１００に記憶されたスクリプトファイルに、当該機能に対応した行を追加することで、情報処理装置１００から追加した機能を使用することができる。
【００５９】
例えば、プリンタ１５０にステープル機能が追加された場合、当該ステープル機能を使用するためには、図７に示す“STAPLE”の値と当該値に対応する変数の値とを設定する必要がある。
【００６０】
図８は、当該ステープル機能に対応するための行が追加されたスクリプトファイルの例を示した図である。図８に示すスクリプトファイルでは、図２に示すスクリプトファイルと比べて、符号８０１に示す行が追加されている。そして、図８に示すスクリプトファイルが、言語処理実行部１２４に実行されることで、ステープル機能を使用することが可能となる。なお、追加するステープル機能に制限するものではなく、様々な機能を追加することができる。
【００６１】
スクリプトファイルについては、さらに柔軟な編集を行うことができる。例えば、編集前のステープル機能などで二つ穴しか対応してなかったのに対し、編集後では３つ穴、４つ穴に対応できるようになる等が考えられる。
【００６２】
さらに、プリンタ１５０に対して機能が追加された場合の他、メンテナンスを行う人が、クライアントのプリンタ１５０のチェックを行うために、プリンタドライバ１１１から出力されるコマンドの追加、変更又は削除を行いたいという状況があった。この様な状況に際し、従来のプリンタドライバは、コンパイルされたバイナリ形式で配布されていたため、カスタマイズ性が低いという性質を有していた。このため、当該コマンドの変更は極めて困難であった。しかしながら、本実施の形態では、ＰＪＬコマンドを生成する部分をスクリプトファイルとして保持することとしている。このため、スクリプトファイルを編集することで、プリンタ１５０に対して出力されるコマンドを制御することが可能となった。これにより、出力すべきジョブコマンドが変更したい場合でも、プリンタドライバ１１１の再コンパイルや再インストールすることなく、動的に出力するコマンドを変更することを可能とした。これにより、カスタマイズ性を向上させることが可能となった。
【００６３】
次に、以上のように構成された本実施の形態にかかる情報処理装置１００におけるジョブ開始時の処理について説明する。図９は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すシーケンス図である。
【００６４】
まず、ＧＤＩ１１２から、イベント受信部１３１に対して、ジョブの開始を要求するイベントを送信する（ステップＳ９０１）。次に、イベント受信部１３１が、当該イベントを受信したため、ジョブ開始時のジョブコマンドの生成を、描画コマンド生成部１３２に対して要求する（ステップＳ９０２）。当該要求を受け付けた描画コマンド生成部１３２は、DEVMODE構造体やPrinterDriverDataレジストリを読み込み、図５に示す変換前の設定一覧データを生成する。
【００６５】
そのあと、描画コマンド生成部１３２が、ジョブ開始時のコマンド生成を、ジョブフック部１３３に要求する（ステップＳ９０３）。その際、生成した設定一覧データを、ジョブフック部１３３に受け渡す。
【００６６】
次に、ジョブフック部１３３の判定部１３５が、当該イベントに対応するスクリプトファイルを実行すべきか判定する（ステップＳ９０４）。当該判定としては、当該イベントがスクリプトファイルを実行する必要のあるイベントか否か判定することと、該イベントに対応するスクリプトファイルが存在するか否かの判定などとする。なお、具体的な処理については後述する。また、本シーケンス図では、スクリプトファイルを実行すると判定された場合について説明する。なお、スクリプトファイルを実行しないと判定された場合については、以降の処理を行わずに終了する。
【００６７】
次に、スクリプトファイルを実行すると判定した場合、フィルタ部１３６が、受け渡された設定一覧データに含まれているパラメータに一部を変換（フィルタリング）する（ステップＳ９０５）。当該変換によって、例えば、DEVMODE構造体やPrinterDriveDataレジストリには含まれない日付の情報“Date”など、必要なパラメータなどが追加される。さらに、暗号化部１３７が、設定一覧データに含まれるパラメータのうち、パスワードなどのパラメータに対して暗号化処理を施す（ステップＳ９０６）。これにより、設定一覧データにおいて、平文で記述されていた“password”が、プリンタ１５０本体に送信される形式に暗号化処理が施されたりする。これは、悪意のある者によってスクリプトファイルが書き換えられて、ユーザのパスワードを収集されるといった事態を防ぐためのものである。
【００６８】
そして、ジョブフック部１３３は、ステップＳ９０４で存在すると判定されたスクリプトファイルを実行する（ステップＳ９０７）。それと共に、ジョブフック部１３３は、言語処理実行部１２４に対して、実行すべき所定の関数名を指示する。
【００６９】
その後、言語処理実行部１２４が、呼び出されたスクリプトファイル(StartJob.lua)が保持する、指示された関数名の関数（GenerateCommand()）を呼び出す（ステップＳ９０８）。そして、言語処理実行部１２４により実行されたStartJob.luaが、呼び出された関数から、コマンドストリームを生成し、言語処理実行部１２４に対して受け渡す（ステップＳ９０９）。つまり、言語処理実行部１２４が、StartJob.luaに基づいて、コマンドストリームを生成する。なお、実行結果としてコマンドが一つも生成されなかった場合には、そのまま空ストリームを返して終了する。
【００７０】
そして、言語処理実行部１２４も、受け渡されたコマンドストリームを、ジョブフック部１３３に出力する（ステップＳ９１０）。その後、ジョブフック部１３３も、入力されたコマンドストリームを、描画コマンド生成部１３２に対して出力する（ステップＳ９１１）。そして、描画コマンド生成部１３２は、入力されたコマンドストリームを、図示しないメモリ内に保持する（ステップＳ９１２）。そして、描画コマンド生成部１３２から、イベント受信部１３１に対して処理が終了したことを通知する（ステップＳ９１３）。さらに、イベント受信部１３１は、ＧＤＩ１１２に対して処理が終了したことを通知する（ステップＳ９１４）。
【００７１】
上述した処理手順により、ジョブ開始時に基づいて行われるコマンドの生成が終了する。上述したようにスクリプトファイルを実行することで、ジョブ実行時に適したコマンドが生成される。
【００７２】
次に、本実施の形態にかかる情報処理装置１００におけるステップＳ９０４の具体的な処理について説明する。図１０は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すフローチャートである。
【００７３】
まず、判定部１３５が、イベント保持部１３４に基づいて、受信したイベントがスクリプトファイルを実行すべきイベントか判定する（ステップＳ１００１）実行すべきイベントではないと判定した場合（ステップＳ１００１：Ｎｏ）、処理を終了する。
【００７４】
一方、実行すべきイベントと判定した場合（ステップＳ１００１：Ｙｅｓ）、判定部１３５は、当該イベントに対応するスクリプトファイルが存在するか否か判定する（ステップＳ１００２）存在しないと判定した場合（ステップＳ１００２：Ｎｏ）、処理を終了する。
【００７５】
一方、実行すべきスクリプトファイルが存在すると判定された場合（ステップＳ１００２：Ｙｅｓ）、当該スクリプトファイルをロードする（ステップＳ１００３）。これにより、言語処理実行部１２４において、当該スクリプトファイルの実行が可能となる。
【００７６】
上述した処理手順により、コマンドを挿入する必要のあるイベントに対してのみスクリプトファイルを用意すればよくなり、カスタマイズ性の向上につながる。
【００７７】
次に、以上のように構成された本実施の形態にかかる情報処理装置１００におけるジョブ終了時の処理について説明する。図１１は、本実施の形態にかかる情報処理装置１００における上述した処理の手順を示すフローチャートである。
【００７８】
まず、ＧＤＩ１１２から、イベント受信部１３１に対して、ジョブの終了を要求するイベントを送信する（ステップＳ１１０１）。次に、イベント受信部１３１が、当該イベントを受信したため、ジョブ終了時のジョブコマンドの生成を、描画コマンド生成部１３２に対して要求する（ステップＳ１１０２）。当該要求を受け付けた描画コマンド生成部１３２は、DEVMODE構造体やPrinterDriverDataレジストリを読み込み、設定一覧データを生成する。
【００７９】
そのあと、描画コマンド生成部１３２が、ジョブ終了時のコマンド生成を、ジョブフック部１３３に要求する（ステップＳ１１０３）。その際、生成した設定一覧データを、ジョブフック部１３３に受け渡す。
【００８０】
次に、ジョブフック部１３３の判定部１３５が、当該イベントに対応するスクリプトファイルを実行すべきか判定する（ステップＳ１１０４）。当該判定は、図９のステップＳ９０４と同様とする。また、本シーケンス図では、スクリプトファイルを実行すると判定された場合について説明する。
【００８１】
次に、スクリプトファイルを実行すると判定した場合、フィルタ部１３６が、受け渡された設定一覧データに含まれているパラメータに一部を変換（フィルタリング）する（ステップＳ１１０５）。当該変換は、図９で示した暗号化処理等も含まれているものとする。
【００８２】
そして、ジョブフック部１３３は、ステップＳ１１０４で存在すると判定されたスクリプトファイルを実行する（ステップＳ１１０６）。それと共に、ジョブフック部１３３は、言語処理実行部１２４に対して、実行すべき所定の関数名を指示する。
【００８３】
その後、言語処理実行部１２４が、呼び出されたスクリプトファイル(EndJob.lua)が保持する、指示された関数名の関数（GenerateCommand()）を呼び出す（ステップＳ１１０７）。そして、言語処理実行部１２４により実行されたEndJob.luaが、呼び出された関数から、コマンドストリームを生成し、言語処理実行部１２４に対して受け渡す（ステップＳ１１０８）。つまり、言語処理実行部１２４が、EndJob.luaに基づいて、コマンドストリームを生成する。なお、実行結果としてコマンドが一つも生成されなかった場合には、そのまま空ストリームを返して終了する。
【００８４】
そして、言語処理実行部１２４も、受け渡されたコマンドストリームを、ジョブフック部１３３に出力する（ステップＳ１１０９）。その後、ジョブフック部１３３も、入力されたコマンドストリームを、描画コマンド生成部１３２に対して出力する（ステップＳ１１１０）。そして、送信部１２５が、ジョブ開始から保持していたコマンドストリームを、スプーラ１１３にスプールさせるよう、スプーラ１１３に対して送信する（ステップＳ１１１１）。
【００８５】
そして、描画コマンド生成部１３２から、イベント受信部１３１に対して処理が終了したことを通知する（ステップＳ１１１２）。さらに、イベント受信部１３１は、ＧＤＩ１１２に対して処理が終了したことを通知する（ステップＳ１１１３）。
【００８６】
上述した処理手順により、生成されたコマンドがスプーラ１１３に格納される。そして、スプーラ１１３から所定のタイミングで、プリンタ１５０に対して、スプールされていたコマンドを出力することで、当該コマンドがプリンタ１５０で実行される。
【００８７】
上述したように本実施の形態にかかるプリンタドライバ１１１では、ＰＪＬコマンドを生成する部分をスクリプトファイルとして保持することとしたため、動的にプリンタ１５０に対して出力されるジョブコマンドを変更可能とした。これにより、機能を追加した場合にプリンタドライバ１１１の作成や再コンパイルが不要になり、開発効率を向上させることを可能とした。そして、本実施の形態にかかるプリンタドライバ１１１では、プリンタ１５０に送信するコマンドを変更する際の作業負担を軽減することができる。
【００８８】
さらには、本実施の形態では、lua言語などのスクリプトでコマンドを生成できるため、設定値と当該設定値の時に実行するコマンドとを対応付けたテーブルなどと比べて、複雑なロジックで生成するコマンドを設定できるため、より状況に適したコマンドの生成を可能としている。
【００８９】
また、上述した各実施の形態に限定されるものではなく、以下に例示するような種々の変形が可能である。
【００９０】
（変形例１）
上述した第１の実施の形態において、スクリプトファイルを実行するインタプリタとして、言語処理実行部１２４が、プリンタドライバ１１１内部に保持された例について説明した。しかしながら、上述した実施形態に制限するものではなく、プリンタドライバ１１１の外部でスクリプトファイルを実行しても良い。外部で実行する例としては、例えば、ブラウザに格納されている構成モジュールをスクリプトファイル（例えばJscript）の処理系として用いても良い。そこで、変形例として、ブラウザでスクリプトファイルを実施する例について説明する。
【００９１】
なお、本実施の形態では、インタプリタをプリンタドライバ１１１の内部に保持する例について説明した。しかしながら、スクリプトファイルの実行手法としてこのような実施の形態に制限するものではなく、ブラウザに格納されている構成モジュールである、スクリプトファイル（例えばJscript）の処理系を利用しても良い。この場合、上述した言語処理実行部がインタプリタではなく、ブラウザのモジュールを呼び出す構成とする。
【００９２】
本変形例にかかるプリンタドライバでは、言語処理実行部から、ブラウザを呼び出すことで、スクリプトファイルを実行できる。なお、スクリプトファイルは、lua形式ではなく、ブラウザで読み出すことが可能な形式である必要があり、例えばJscript形式が考えられる。そして、ジョブフック部は、イベントに対応するスクリプトファイルを特定した後、当該言語処理実行部がスクリプトファイルを実行するようブラウザに対して要求する。その際に、上述した設定一覧データについても、引数として受け渡す。これにより、ブラウザが備える構成モジュール（スクリプト実行エンジン）が、スクリプトファイルを実行することで、コマンドが生成される。そして、ブラウザで生成されたコマンドは、本変形例のジョブフック部が受け取る。これにより、外部で実行した場合でも、第１の実施の形態と同様の効果を得ることができる。なお、他の処理については第１の実施の形態と同様として説明を省略する。本変形例では、スクリプトファイルを読み出すためのエンジンが不要となり、プリンタドライバ１１１の開発負担をさらに軽減することができる。なお、外部のモジュールとして、ブラウザの構成モジュールに制限するものではなく、他のモジュールを用いても良い。
【００９３】
本実施の形態の情報処理装置１００は、図１２に示すように、ＣＰＵ１２０１と、ＲＯＭ（Read  Only  Memory）１２０２と、ＲＡＭ１２０３と、通信Ｉ／Ｆ１０３と、外部記憶装置としてＨＤＤ１２０４と、ディスプレイ装置などの表示装置１２０５と、これらを接続するバス１２０６と、を備えており、通常のコンピュータを利用したハードウェア構成となっている。
【００９４】
本実施形態の情報処理装置１００で実行されるプリンタドライバプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【００９５】
また、本実施形態の情報処理装置１００で実行されるプリンタドライバプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、本実施形態の情報処理装置１００で実行されるプリンタドライバプログラムをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
【００９６】
また、本実施形態のプリンタドライバプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【００９７】
本実施の形態の情報処理装置１００で実行されるプリンタドライバプログラムは、上述した各部（ＵＩドライバ１２１、グラフィックドライバ１２３、言語処理実行部１２４、送信部１２５）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ１２０１が上記記憶媒体からプリンタドライバプログラムを読み出して実行することにより上記各部が主記憶装置上（ＲＡＭ１２０３）にロードされ、ＵＩドライバ１２１、グラフィックドライバ１２３、言語処理実行部１２４、送信部１２５がＲＡＭ１２０３上に生成されるようになっている。
【符号の説明】
【００９８】
１００  情報処理装置
１０１  アプリケーション
１０２  ＯＳ
１０３  通信Ｉ／Ｆ
１１１  プリンタドライバ
１１２  ＧＤＩ
１１３  スプーラ
１２１  ＵＩドライバ
１２２  スクリプトファイル記憶部
１２３  グラフィックドライバ
１２４  言語処理実行部
１２５  送信部
１３１  イベント受信部
１３２  描画コマンド生成部
１３３  ジョブフック部
１３４  イベント保持部
１３５  判定部
１３６  フィルタ部
１３７  暗号化部
１５０  プリンタ
【先行技術文献】
【特許文献】
【００９９】
【特許文献１】特開２００８−９９６７号公報
【図１】
0005499584.tif 000002
【図２】
0005499584.tif 000003
【図３】
0005499584.tif 000004
【図４】
0005499584.tif 000005
【図５】
0005499584.tif 000006
【図６】
0005499584.tif 000007
【図７】
0005499584.tif 000008
【図８】
0005499584.tif 000009
【図９】
0005499584.tif 000010
【図１０】
0005499584.tif 000011
【図１１】
0005499584.tif 000012
【図１２】
0005499584.tif 000013