(57)【要約】【課題】印刷機能の設定の競合を判断する禁則処理を効率的に実施する。【解決手段】印刷装置に印刷を指示するコンピュータ装置で動作し、印刷機能の設定が競合する禁則を検証／解決する禁則処理をスクリプト言語で行うプリンタドライバであって、前記コンピュータ装置に、PrintTicketに対する禁則処理に際し、前記PrintTicketから印刷機能の設定項目及び設定値を取得してテーブルに設定する第１処理、前記テーブルを参照して禁則の検証を行う第２処理、前記PrintTicketの設定項目の内、禁則が発生している設定項目の設定値を禁則が発生しない設定値に書き替える第３処理、をこの順に実行させる。【選択図】図６
2015215654.tif 000002
【特許請求の範囲】
【請求項１】
印刷装置に印刷を指示するコンピュータ装置で動作するプリンタドライバであって、
前記コンピュータ装置に、
PrintTicketに対する禁則処理に際し、
前記PrintTicketから印刷機能の設定項目及び設定値を取得してチェック用データを生成する第１処理、
前記チェック用データを参照して禁則の検証を行う第２処理、
前記PrintTicketの設定項目の内、禁則が発生している設定項目の設定値を禁則が発生しない設定値に書き替える第３処理、をこの順に実行させる、
ことを特徴とするプリンタドライバ。
【請求項２】
前記第２処理では、前記チェック用データの設定項目の内、禁則が発生している設定項目の設定値を禁則が発生しない設定値に書き替えると共に、設定値を書き替えたことを示す情報を付加し、
前記第３処理では、前記チェック用データに付加した前記情報を参照して、前記PrintTicketの設定値を前記チェック用データの設定値に書き替える、
ことを特徴とする請求項１に記載のプリンタドライバ。
【請求項３】
前記第１処理では、前記PrintTicketの設定項目の内、予め定めた１又は複数の設定項目と当該設定項目の設定値のみを取得する、
ことを特徴とする請求項１又は２に記載のプリンタドライバ。
【請求項４】
前記第１処理では、前記PrintTicketの設定項目の内、前記禁則の検証を行う禁則条件式が参照する１又は複数の設定項目と当該設定項目の設定値のみを取得する、
ことを特徴とする請求項１又は２に記載のプリンタドライバ。
【請求項５】
前記禁則条件式は複数であり、
前記第２処理では、前記禁則条件式毎に前記禁則の検証を行う、
ことを特徴とする請求項４に記載のプリンタドライバ。
【請求項６】
前記PrintTicketはXML（Extensible Markup Language）形式であり、前記チェック用データはテキスト形式である、
ことを特徴とする請求項１乃至５のいずれか一に記載のプリンタドライバ。
【請求項７】
前記プリンタドライバは、Windows（登録商標）のオペレーティングシステム上で動作するversion4のプリンタドライバである、
ことを特徴とする請求項１乃至６のいずれか一に記載のプリンタドライバ。
【請求項８】
前記設定項目は、Featureエレメント又はParameterInitエレメントであり、前記設定値は、Optionエレメント又はValueエレメントである、
ことを特徴とする請求項７に記載のプリンタドライバ。
【請求項９】
予め、禁則が発生していない状態のPrintTicketから同一性判断情報を算出して保存しておき、前記第１処理の前に、前記PrintTicketから同一性判断情報を算出し、前記保存した同一性判断情報と前記算出した同一性判断情報とが一致する場合は、前記第１乃至第３の処理を行わず、前記保存した同一性判断情報と前記算出した同一性判断情報とが異なる場合は、前記第１乃至第３の処理を行う、
ことを特徴とする請求項１乃至９のいずれか一に記載のプリンタドライバ。
【請求項１０】
前記同一性判断情報は、ハッシュ値又はチェックサムである、
ことを特徴とする請求項９に記載のプリンタドライバ。
【請求項１１】
印刷装置に印刷を指示するコンピュータ装置で動作するプリンタドライバの禁則処理方法であって、
PrintTicketから印刷機能の設定項目及び設定値を取得してチェック用データを生成する第１処理と、
前記チェック用データを参照して禁則の検証を行う第２処理と、
前記PrintTicketの設定項目の内、禁則が発生している設定項目の設定値を禁則が発生しない設定値に書き替える第３処理と、をこの順に実行する、
ことを特徴とするプリンタドライバの禁則処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンタドライバ及びプリンタドライバの禁則処理方法に関し、特に、Windows（登録商標、以下省略）のオペレーティングシステム（OS：Operating System）上で動作するプリンタドライバ及び当該プリンタドライバの禁則処理方法に関する。
【背景技術】
【０００２】
WindowsOS上で動作するプリンタドライバに関して、Microsoft（登録商標、以下省略）社からハードウェアメーカー向けのガイドラインが示されており、ハードウェアメーカーでは、このガイドラインに従って、Windows2000〜Windows7を想定したVersion3のプリンタドライバを提供している。
【０００３】
その後、WindowsOSとしてWindows8やServer2012が登場しており、特にWindows8では、UI（User Interface）がタイル状のユーザーインタフェースであるMetroスタイルに変更されたことから、ハードウェアメーカーでは、新しいプリンタドライバアーキテクチャを採用したVersion4のプリンタドライバの開発を進めている。
【０００４】
このVersion4のプリンタドライバモデルは、大別するとPrinter Driver core部と印刷設定UI（User Interface）部の２つのレイヤーで構成される。これら２つのレイヤーはプロセス分離が図られており、個別に提供することができるようになっている。
【０００５】
Printer Driver core部は、印刷機能を提供するアプリケーションであり、各印刷機能を定義するGPD（Generic Printer Description）などのデータファイルを元に、PrintCapabilitiesと呼ばれる印刷機能情報とPrintTicketと呼ばれる印刷設定情報とを生成すると共に、印刷機能の設定の競合を処理する。また、印刷設定UI部は、Printer Driver core部から独立したアプリケーションであり、Printer Driver core部から提供されるPrintCapabilitiesとPrintTicketとを元にして印刷設定画面の提供を行う。
【０００６】
これらのプリンタドライバでは、印刷処理が正しく実行されるように、印刷機能の設定の競合を判断する（禁則処理と呼ぶ。）が、禁則処理の時間が長くなると、印刷開始が遅れる。この問題に対して、例えば、下記特許文献１では、印刷装置の印刷処理に関する情報処理を実行する印刷ドライバーであって、印刷に関する禁則設定が構造化言語で記述されている構造化データから多次元配列したバイナリデータである禁則設定データへ変換し、該変換した禁則設定データを記憶手段に保存させる変換記憶モジュールと、前記保存した禁則設定データを利用して禁則条件を判定し該判定結果を出力する出力モジュールと、を備えた印刷ドライバーを開示しており、構造化データをバイナリデータである禁則設定データに変換することで禁則処理の高速化を図っている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−２２６６９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記禁則処理に関し、Version3のプリンタドライバでは、C/C++などの言語で処理を行うため、処理時間は短い。しかしながら、Version4のプリンタドライバでは、JavaScript（登録商標、以下省略）のようなスクリプト言語で処理を行うため、処理に時間がかかる。
【０００９】
具体的には、Version4のプリンタドライバでは、アプリケーションやOSからの禁則処理の指示に対し、JavaScriptで定義されたvalidatePrintTicket()と呼ばれる関数を呼び出し、PrintTicketに設定されている現在の設定値に禁則が発生しないかを検証し、検証の結果、禁則がある場合には禁則の解決を行い、禁則の解決を行ったか否かを戻り値としてアプリケーションやOSに返す処理を実行するため、処理に時間がかかる。
【００１０】
更に、このvalidatePrintTicket()関数が呼び出される回数はアプリケーションやOSに依存しており、一回の印刷実行時に複数回呼び出され、同一のPrintTicketに対して何度も禁則処理の指示が出る場合があるため、禁則処理時間は更に長くなり、C/C++などの言語で同等の処理を行った場合に比べて、５〜１０倍程度にもなる。この問題はVersion4のプリンタドライバで顕在化した問題であり、禁則処理時間が長くなることによって印刷開始が遅れ、ユーザの利便性を著しく損なうことになる。
【００１１】
本発明は、上記問題点に鑑みてなされたものであって、その主たる目的は、印刷機能の設定の競合を判断する禁則処理を効率的に実施することができるプリンタドライバ及びプリンタドライバの禁則処理方法を提供することにある。
【課題を解決するための手段】
【００１２】
本発明の一側面は、印刷装置に印刷を指示するコンピュータ装置で動作し、印刷機能の設定が競合する禁則を検証／解決する禁則処理をスクリプト言語で行うプリンタドライバであって、前記コンピュータ装置に、PrintTicketに対する禁則処理に際し、前記PrintTicketから印刷機能の設定項目及び設定値を取得してチェック用データを生成する第１処理、前記チェック用データを参照して禁則の検証を行う第２処理、前記PrintTicketの設定項目の内、禁則が発生している設定項目の設定値を禁則が発生しない設定値に書き替える第３処理、をこの順に実行させることを特徴とする。
【００１３】
本発明の一側面は、印刷装置に印刷を指示するコンピュータ装置で動作し、印刷機能の設定が競合する禁則を検証／解決する禁則処理をスクリプト言語で行うプリンタドライバの禁則処理方法であって、PrintTicketから印刷機能の設定項目及び設定値を取得してチェック用データを生成する第１処理と、前記チェック用データを参照して禁則の検証を行う第２処理と、前記PrintTicketの設定項目の内、禁則が発生している設定項目の設定値を禁則が発生しない設定値に書き替える第３処理と、をこの順に実行することを特徴とする。
【発明の効果】
【００１４】
本発明のプリンタドライバ及びプリンタドライバの禁則処理方法によれば、印刷機能の設定の競合を判断する禁則処理を効率的に実施することができる。
【００１５】
その理由は、プリンタドライバ（禁則JavaScript部）は、禁則処理に際して、検証対象のPrintTicketから印刷機能の設定項目及び設定値を読み出してチェック用データを生成し、当該チェック用データを参照して禁則の検証を行い、禁則が発生している設定項目に対して、チェック用データの設定値を禁則が発生しない設定値に書き換えると共に設定値を書き替えたことを示す情報を付加し、チェック用データに付加した情報を参照して、PrintTicketの設定値を書き替える制御を行うからである。
【００１６】
これにより、禁則条件式毎にデータサイズの大きいPrintTicketを読み込む必要がなくなるため、JavaScriptのようなスクリプト言語で禁則処理を行う場合であっても、禁則処理時間を短縮して印刷開始までの時間を短くすることができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の一実施例に係る印刷システムの構成を模式的に示す図である。
【図２】本発明の一実施例に係るコンピュータ装置の構成を示すブロック図である。
【図３】本発明の一実施例に係るコンピュータ装置の機能を示すブロック図である。
【図４】本発明の一実施例に係るGPDファイルの一例である。
【図５】本発明の一実施例に係るコンピュータ装置の禁則処理を示すフローチャート図である。
【図６】本発明の一実施例に係るコンピュータ装置の禁則処理（禁則の検証処理）を示すフローチャート図である。
【図７】本発明の一実施例に係るPrintTicketの一例（検証対象となるPrintTicket(1)）である。
【図８】本発明の一実施例に係るPrintTicketの一例（PrintTicket(1)に対して禁則処理を行った後のPrintTicket(2)）である。
【図９】本発明の一実施例に係る禁則処理で利用するハッシュコードテーブルの一例である。
【図１０】本発明の一実施例に係る禁則処理で利用するハッシュ値が付加されたPrintTicketの一例である。
【図１１】本発明の一実施例に係る禁則処理で利用する設定項目リストの一例である。
【図１２】本発明の一実施例に係る設定状態テーブル（図１１の設定項目に対して禁則処理前の設定値を記述した状態）の一例である。
【図１３】本発明の一実施例に係る設定状態テーブル（図１１の設定項目に対して禁則処理後の設定値を記述した状態）の一例である。
【図１４】本発明の一実施例に係る禁則処理で利用する禁則条件式の一例である。
【図１５】本発明の一実施例に係る禁則処理制御の効果を説明する図であり、（ａ）はハッシュ値の比較処理を行った場合の効果、（ｂ）は、設定状態テーブルを利用して禁則処理を行った場合の効果、（ｃ）は両方の処理を行った場合の効果を示している。
【図１６】本発明の一実施例に係る禁則処理を模式的に示す概念図である。
【図１７】本発明の禁則処理と従来の禁則処理とを比較する図である。
【発明を実施するための形態】
【００１８】
背景技術で示したように、ハードウェアメーカーにより、WindowsOSに応じたプリンタドライバが提供されており、新たなWindowsOSであるWindows8やServer2012向けに、Version4のプリンタドライバの開発が行われている。
【００１９】
このVersion4のプリンタドライバでは、JavaScriptなどのスクリプト言語で禁則処理を行う必要があるため、C/C++などの言語で同等の処理を行った場合に比べて禁則処理に時間がかかる。特に、禁則の検証を行う関数であるvalidatePrintTicket()は、一回の印刷実行時に複数回呼び出され、同一のPrintTicketに対して何度も禁則の検証を行うため、禁則処理の時間が長くなることによって印刷開始が遅れるという問題が発生する。
【００２０】
この問題について、実測したデータを元に説明する。表１は、印刷設定画面で印刷ボタンを押してから印刷データの作成完了までに要する時間を、禁則処理を行った場合と行わなかった場合の双方で５回計測した時の平均値を示している。なお、計測対象のテストデータである”SP03P_AC.pdf”は１ページ、”J9.doc”は５ページである。また、測定環境は、OS：Windows8 Pro、CPU：Intel(R) Core(TM)i5-2400@3.10GHz、Memory：8.00GB、HDD：400GB(Remaining：100GB)、Application：Adobe reader 11.0.3、Application：Microsoft Word 2010である。
【００２１】
【表１】
2015215654.tif 000003
【００２２】
表１に示すように、計測対象のテストデータでは、禁則処理に要する時間（禁則処理を行った場合と行わなかった場合の計測時間を差分）が、禁則処理を行った場合の印刷データ作成完了までに要する時間の約４５〜７０％の範囲となっており、印刷処理に際して禁則処理時間が占める割合は非常に大きい。従って、迅速に印刷処理を実施するためには、禁則処理時間を短くすることが重要である。
【００２３】
この点に関し、従来のVersion3のプリンタドライバはC/C++で処理を行うため、禁則処理時間は１秒かからない程度であり、禁則処理は問題とはなっていなかった。これに対して、Version4のプリンタドライバでは、JavaScriptなどのスクリプト言語で処理を行うため、禁則処理時間が長くなり、禁則処理の問題が顕在化している。特に、OSやアプリケーションから同一のPrintTicketに対して何度も禁則処理の指示が出ていることが判明しており、同一のPrintTicketに対して禁則処理を何度も繰り返すことによって禁則処理時間が更に長くなり、禁則処理時間の短縮が求められている。
【００２４】
そこで、本発明の一実施の形態では、禁則の検証に際して、禁則条件式毎に、データサイズの大きいPrintTicketを読み込むことが禁則処理の時間を長くする大きな要因になっていることに着目し、JavaScriptなどのスクリプト言語で禁則処理を行うプリンタドライバにおいて、XML（Extensible Markup Language）などの構造化言語で記述されたPrintTicketから印刷機能の設定項目及び設定値を読み込んでデータサイズの小さいチェック用データを生成し、そのチェック用データを用いて禁則の検証を行うようにする。具体的には、禁則条件式毎にチェック用データを読み込んで禁則の検証を行い、禁則が発生している設定項目に対して、チェック用データの設定値を禁則が発生しない設定値に書き替えると共に、設定値を書き替えたことを示す情報を付加する。そして、禁則の検証が終了したら、チェック用データに付加した情報を参照して、禁則が発生している設定項目を特定し、PrintTicketの当該設定項目の設定値をチェック用データの設定値に書き替えるようにする。
【００２５】
このような制御を行った場合の効果について説明する。図１７は、PrintTicketを読み込む従来の手法とテーブルを読み込む本願の手法とを比較する図である。図１７（ａ）に示す従来の手法では、XMLなどの構造化言語で記述された、データサイズの大きいPrintTicketから設定項目及び設定値を読み取る必要があり、また、禁則の検証に必要がない部分も読み込む必要があり、この処理を禁則条件式毎に行うために処理時間が長くなる。一方、図１７（ｂ）に示す本願の手法では、PrintTicketに比べてデータサイズの小さいチェック用データ（ここではテーブル）から禁則の検証に必要な設定項目及び設定値のみを読み取ることができるため、処理時間を大幅に削減することができる。特に、チェック用データをXML形式ではなくテキスト形式などにすることにより、チェック用データのデータサイズをより小さくすることができると共に読み取り処理が簡単になるため、処理時間を更に削減することができる。
【００２６】
この効果を計測値に基づいて説明する。表２は、印刷設定画面で印刷ボタンを押してから印刷データの作成完了までに要する時間を、上記禁則処理制御を適用しない場合と適用した場合の双方で５回計測した時の平均値を示している。
【００２７】
【表２】
2015215654.tif 000004
【００２８】
表２より、印刷データの作成完了までに要する時間に関しては、上記禁則処理を適用することによって２０〜３０％程度、禁則処理時間に関しては、上記禁則処理を適用することによって４０％程度削減することができ、印刷データ作成完了までの時間を短縮することによってパフォーマンスの改善を図ることができる。
【実施例】
【００２９】
上記した本発明の実施の形態についてさらに詳細に説明すべく、本発明の一実施例に係るプリンタドライバ及びプリンタドライバの禁則処理方法について、図１乃至図１６を参照して説明する。図１は、本実施例の印刷システムの構成を模式的に示す図であり、図２は、本実施例のコンピュータ装置の構成を示すブロック図、図３は、コンピュータ装置の機能を示すブロック図である。また、図４は、GPDファイルの一例であり、図５及び図６は、本実施例のコンピュータ装置の禁則処理を示すフローチャート図である。また、図７及び図８は、本実施例のPrintTicketの一例であり、図９は、ハッシュコードテーブルの一例、図１０は、ハッシュ値が付加されたPrintTicketの一例である。また、図１１は、設定項目リストの一例であり、図１２及び図１３は、設定状態テーブルの一例である。また、図１４は、禁則条件式の一例であり、図１５は、本実施例の禁則処理制御の効果を説明する図、図１６は、本実施例の禁則処理を模式的に示す概念図である。
【００３０】
図１に示すように、本実施例の印刷システムは、印刷指示に従って印刷処理を実行する印刷装置１０と、印刷指示を行う印刷指示装置（コンピュータ装置２０と呼ぶ。）とで構成され、これらはＬＡＮ（Local Area Network）などの無線ネットワーク、若しくはＵＳＢ（Universal Serial Bus）などを介した有線ネットワークにより接続される。
【００３１】
印刷装置１０は、一般的なプリンタやＭＦＰ（Multi Function Peripheral）などであり、コンピュータ装置２０から送信される印刷データを解析し、印刷データの各ページをラスタライズしてページ毎の画像データを生成し、電子写真方式や静電記録方式等の作像プロセスを利用して画像データに基づく画像を用紙に印刷する機能を備えている。
【００３２】
コンピュータ装置２０は、パーソナルコンピュータやWindowsOS上で動作するモバイル機器（スマートフォンやタブレット端末）などであり、図２に示すように、制御部２１と、記憶部２２と、通信Ｉ／Ｆ部２３と、表示部２４と、操作部２５などで構成される。
【００３３】
制御部２１は、ＣＰＵ（Central Processing Unit）２１ａと、ＲＯＭ（Read Only Memory）２１ｂやＲＡＭ（Random Access Memory）２１ｃなどのメモリとで構成される。ＣＰＵ２１ａは、コンピュータ装置２０の動作を制御するためのプログラム、OS（本実施例では、Version4のプリンタドライバが動作可能なWindowsOS）、アプリケーション、印刷装置１０を制御するプリンタドライバ（本実施例では、JavaScriptなどのスクリプト言語で禁則処理を行うVersion4のプリンタドライバなど）をＲＯＭ２１ｂ又は記憶部２２から読み出してＲＡＭ２１ｃに展開し実行する。なお、アプリケーション、Printer Driver core部、印刷設定UI部については後述する。
【００３４】
記憶部２２は、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などで構成され、プログラムや文書データ、印刷データなどを記憶する。
【００３５】
通信Ｉ／Ｆ部２３は、ＮＩＣ（Network Interface Card）やモデムなどで構成され、無線ネットワーク、若しくは、有線ネットワークを介して、印刷装置１０とのデータ通信を行う。
【００３６】
表示部２４は、ＬＣＤ（Liquid Crystal Display）などで構成され、アプリケーションの画面や印刷設定UI部で生成された印刷設定画面などを表示する。
【００３７】
操作部２５は、マウスやキーボード、表示部２４上に形成されたタッチセンサなどで構成され、文書の作成や印刷装置１０の印刷機能の設定等の操作を可能にする。
【００３８】
図３は、コンピュータ装置２０の制御部２１の機能を示すブロック図である。コンピュータ装置２０の制御部２１は、ＣＰＵ２１ａがプログラムを実行することにより、アプリケーション３０、Printer Driver core部４０、印刷設定UI部５０などとして機能する。
【００３９】
アプリケーション３０は、OS上で動作するプログラム（例えば、WindowsOS上で動作するMicrosoft Officeなど）であり、印刷対象となる文書データを作成する。また、OSやアプリケーション３０は、印刷処理の各段階で、Printer Driver core部４０に印刷機能の設定の競合を判断する禁則処理を指示する。
【００４０】
Printer Driver core部４０は、OS上で動作するプログラムであり、アプリケーション３０、印刷設定UI部５０と連動して、印刷装置１０に印刷指示を行う。このPrinter Driver core部４０は、GPDファイル４１、UserPropertybag４２、構成処理部４３、禁則JavaScript部４４、レンダリング処理部４５、印刷フィルタ４６などで構成される。
【００４１】
GPDファイル４１は、構成ファイルの一つであり、印刷装置１０の各印刷機能を定義する。UserPropertybag４２は、データ保存領域であり、後述するハッシュコードテーブルや設定項目リスト、設定設定状態テーブル、禁則条件式などを保存する。構成処理部４３は、GPDファイル４１を元に、XMLなどの構造化言語で記述したユーザが設定可能な印刷機能の設定項目と設定可能な設定値とが記述されたPrintCapabilities（印刷機能情報）の生成、PrintCapabilitiesに記述されている設定値の中からユーザが選択した設定値をXMLなどの構造化言語で記述したPrintTicket（印刷設定情報）の生成、及び禁則JavaScript部４４の呼び出しを行う。
【００４２】
禁則JavaScript部４４は、PrintTicket／PrintCapabilitiesに対して、印刷機能の設定の競合を処理する。例えば、第１の機能（面付け機能など）の設定と第２の機能（パンチの機能など）の設定とが両立しない場合に、一方の機能の設定を他方の機能の設定と両立するように変更する。また、禁則JavaScript部４４は、JavaScriptを用いたPrintTicket／PrintCapabilitiesの編集を可能にする。レンダリング処理部４５は、アプリケーション３０からの印刷命令を印刷装置１０にて解釈可能な言語（PDL：Page Description Languageなど）に変換する。印刷フィルタ４６は、レンダリング時に描画命令や印刷制御コマンドの編集を行う。
【００４３】
印刷設定UI部５０は、OS上で動作するプログラムであり、PT／PC処理部５１、UI処理部５２などで構成される。
【００４４】
PT／PC処理部５１は、Printer Driver core部４０から取得したPrintTicket／PrintCapabilitiesを処理（解釈）する。UI処理部５２は、PT／PC処理部５１が解釈した、PrintTicket／PrintCapabilitiesの内容を元に印刷設定画面６０の生成及び表示を行う。
【００４５】
図４は、GPDファイル４１の一例である。図中の「*Feature:」にて、印刷機能の定義を行う。また、「*Feature:」の下位要素の「*Option:」にて、各印刷機能の設定値の定義を行う。この例では、Orientation、PaperSize、Stapleの印刷機能の定義を行っている。
【００４６】
なお、本実施例では、印刷機能を定義する構成ファイルとしてGPDファイル４１を使用する場合について説明するが、PPD（PostScript Printer Description）ファイルを使用する場合に対しても、本実施例の禁則処理方法を同様に適用することができる。
【００４７】
以下、本実施例のプリンタドライバの動作（禁則処理制御）について説明する。ＣＰＵ２１ａは、ＲＯＭ２１ｂに記憶したプリンタドライバを読み出し、ＲＡＭ２１ｃに展開して実行することにより、図５及び図６のフローチャート図の各ステップの処理を実現する。ここでは、構成処理部４３に呼び出される禁則JavaScript部４４内の関数であるvalidatePrintTicket()が行う処理を記載する。このvalidatePrintTicket()は、OSやアプリケーション３０がPrintTicketの検証が必要と判断した場合に呼び出される関数である。呼び出されるタイミングは印刷設定の変更時や印刷実行時である。そして印刷実行時には複数回この関数が呼び出される。
【００４８】
禁則処理にあたって、直ちに禁則の検証を行ってもよいが、印刷機能の設定が変わっていなければ禁則の検証を行う必要がないことから、本実施例では、必要に応じて、禁則が発生していない状態のPrintTicketに対してハッシュ値（元のデータから一定の計算手順により求められた、そのデータの特徴を表す固定長の擬似乱数）やチェックサム（データを分割し、それぞれのブロック内のデータを数値とみなして合計を取ったもの）などの情報（これらを総称して同一性判断情報と言う。）を算出して保存し、PrintTicketに対する禁則処理の開始時に当該PrintTicketから同一性判断情報を算出し、同一性判断情報に差異が無い場合は禁則の検証をスキップして、禁則処理の更なる時間短縮を図る。
【００４９】
具体的には、まず、禁則JavaScript部４４は、検証対象のPrintTicketから同一性判断情報（本実施例ではハッシュ値とする。）を算出する（Ｓ１０１）。図７は、検証対象のPrintTicketの一例であり、PrintTicket(1)では、印刷設定として”JobCopiesAllDocuments”が”1”（すなわち、コピー枚数が１部）、”PageMediaSize”が”ISOA3”（すなわち、用紙サイズがＡ３）、”PageInputBin”が”Tray4”（すなわち、給紙トレイがトレイ４）、”DocumentStaple”が”StapleDualLeft”（すなわち、ステープルが左２箇所綴じ）に設定されている。
【００５０】
次に、禁則JavaScript部４４は、UserPropertybag４２などに予め記憶したハッシュコードテーブルより、以前に検証を行った時に算出したハッシュ値の一覧を取得する（Ｓ１０２）。図９（ａ）は、ハッシュコードテーブルの一例であり、禁則が発生していない状態でのPrintTicketから算出されたハッシュコード（ハッシュ値）が保持されている。この例では、”1d43fe3c”と”4f3d274d”の２つのハッシュ値が記憶されている。なお、ハッシュコードテーブルには、検証対象のPrintTicketから算出したハッシュ値のみを記述してもよいが、印刷機能の設定項目と設定値の組み合わせは限られており、他のPrintTicketから算出したハッシュ値と一致する場合であっても、検証対象のPrintTicketの印刷機能の設定に競合が発生する蓋然性は低いと考えられることから、検証済みの全てのPrintTicketから算出したハッシュ値を記述してもよい。
【００５１】
次に、禁則JavaScript部４４は、Ｓ１０２にて取得したハッシュ値の一覧の中に、Ｓ１０１にて算出したハッシュ値が存在するかを判断する（Ｓ１０３）。ハッシュ値の一覧の中に、PrintTicket(1)から算出したハッシュ値が存在する場合（Ｓ１０３のＹｅｓ）、このPrintTicket(1)の印刷機能の設定には競合が発生せず、禁則の検証処理を実施する必要がないため、禁則JavaScript部４４は、禁則処理を終了させる。
【００５２】
一方、ハッシュ値の一覧の中に、PrintTicket(1)から算出したハッシュ値が存在しない場合（Ｓ１０３のＮｏ）、PrintTicket(1)の印刷機能の設定で競合が発生するか否かが分からないため、禁則JavaScript部４４は、禁則の検証処理を行う（Ｓ１０４）。このステップは本実施例の特徴部分であり、その詳細は後述する。
【００５３】
次に、禁則JavaScript部４４は、禁則の解決を行った検証済みのPrintTicketからハッシュ値を算出する（Ｓ１０５）。図８は、検証済みのPrintTicketの一例である。図８のPrintTicket(2)では、禁則の解決のために、”PageInputBin”に対するValueノードのname属性が”AutoSelect”に、”DocumentStaple”に対するValueノードのname属性が”None”に変更されている（図の破線の枠内参照）。
【００５４】
次に、禁則JavaScript部４４は、Ｓ１０５で算出したハッシュ値をハッシュコードテーブルに保存する（Ｓ１０６）。図９（ｂ）は、ハッシュコードテーブルの例であり、検証済みのPrintTicket(2)から算出されたハッシュ値（ここでは”6a5b341f”）がテーブルに追加されている（図の破線の枠内参照）。
【００５５】
このように、検証対象のPrintTicketから算出したハッシュ値が、ハッシュコードテーブルに記述されている、以前に検証を行った時に算出したハッシュ値のいずれかと一致する場合に禁則の検証処理を省略することにより、禁則処理時間を短縮し、印刷開始までの時間を短くすることができる。
【００５６】
なお、上記では、検証対象のPrintTicketから算出したハッシュ値をハッシュコードテーブルに保存する場合について説明したが、検証対象のPrintTicketから算出したハッシュ値をそのPrintTicket自身に保存することも可能である。例えば、図１０（ａ）に示すように、検証対象のPrintTicketからハッシュ値（ここでは”1d43fe3c”）を算出した後、このハッシュ値をPrintTicketの所定の場所（例えば末尾）にXML形式で記述する。次に、検証対象のPrintTicketに対して再度、禁則処理が要求された場合は、当該PrintTicketのハッシュ値以外の部分について再度ハッシュ値を算出し、算出したハッシュ値とPrintTicketに付加したハッシュ値とを比較する。ハッシュ値が一致する場合（図１０（ｂ）参照）は、PrintTicketの印刷機能の設定に競合が発生しないことから禁則の検証処理をスキップする。一方、ハッシュ値が一致しない場合（図１０（ｃ）参照）は、算出したハッシュ値（ここでは”4f3d274d”）をPrintTicketの所定の場所に付加する。その後、検証対象のPrintTicketに対して再度、禁則処理が要求された場合は、当該PrintTicketのハッシュ値以外の部分のハッシュ値とPrintTicketに付加した複数のハッシュ値とを比較し、算出したハッシュ値が複数のハッシュ値のいずれかと一致する場合は禁則の検証処理をスキップする。このように、ハッシュ値をPrintTicketに付加することによっても、上記と同様に禁則処理時間を短縮し、印刷開始までの時間を短くすることができる。
【００５７】
次に、本実施例の特徴部分であるＳ１０４の禁則の検証処理について説明する。前述したように、従来は、禁則の検証の都度、PrintTicketを読み込んでいたが、この方法では、データサイズの大きいPrintTicketを読み込む必要があり、かつ、禁則の検証処理に必要のない部分も読み込まなければならず、更に、後述する禁則条件式の１つ１つに対してPrintTicketを読み込む必要があるため、処理に時間がかかってしまう。そこで、本実施例では、PrintTicketから禁則の検証に必要な設定項目及び設定値を抽出してデータサイズの小さいチェック用データを作成し、作成したチェック用データを参照して禁則の検証処理を行うようにする。以下、図６のフローチャート図及び図１６の概念図を参照して説明する。
【００５８】
まず、禁則JavaScript部４４は、検証対象のPrintTicket（図７のPrintTicket(1)）を解析し、PrintTicketに記述された「設定項目」及び「設定値」を読み込む（Ｓ２０１）。
【００５９】
次に、禁則JavaScript部４４は、予め作成した設定項目リストを元にして、チェック用データ（本実施例では設定状態テーブルとする。）を作成する（Ｓ２０２及び図１６の（１））。図１１は、設定項目リストの一例であり、禁則条件式にて使用する設定項目名が列挙されている。この設定項目リストを元にして、PrintTicketから読み込んだ１又は複数の「設定項目」、「設定値」を設定状態テーブルに設定する。図１２は、設定状態テーブルの一例であり、図７に示すPrintTicket(1)および図１１に示す設定項目リストを元に生成される。「設定項目」は、PrintTicketのFeatureノードまたはParameterInitノードのname属性に相当する。「設定値」は、PrintTicketのValueノードの値またはOptionノードのname属性に相当する。また、「Changed」は本テーブルの設定値を変更した際にtrueとなる変更状態フラグである。なお、ここでは、設定項目リストを予め作成したが、後述する禁則条件式が使用する１又は複数の設定項目を特定し、特定した設定項目のみをPrintTicketから読み込むようにしてもよい。また、本実施例ではチェック用データとして設定状態テーブルを例示するが、チェック用データはテーブルの構造を有していなくてもよい。また、チェック用データのデータ形式は任意であり、PrintTicketと同様のxml形式としてもよいし、テキスト形式などとしてもよい。テキスト形式とした場合は、チェック用データのデータサイズをより小さくすることができると共に読み取り処理が簡単になるため、処理時間を更に短縮することが可能である。
【００６０】
次に、禁則JavaScript部４４は、印刷機能の設定の競合を判断するための禁則条件式を１行ずつ読み込む（Ｓ２０３）。図１４は、禁則条件式の一例である。具体的には、１行目は、「用紙サイズ＝Ａ３」かつ「給紙トレイ＝トレイ４」の場合には、「給紙トレイ＝自動」に変更することを表している。２行目は、「用紙サイズ＝Ａ３」かつ「ステープル＝左２箇所綴じ」の場合には、「ステープル＝なし」に変更することを表している。
【００６１】
次に、禁則JavaScript部４４は、図１２に示す設定状態テーブル(1)とＳ２０３にて読み込んだ禁則条件式とを用いて禁則の検証を実施する（Ｓ２０４及び図１６の（２））。具体的には、図１２の設定状態テーブル(1)に記述した設定項目及び設定値の組み合わせが、禁則条件式で規定された組み合わせに該当するかを判断する。ここで、従来の方法では、データサイズの大きいPrintTicket(1)と禁則条件式とを用いて禁則の検証を実施するために、禁則の検証に時間がかかっていたが、本実施例では、データサイズの小さい設定状態テーブル(1)と禁則条件式とを用いて禁則の検証を実施するため、禁則の検証に要する時間を大幅に短縮することができる。
【００６２】
Ｓ２０４の禁則の検証の結果、禁則が発生した場合（Ｓ２０５のＹｅｓ）には、禁則JavaScript部４４は、禁則条件式に従って設定値の変更を行い、禁則の解決を行い、設定状態テーブルの設定項目の内、禁則が発生している設定項目の設定値を禁則が発生しない設定値に書き替える（Ｓ２０６及び図１６の（３））。図１３は、禁則の検証が完了した後の設定状態テーブルの一例である。この例では、設定項目”psk:PageInputBin”の設定値が”psk:AutoSelect”に変更され、変更状態フラグ”Changed”が”true”になっている。また、設定項目”psk:DocumentStaple”の設定値が”psk:None”に変更され、変更状態フラグ”Changed”が”true”になっている（図の破線の枠内参照）。なお、禁則が発生しない場合（Ｓ２０５のＮｏ）は、禁則JavaScript部４４は何もせずにＳ２０７にスキップする。
【００６３】
次に、禁則JavaScript部４４は、次の禁則条件式が存在するかを判断し（Ｓ２０７）、次の禁則条件式が存在する場合はＳ２０３に戻り、図１４に示す禁則条件式が無くなるまで同様の処理を繰り返す。禁則条件式を全て判断したら、禁則の解決を行った後の設定値をPrintTicketに書き込む（Ｓ２０８及び図１６の（４））。具体的には、図１３に示す設定状態テーブル(2)を用いて、変更状態フラグ”Changed”が”true”になっている「設定項目」の「設定値」をPrintTicketに書き込む。図８は、設定値書き込み後のPrintTicketの一例であり、設定状態テーブル(2)と同様に、設定項目”psk:PageInputBin”の設定値が”psk:AutoSelect”に変更され、設定項目”psk:DocumentStaple”の設定値が”psk:None”に変更されている。
【００６４】
このように、予め作成した設定項目リストの設定項目及び設定値をPrintTicketから読み込んでデータサイズの小さい設定状態テーブルを作成し、この設定状態テーブルを用いて禁則の検証処理を実施することにより、データサイズが大きく、かつ、禁則の検証に必要がない部分を含むPrintTicketの全部を禁則条件式毎に読み取る従来の方法に比べて、禁則の検証に要する時間を大幅に短縮することができる。
【００６５】
以下、図５のフローチャート図に示したハッシュ値を比較して禁則の検証を省略する制御（必要に応じて実施する制御）と、図６のフローチャート図に示した設定状態テーブルを利用して禁則の検証を行う制御（本実施例の特徴となる制御）を実施した場合の禁則処理時間の削減効果について説明する。図１５は、上記制御の適用前と適用後の処理時間の測定結果（５回の計測値の平均）を比較する図である。なお、計測条件は、表１と同様であり、計測対象のデータである”SP03P_AC.pdf”は１ページ、”J9.doc”は５ページである。また、測定環境は、OS：Windows8 Pro、CPU：Intel(R) Core(TM)i5-2400@3.10GHz、Memory：8.00GB、HDD：400GB(Remaining：100GB)、Application：Adobe reader 11.0.3、Application：Microsoft Word 2010である。
【００６６】
図１５（ａ）は、ハッシュ値を比較して禁則の検証を省略する制御のみを適用した時の処理時間であり、設定状態テーブルを利用して禁則の検証を行う制御は含まれていない（すなわち、禁則条件式毎にPrintTicketを読み込んで禁則の検証を行っている）。図１５（ａ）から分かるように、ハッシュ値を比較して禁則の検証を省略する制御を適用することにより、適用しなかった場合に比べて、禁則処理時間を３０〜４０％程度削減することができ、印刷データ作成完了までの時間も、１７〜２０％程度削減することができる。
【００６７】
図１５（ｂ）は、設定状態テーブルを利用して禁則の検証を行う制御のみを適用した時の処理時間であり、ハッシュ値を比較して禁則の検証を省略する制御は含まれていない（すなわち、禁則処理の要求に対して必ず禁則の検証を行っている）。図１５（ｂ）から分かるように、設定状態テーブルを利用して禁則の検証を行う制御を適用することにより、適用しなかった場合に比べて、禁則処理時間を４０％程度削減することができ、印刷データ作成完了までの時間も、２０〜２２％程度削減することができ、ハッシュ値を比較して禁則の検証を省略する制御のみを適用した場合よりも削減効果が大きいことが分かる。
【００６８】
図１５（ｃ）は、ハッシュ値を比較して禁則の検証を省略する制御と設定状態テーブルを利用して禁則の検証を行う制御の双方を適用した時の処理時間である。図１５（ｃ）から分かるように、両方の制御を適用することにより、適用しなかった場合に比べて、禁則処理時間を６０％程度削減することができ、印刷データ作成完了までの時間も、３０〜４０％程度削減することができ、双方の制御を組み合わせることにより顕著な削減効果が得られることが分かる。
【００６９】
なお、本発明は上記実施例に限定されるものではなく、本発明の趣旨を逸脱しない限りにおいて、プリンタドライバの構成やその禁則処理方法は適宜変更可能である。
【００７０】
例えば、上記実施例では、Version4のプリンタドライバについて説明したが、JavaScriptなどのスクリプト言語で禁則処理を行う任意のプリンタドライバに対して、本発明を同様に適用することができる。
【産業上の利用可能性】
【００７１】
本発明は、JavaScriptなどのスクリプト言語で禁則処理を行うプリンタドライバ、特に、Version4のプリンタドライバ及び当該プリンタドライバを記録した記録媒体に利用可能である。
【符号の説明】
【００７２】
１０  印刷装置
２０  コンピュータ装置
２１  制御部
２１ａ  ＣＰＵ
２１ｂ  ＲＯＭ
２１ｃ  ＲＡＭ
２２  記憶部
２３  通信Ｉ／Ｆ部
２４  表示部
２５  操作部
３０  アプリケーション
４０  Printer Driver core部
４１  GPDファイル
４２  UserPropertybag
４３  構成処理部
４４  禁則JavaScript部
４５  レンダリング処理部
４６  印刷フィルタ
５０  印刷設定UI部
５１  PT／PC処理部
５２  UI処理部
６０  印刷設定画面
【図１】
2015215654.tif 000005
【図２】
2015215654.tif 000006
【図３】
2015215654.tif 000007
【図４】
2015215654.tif 000008
【図５】
2015215654.tif 000009
【図６】
2015215654.tif 000010
【図７】
2015215654.tif 000011
【図８】
2015215654.tif 000012
【図９】
2015215654.tif 000013
【図１０】
2015215654.tif 000014
【図１１】
2015215654.tif 000015
【図１２】
2015215654.tif 000016
【図１３】
2015215654.tif 000017
【図１４】
2015215654.tif 000018
【図１５】
2015215654.tif 000019
【図１６】
2015215654.tif 000020
【図１７】
2015215654.tif 000021