情報処理装置、方法、制御プログラム
【課題】 禁則ルールの元、所望の指示した印刷設定を固定化する。
【解決手段】 印刷装置の一例であるプリンタ214に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理するコンピュータを開示した。そして、外部記憶装置に、印刷設定の禁則を定義した禁則ルールを記憶する。そして、プリンタドライバのユーザインタフェースやXMLファイルを用いて、印刷設定の固定化を指示する。さらに、コンフィギュレーションモジュールは、固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げる。これは、ルール優先度設定の一例である。
【解決手段】 印刷装置の一例であるプリンタ214に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理するコンピュータを開示した。そして、外部記憶装置に、印刷設定の禁則を定義した禁則ルールを記憶する。そして、プリンタドライバのユーザインタフェースやXMLファイルを用いて、印刷設定の固定化を指示する。さらに、コンフィギュレーションモジュールは、固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げる。これは、ルール優先度設定の一例である。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プリンタドライバを含む印刷制御プログラムに関するものである。
【背景技術】
【0002】
情報処理装置の一例であるコンピュータ上で作成された文書や図といったファイルをアプリケーションから印刷する際には、プリンタドライバを使って描画データをプリンタ言語に変換しプリンタに送信することが行われる。用紙の種類や両面、カラー、給紙段といった設定は、アプリケーションもしくはプリンタドライバが提供するユーザインタフェースの印刷設定で、ユーザが設定したデータをプリンタコマンドとしてプリンタに送信する。
【0003】
プリンタドライバが持つ機能は年々増加する一方である。また、数百個の機能を持つプリンタドライバも少なくない。また、プリンタドライバの印刷設定を行うユーザインタフェースは、ユーザインタフェースからボタンを押して、さらに開くダイアログウィンドウが複数存在する。よって、これらのウィンドウのどこで所望の設定ができるのか迷うユーザも多い。そこでプリンタドライバは、ユーザのために機能の禁則処理(コンフリクト処理)を持っている。機能の禁則処理とは、ある機能を選択したときに、他の機能が使えなくなったり、他の設定値が変更されることを指す。たとえば多くのプリンタドライバでは、「はがき」と「ステイプル」を同時に設定することはできない。このとき、「はがき」を選択すると、プリンタドライバのユーザインタフェース上の「ステイプル」項目はグレーアウトしたり(特許文献1)する。また、設定することが出来ない項目の表示が隠れて選択することができなくなったり、その項目が選択できないという意味のアイコンを表示したりする(特許文献2)。また、設定することが出来ない項目についての警告としてメッセージが表示されたり(特許文献3)する。
【0004】
また、プリンタドライバの禁則処理はユーザインタフェース上の表示だけではない。アプリケーションソフトウェアによっても印刷設定は変更することができる。しかし、アプリケーションからの禁則状態にある設定がそのままプリンタドライバに渡される場合がある。この場合、プリンタドライバがその設定をプリンタコマンドに変換してしまうと、プリンタでエラーになってしまう。そこでプリンタドライバは、印刷する際にも機能の禁則処理を行い、印刷設定を変更して印刷可能な値にしている。
【0005】
一方で、セキュリティ意識の高まりやコストの削減などから、印刷設定の特定機能を固定したいという要求がある。たとえば、カラー機のプリンタでモノクロ印刷固定にすれば、印刷にかかるトナーやインクのコストを削減できる。また、1つのページに2ページ分を縮小して印刷する2Up印刷や、両面印刷を固定にすると、用紙が節約できる。
【0006】
しかし、値を固定する機能は、禁則処理とは相容れないことが多い。たとえば、両面印刷を固定にすると、両面できない用紙を選択したときにどのように禁則すればいいかという問題が発生する。従来では、プリンタドライバ自体をカスタマイズしてしまい、まったく別の専用ドライバを作成するといった方法が一般的であった。しかし、それではユーザの要望ごとにプリンタドライバを作成しなければならない。このため、外部のプラグインから新しい禁則処理ルールを追加することが考えられた(特許文献4)。さらに、可能な限り固定の設定を行ってみて禁則処理によって設定を変更できるときは印刷設定を変更する(特許文献5)などの方法があった。現在持っている禁則処理ルールと逆の禁則処理ルールを自動補完する技術が存在する。
【0007】
また、開発者は、ある機能名に対して、ONとなるすべてのルールを記述し、上記したとおり、OFFとなるルールを省略することができる。OFFとなるルールは推論エンジン302により自動生成される。逆に、開発者は、ある機能名に対して、OFFとなるすべてのルールを記述し、上記したとおり、ONとなるルールを省略することができる。ONとなるルールは推論エンジン302により自動生成される。開発者は、ある機能名に対して、ONとなるルール、OFFとなるルールのすべてを記述することもできる。この場合ルールは自動生成されない。左辺に機能名(ON)、機能名(OFF)の形式で記述された項に対して、右辺に項目を記述する場合には、左辺と同一のON/OFF形式にする。この場合にルールが自動生成される(特許文献6)。
【特許文献1】特開2003−99170
【特許文献2】特開2000−227847
【特許文献3】特開2000−225754
【特許文献4】特開2005−190467
【特許文献5】特開2007−272779
【特許文献6】特開2002−169669
【発明の開示】
【発明が解決しようとする課題】
【0008】
しかしながら、従来の方法では、完全に値を固定化することが困難であった。すなわち、外部のプラグインから禁則処理ルールを差し込む場合は、外部のプラグインがプリンタドライバの禁則処理ルール(コンフリクトルールともいう。)を予めすべて知っていなければならない。さらに、プリンタドライバ本体の機能が拡張し、禁則処理も拡張された場合は、外部のプラグインも新たに変更した禁則処理ルールを差し込まなければならなかった。また、禁則処理によって変更されることを許容する場合は、固定にしている値によっては確実に固定にできるとは限らなかった。逆のルールを自動補完する場合、特許文献6の方法では、設定値がON/OFFのもののみ自動補完するだけである。たとえば、両面をONにするという禁則処理ルールがある場合、両面をOFFにするという禁則処理ルールを自動補完するものである。設定値を固定にした際に禁則処理ルールに不都合がないようにするには、自動補完するルールを固定値に変更するというルールを補完すればよい。しかし、それ以前に評価された禁則処理ルールで値が変更されてしまっては、開発者またはユーザの意図した固定にならない可能性がある。また、設定値が2つ以上あるもの、たとえば用紙サイズのようなものには適用できない。他に、「お気に入り」のようなユーザが保存したプリセットされた複数の設定値を適用する際に、固定にした設定値と共に、固定にした設定値ではない違う値が「お気に入り」に含まれていると、値が変更されてしまい確実に固定にすることができなかった。
【0009】
本願は上記課題の少なくとも一つを鑑みてなされたものである。
【課題を解決するための手段】
【0010】
印刷装置に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理する情報処理装置において、印刷設定の競合を禁止する禁則を定義した禁則ルールを記憶する記憶手段と、印刷設定の固定化を指示する指示手段と、前記固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げて設定するルール優先度設定手段と、を備える情報処理装置が一例として開示される。
【発明の効果】
【0011】
本発明によれば、設定値を固定化しつつ、プリンタの禁則処理にしたがって印刷を行うことが可能であることから、管理者が確実に印刷設定を管理することが可能になるという効果がある。
【発明を実施するための最良の形態】
【0012】
(実施例)
以下、本発明を実施するための最良の形態について図面を用いて説明する。
【0013】
図1は本発明の一実施形態を示す印刷処理システムのブロック構成図である。なお、特に断らない限り、本発明の機能が実行されるのであれば、単体の機能であっても、複数の機器からなるシステムであっても、LAN、WAN等のネットワークを介して接続がなされ処理が行われるシステムであっても、本発明を適用できることは言うまでもない。
【0014】
図1において、コンピュータを用いたシステムのブロック構成図を示す。CPU101はROM102あるいはRAM103あるいは外部記憶装置105に格納されたプログラムに従って装置全体の制御を行う。RAM103はCPU101が各種処理を行う際のワークエリアとしても使用される。記憶装置105はオペレーティングシステム(OS)1054やアプリケーションソフト1051等を記録する。キーボードやマウスなどの入力機器は、入力I/F104を通じて、ユーザがコンピュータに対して各種指示を与えるためのデバイスである。出力I/F106は、データを外部に出力するためのインタフェースであり、モニタ110やプリンタ111に対してデータを出力する。プリンタ111とは直接接続されるローカルI/Oのみならず、LANやWANといったネットワークを通して接続されていてもよい。また、107は共通データバスで、それぞれのデータのやりとりを行う。図2、図3、図9のモジュールは図1の記憶装置105にプリンタドライバ1053として記憶されており、CPU101がRAM103に展開して実行する。
【0015】
図2では、XPSDrv印刷システムのブロック構成図を示す。XPSDrvとはXPS(XML Paper Specification)と呼ばれる文書ファイルフォーマットをスプールデータとして使用し、印刷を行うプリンタドライバのことを指す。ユーザはキーボードやマウスなどといった入力装置104を使用して、出力装置105のモニタに映し出されたWin32アプリケーションプログラム201(以下、Win32アプリと略す)、もしくはWindows(登録商標) Presentation Foundationアプリケーションプログラム202(以下、WPFアプリと略す)から印刷処理を実行する。印刷処理はプリンタの選択、印刷設定の作成、描画データの変換と3つの処理を順番に行うことで実行する。図2の201乃至213,215は図1の外部記憶装置105に記憶される。
【0016】
まずは、印刷したいプリンタ214の選択をする、これは、印刷を実行するプリンタに対応したプリンタドライバを選択することと同義である。次に印刷設定を作成する。印刷設定はアプリケーションが印刷設定用のメモリを確保し、アプリケーションかプリンタドライバのコンフィギュレーションモジュール204が、機種依存ファイル205を利用して設定データを埋めるという形で行われる。Win32アプリ201では印刷設定データとしてバイナリのDEVMODE構造体215を用い、WPFアプリ202ではマークアップ言語のXMLで記載されたPrintTicket203を用いる。DEVMODE構造体215は図13の構造を持っており、オペレーティングシステムが定義するPublic領域とプリンタドライバが独自で定義するPrivate領域を持つバイナリの構造体である。また、PrintTicket203は、図14にあるようなXML形式で記述された印刷設定情報である。このDEVMODE構造体215もしくはPrintTicket203が印刷設定を保持しており、アプリケーションが直接書き換えることで印刷設定を変更する。プリンタ214に依存した専用の設定は、コンフィギュレーションモジュール204が持つプリンタドライバのユーザインタフェースを表示し、ユーザがユーザインタフェースを操作することで行う。プリンタドライバは、ユーザインタフェースの設定に従い、DEVMODE構造体215もしくはPrintTicket203のプリンタ214に依存した設定を変更する。印刷設定とは具体的に、出力する用紙サイズを「A4」にする、両面印刷を行う、カラーとモノクロを切り替える、給紙段を指定するなどといった設定のことを指す。PrintTicket203は印刷設定がXML形式で記述されているので、WPFアプリ202がすべての設定値を直接変更して書き換えることは容易だが、従来のようにプリンタドライバのユーザインタフェースを使って設定変更してもかまわない。
【0017】
最後に描画データの変換を行う。印刷設定が確定したら、ユーザはアプリケーションから印刷処理を実行する。Win32アプリ201から印刷する場合は、バージョン3プリンタドライバの形態を取るGDItoXPS変換モジュール206に描画データが送られ、XPSスプールファイル207が作成される。バージョン3プリンタドライバとは、Microsoft(登録商標)のWindows(登録商標)2000以降に対応したプリンタドライバのことを指す。このときGDItoXPS変換モジュール206はコンフィギュレーションモジュール204を呼び出し、印刷設定をDEVMODE構造体215からPrintTicket203に変換する。WPFアプリ202から印刷する場合は、XPSファイルをWPFアプリ自身が生成するのと、オペレーティングシステムがWPFアプリからの命令に応じてXPSファイルを生成するのと2通りの方法があるが、どちらもXPSスプールファイル207を生成する。このようにXPSDrv印刷システムは、印刷時に必ずXPSスプールファイル207を生成するのが特徴である。
【0018】
XPSスプールファイル207が生成されたら、プリントフィルタパイプラインプロセスに処理が渡される。プリントフィルタパイプラインプロセスは複数のフィルタを通すことで印刷が行われる仕組みで、フィルタコンフィギュレーションファイル208でフィルタの数や順番を制御する。プリントフィルタパイプラインプロセスで動作するフィルタパイプラインマネージャはフィルタコンフィギュレーションファイル208に従って、この実施例では設定フィルタ209、レイアウトフィルタ210、レンダラフィルタ211の順に処理を行う。処理はXPSスプールファイル207をフィルタに受け渡すことで行われ、フィルタがそれぞれXPSスプールファイル207を加工し次のフィルタに渡していくことで処理が進む。最後にはプリンタが理解できるデータ言語であるプリンタ制御言語(以下、PDL(Page Description Language)と略す)となって出力される。もちろんプリンタ214がXPSスプールファイル207を直接読み込めるのであれば、そのままでもよい。設定フィルタ209ではPrintTicketを読み込んで印刷に必要なデータをPrintTicketに書き込む処理を、レイアウトフィルタ210では倍率の変更や製本の面付けレイアウトやスタンプなどレイアウトに関する処理を行う。レイアウトフィルタ210では、XPSスプールファイル207に含まれる印刷設定PrintTicket203に従って動作するため、たとえば面付けの設定がPrintTicket203に存在しないときは、レイアウトフィルタ210は何も動作せずスルーして、次のフィルタにXPSスプールファイル207をそのまま渡す。最後のレンダラフィルタ211では、XPSスプールファイル207をレンダリングしてPDLに変換する。PDLデータは印刷処理のスケジュール管理を行うプリントマネージャ212で管理され、キュー(待ち行列)に印刷ジョブが次々と登録される。プリンタ214が印刷できる状態になったら、キューに登録した順にPDLデータをI/Oモニタ213を通して送信する。このようにして、アプリケーションからの印刷データをプリンタ言語に変換することがプリンタドライバの主な役目であり、実際の印刷処理が行われる。
【0019】
図3は本実施例におけるプリンタドライバのコンフィギュレーションモジュール204のブロック図である。コンフィギュレーションモジュール301はそれぞれのプリンタの機種に依存した情報を持つ機種依存ファイル307を読み込んで動作する。このようにすることで、コンフィギュレーションモジュール301はすべてのプリンタで共通のモジュールであっても、それぞれの機種に特化した動作を行うことができる。機種依存ファイル307は実際の機種データが記述されたXMLデータファイル308を持っており、コンフィギュレーションモジュール301はXMLデータファイル308を、コンフリクトエンジン304のデータファイルパーサー305で解釈して読み込む。
【0020】
XMLデータファイル308はプリンタの機種データを含む巨大なデータファイルとなるので、機種依存ファイル307はXMLデータファイル308をZIP圧縮することで、ファイルサイズを小さくしている。また、データファイルパーサー305は、XMLデータファイル308をいったん読み込むと、バイナリデータファイル309を作成する。バイナリデータファイル309を作成したあとは、XMLデータファイル308に変更がなければ、XMLデータファイル308の代わりにバイナリデータファイル309を使って動作する。これにより、機種依存ファイル307からXMLデータファイル308を展開する作業と、XMLデータファイル308を解析する作業が軽減され、パフォーマンスが上がる。XMLデータファイル308に変更があれば、再度XMLを読み込み、バイナリデータファイル309を作成する。
【0021】
コンフリクトエンジン304のデータファイルパーサー305は、XMLデータファイル308もしくはバイナリデータファイル309を読み込んで、状態変数(StatusVariablesとも呼ばれる。以下、SVと略す)310のオブジェクトインスタンスを作成する。SV310とは、プリンタのそれぞれの機能ごとにオブジェクトとして扱うもので、印刷設定情報の状態を表すものである。SV310は、名前、値もしくは値リスト、値に付随するプロパティ、現在値、デフォルト値、ステータス、リーズン、そしてロックフラグを持ったメモリ上に展開されるオブジェクトである。
【0022】
たとえば、「プリンタで使用できる用紙サイズ」という機能に関するSV310を図3の例で見てみる。用紙サイズのSV310は「MediaSize」という名前を持ち、値リストとして、「A4」「Letter」「B5」「PostCard」などプリンタで使用できる用紙サイズが列挙されている。図3では現在値を黒い丸で、デフォルト値を白い丸で表しているので、デフォルトは「A4」だが、現在は「Letter」が選択されている状態を表している。また、SV310はステータスを持ち、その値が現在の設定値で利用可能かどうかを示すことができる。SV310自体にも値リストのそれぞれの値にもステータスを持ち、図3では「B5」が現在の設定では利用できない用紙ということで、「B5」の値に対して利用不可のステータスを持つ取り消し線が引かれている。用紙サイズが選択できないような状況では、「MediaSize」自体に利用不可のステータスを付けることもできる。同様に、印刷の向きとして「Orientation」、カラーとして「OutputColor」、給紙段として「InputBin」が例として挙げられている。もちろん、これ以外の機能がいくつあってもかまわない。さらに、SV310は値リストの代わりに値として、数値や文字列を持つこともできる。値リストであっても、現在値を複数持つことができるマルチセレクションという形のSV310も作成することができる。マルチセレクションのSV310は、同時に複数の値を選択していることになるので、プリンタの記憶装置に印刷ジョブを保存するボックス保存機能などで、一度の印刷で複数のボックスに同時に格納するような印刷設定を作ることができる。
【0023】
禁則エンジン306はSV310を使用して禁則処理を行う。禁則とは、印刷設定の競合を禁止するためのルールである。例えば、両面 ON、OHP ONであれば、両立しえないので、片方をOFFになるように修正する、というようなルールの定義である。後に詳述する。禁則エンジン306はXMLデータファイル308もしくはバイナリデータファイル309に記載された禁則処理ルールを元に、SV310の値を変更する。禁則処理ルールは、1つ1つのSV310ごとに記載されており、他のSV310の値との関係を記載する。たとえば、部単位ソートを行うSV「Collate」の禁則処理ルールを考えてみる。部単位ソートは製本印刷を行うときは必ず使用しなければならない。このロジックをSV「Collate」の禁則処理ルールとして記載すると、「製本のSV「Booklet」がONなら、自分自身をONにする」という形で記載することになる。また、禁則処理ルールにはリーズンをセットすることができる。リーズンとは禁則処理ルールによって値が変更されたりしたときに、どの禁則処理ルールによって値が変更されたのかを区別するためのSV310につけるマークである。さらに、禁則処理ルールでは、記載した条件の結果として、値を変更するだけでなく、ステータスを変更したり、値リストから特定の値を削除したり追加することも可能である。
【0024】
コンフィギュレーションモジュール301は印刷設定を、DEVMODE311やPrintTicket312という形で、アプリケーションプログラムインタフェース(以下、APIと略す)を通じてアプリケーションソフトウェアと入出力することができる。コンフィギュレーションモジュール301は、DEVMODE311やPrintTicket312を、SV310の現在の値をすべて集めて全体の印刷設定として作成し、アプリケーションソフトウェアに出力する。また、入力としてDEVMODE311やPrintTicket312を受け取った場合は、その値をSV310にセットし、コンフリクトエンジン304を使用して禁則処理を行う。
【0025】
コンフィギュレーションモジュール301はユーザに印刷設定をさせるために、ユーザインタフェース303も持っている。ユーザインタフェース303上には、SV310の現在の値を表示しており、ユーザによって値が変更されたら、その値をSV310にセットし、コンフリクトエンジン304を使用して禁則処理を行う。禁則処理を行った結果、SV310が新しい値に変更され、またユーザインタフェース303上にSV310の現在値を表示する。ユーザインタフェース303は、SV310のステータスに応じてコントロールの表示を変更する。SV310のステータスには、利用可(available)、利用不可(notavailable)、サポート不可(notsupported)、権限不可(notpermission)の4つが存在し、それぞれコントロールの表示が異なる。利用可のときは通常の表示を行うが、利用不可や権限不可のときはコントロールや選択肢をグレーアウトして選択できないようにする。サポート不可のときはコントロールを隠してユーザに見せないようにする。標準に戻すボタンを押すと、SV310をデフォルト値に変更して禁則処理を行い、ユーザインタフェース上にSV310の状態を表示する。このように、コンフィギュレーションモジュール301は、入力や出力がどんな形態であっても、すべてSV310に変換して処理を行うことで、機能や禁則処理の一括管理を行っている。
【0026】
SV310の特別な機能として、値や値リストを固定化するロック機能を持っている。SV310のロックフラグがONになると、SV310は外部から値を変更したり、禁則処理ルールによって変更することができなくなる。ロック機能をONにするには、XMLデータファイル308かバイナリデータファイル309にあらかじめ記載しておくか(図8)、API302やユーザインタフェース303から指定する。図6はロック機能をON・OFFするためのユーザインタフェース303上の表示である。ロック機能は管理者権限を持つユーザのみに指定することを許可しており、図6では両面をロックしたときの表示を表す。図7はロック機能をONにしたときのユーザインタフェース303上の表示を表す。図7では両面をロックしているので、両面が常にONとなりユーザが操作できないようにコントロールをグレーアウトしている。また、ロックしていることを表すために、コントロールの横にロック専用の鍵のマークを表示する。ロックしているコントロール、もしくはロック専用の鍵のマークをポインティングデバイスで指し示すと、ツールチップを表示し固定化していることを表示する。
【0027】
図4はXMLデータファイル308の一部を示している。XMLデータファイル308には、プリンタの機能に応じて、SV310の情報と、禁則処理ルールを記載してあるが、図4はそのうち「Collate」のSV310について記載した箇所である。StatusVariableという要素でSV310を定義する。ここにはnameという属性でSV310の名前を、typeという属性でSV310の型を定義している。図4ではnameには「Collate」を、typeには「selection」を記載している。「selection」型というのは、値リストを使用するSV310であることを示している。次にSV310の定義としてPropertyTable要素と、ConflictRules要素を記載する。PropertyTable要素にはSV310のパラメータを、ConflictRule要素には禁則処理ルールを記載する。PropertyTable要素にはValueInfoTable要素とReasonInfoTable要素の2つがあり、それぞれ値とリーズンを定義する。ValueInfoTable要素にはValueSet要素に値リストのそれぞれの値を記載する。ValueSet要素の1つ1つの値には、Property要素として値に付加するデータを追記することもできる。たとえば、用紙サイズ「A4」に関して幅や高さなどの情報を付加したいときにProperty要素を使用する。DefaultValue要素には値リストのうちデフォルト値となるものを記載する。図4では「Collated」と「Uncollated」という2つの値と、「Collated」がデフォルト値であることが記載されている。また、ReasonInfoTable要素にはReasonSet要素として、リーズンを3つ記載している。ConflictRules要素にはConflict要素で1つの禁則処理ルールを記載する。禁則処理ルールにはそれぞれ優先度が存在し、それをpriorityという属性で記載する。優先度の値が小さいものから禁則処理ルールを評価していくので、小さいほうの優先度が高い。このようにSV310ごとに優先度が設定されているのは、同時入力時の禁則処理を行うために存在する。印刷設定として入力される値がすでに禁則状態にあり、どちらかの値を変更しなければならないときに、優先度が高い機能の値を優先して設定することで、ユーザが望むような印刷設定を行うことができる。優先度が存在しない場合は、禁則処理ルールを評価する順番によっては、先に評価したほうの機能が優先されるので、いつも一定の結果になるとは限らなくなってしまう。Conflict要素にはValue要素とCondition要素があり、Value要素には、禁則した結果として変わる値を記載する。また、Conflict要素には禁則した結果として変わるステータスをstatus属性で記載できる。Condition要素には、禁則する対象のSV310の名前と値を記載する。name属性には対象のSV310の名前を、Value要素には対象のSV310の値を記載する。Condition要素を並列に記載する場合は、論理積(AND)の意味となる。他に算術演算のような機能もあり、result属性がfalseの場合は否定(NOT)に、Block要素は括弧に、AnyOneCondition要素は論理和(OR)になる。図4では3つの禁則処理ルールがある。製本のSV310である「Booklet」の値が「None」以外だったら、「Collated」にしてSV310自体のステータスを利用不可「NotAvailable」にする。表紙「CoverFront」と裏表紙「CoverBack」が「NoCover」以外つまり指定されているときは、「Collated」にしてSV310自体のステータスを利用不可「NotAvailable」にする。ステイプル「Staple」が中とじ「SaddleStitch」のときは「Collated」にしてSV310自体のステータスを利用不可「NotAvailable」にするという3つの禁則処理ルールである。
【0028】
図5は、プリンタドライバに対してユーザが設定を指示したときに開始する。S501は、その都度確認することになっているが、予め処理をして、ユーザが印刷設定を変更したら、S502以降からの処理をするようにしてもよい。
【0029】
次に、コンフリクトエンジン304の禁則エンジン306による禁則処理のロジックを、図5のフローチャートに沿って追っていく。まずは、API302やユーザインタフェース303からSV310のロック機能の情報をもらう。ロック情報を元に禁則エンジン306は、対象となるSV310の値をロックする値に変更し、ロックフラグを立てる(ステップ501)。また、デフォルト値をロックする値に変更する。
【0030】
ステップ502では、次にAPI302やユーザインタフェース303が、DEVMODE構造体やPrintTicketなどの印刷設定や、ユーザインタフェースからのコントロールの入力から、ユーザが指定した印刷設定情報を受け取る(ステップ502)。API302やユーザインタフェース303は受け取った印刷設定情報を元に、変更するSV310の値のリストを作成する。これはSV310の名前と値のペアと、印刷設定情報との組み合わせが記載されたテーブルを持っていて、そのテーブルに沿ってリストを作成する。テーブルはXMLファイルに記載されており、機種依存ファイル307に含まれている。禁則エンジン306は値のリストを元に、対応するSV310の現在値をそれぞれ印刷設定の値に変更する(ステップ503)。禁則エンジン306はここで値が変更されたSV310のリストを作成する(ステップ504)。すでに印刷設定の値でリストを作成しているが、ここでは値が変更できたSV310のリストを作成している。また、禁則処理ルールを処理する過程においては、実際に値を変更したSV310と禁則処理ルールの結果値が変更されたSV310の両方を含んだリストを作成する。ステップ504で作成したリストに含まれるSV310の禁則処理ルールをすべて取り出し、優先度順に並べる(ステップ505)。ここで、SV310の中でロックされているものがあれば、ロックされたSV310の禁則処理ルールをまず優先度順に並べ、他の禁則処理ルールはその後ろに優先度順に並べる。優先度順に並べた禁則処理ルールがまだ存在していれば(ステップ506)、禁則処理ルールを1つ取り出し(ステップ508)、禁則処理ルールの評価を行う。禁則処理ルールに記載されたSV310の値やプロパティを参照し、禁則処理ルールにおけるCondition要素に合致してルールが成立するかどうかを判定する。禁則処理ルールが成立するのであれば、SV310の値を変更する必要があるかどうかを判定する(ステップ509)。値を変更しなければならないときは、ロック情報によってロックフラグが立っているかどうかを判定する(ステップ510)。ロックされているときは、禁則処理ルールにおけるCondition要素に含まれるSV310の値に対して、ステータスを利用不可に変更する(ステップ511)。つまり、通常は禁則処理ルールに記載された対象のSV310の値によって自分の値を変更するのに対して、ロックのときは対象のSV310のステータスを変えるように動作する。ロックされていないときは通常の禁則処理として、禁則処理ルールに従って値を変更しようとする。このとき、変更しようとしている対象のSV310の値が、禁則処理によってすでに1度値が変更されたことがないかどうかのフラグを判定する(ステップ512)。禁則処理は値が変更されたことを起点とし、禁則処理ルールを評価していくが、値が何度も変更されてしまうと、禁則処理ルールによっては評価がループしてしまい終わらなくなることがある。そこで、禁則処理ルールによってSV310の値が変更されるのは1回までとして制限することで、無現ループすることを防いでいる。値が1回も変更されていないことが確かめられたら、SV310の値を変更し、SV310の値を禁則処理ルールによって変更したというフラグを立てる(ステップ513)。そして、次の禁則処理ルールを評価する。禁則処理ルールがすべてなくなったら、禁則処理によって値が変更されたSV310があるかどうかを判定する(ステップ507)。値がひとつも変更されていなければ、すべての禁則処理ルールを評価した結果、値が安定した状態にあると判断し終了する。変更されていれば、値が変更されたSV310の禁則処理ルールをすべて取り出し、優先度順に並べて再度評価を行う。このときもロックしているSV310は優先度を高くする。
【0031】
このように、コンフィギュレーションモジュール301はコンフリクトエンジン304とSV310の持つロック機能を利用して、機能を完全に固定化することができ、禁則処理においても矛盾がないように動作する。
【0032】
(実施例2)
実施例1とは別のコンフィギュレーションモジュールの実施方法として、図9のブロック図にあるシステムを挙げる。実施例1との違いは禁則処理ルールで、実施例1の禁則処理ルールでは対象の値を元に自分の変更になる値を記載していたが、実施例2の禁則処理ルールでは、同時に設定することが不可能な組み合わせを記載するというのが異なる。したがって、コンフリクトエンジンが禁則処理を行うロジックも異なるが、優先度の並び変えによって同等のロック機能を実現する。
【0033】
図9において、コンフィギュレーションモジュール903は、プリンタが異なっても同じモジュールを使える共通のモジュールである。プリンタごとに依存するデータはGPD(Generic Description Language)と呼ばれるテキストファイルに記載しており、GPDファイルをコンフィギュレーションモジュール903のGPDパーサー904が解釈して動作することで、プリンタ固有の動作を実現している。図9では、プリンタAに対応したGPD901を読み込めばプリンタAの動作を、プリンタBに対応したGPD902を読み込めばプリンタBの動作を行う。プリンタドライバを使用するたびにGPDファイルをGPDパーサー904が読み込むのは非効率なので、GPDファイルを読み込んだらバイナリファイルを作成し保存しておく。その後、GPDファイルの記載に変更がなければ、バイナリファイルを使って動作することで、高速化を実現している。
【0034】
図9では、プリンタAに対応したGPD901を読み込んだときは、バイナリデータ906を、プリンタBに対応したGPD902を読み込んだときは、バイナリデータ907を作成している。GPDに記載されたデータを元に、コンフィギュレーションモジュール903は機能ごとのオブジェクトインスタンスを作成し、禁則処理を行う。アプリケーション910からの印刷設定データはCOMPSTUI.DLL909を経由してコンフィギュレーションモジュール903に渡される。また、ユーザインタフェースでの印刷設定はCOMMONUI905上からコンフィギュレーションモジュール903に渡される。コンフィギュレーションモジュール903は印刷設定を機能ごとのオブジェクトインスタンスに反映させ、禁則処理を行ってまた、アプリケーション910やユーザインタフェース上に印刷設定を返している。コンフィギュレーションモジュール903はまたユーザインタフェースプラグイン908を使って、新たな機能を自由に追加することができる。
【0035】
図10はGPDの記載の一部である。*Featureは機能の名前を記述する。図10ではプリンタの給紙段でInputBinという名称をつけたFeatureとして定義している。*Optionは機能に対する値である。図10ではAUTO、INPUTTRAY_MANUAL、INPUTTRAY_CASSETTE1、INPUTTRAY_CASSETTE2の4つのOptionが存在し、どれか1つをInputBinの現在値として選択することになる。*DefaultOptionではOptionのうちどれがデフォルト化を記述する。ここではAUTO、つまり給紙段の「自動」がデフォルトであるという記載になる。
【0036】
禁則処理ルールとしては、*Constraintsと*InvalidConbinationの2つがある。*Constraintsは自分のOptionと他のFeatureのOptionと同時に組み合わさってはならない禁則を記載する。*InvalidConbinationはGPDファイルのルート(行の先頭)に記載し、FeatureのOption同士の禁則を記載する。*InvalidConbinationでは2つ以上のOptionの禁則が記載することができるのが、*Constraintsとの違いである。また、*ConflictPriorityでは、Featureの優先度を記載している。数値が小さいほど優先度が高く、先に禁則処理を評価する。このGPDを読み込んで、コンフィギュレーションモジュール903はFeatureオブジェクトを作成し、禁則処理を行う。
【0037】
また、FeatureにはOptionを固定化するためにロックしているかどうかのフラグを持ち、ロックしている場合はOptionが変更されないようにしている。ロックはGPDのFeatureにあらかじめ記載しておくことも可能である(図12)。
【0038】
コンフィギュレーションモジュール903が行う禁則処理のロジックを、図11のフローチャートに従って追っていく。Featureのロック情報をアプリケーション910やCommonUIのユーザインタフェース905が持っていたときは、指定されたFeatureのOptionに変更し、ロックフラグを立てる(ステップ1101)。
【0039】
また、DefaultOptionをロックするOptionに変更する。次にアプリケーション910やCommonUIのユーザインタフェース905からユーザが指定した印刷設定情報を受け取る(ステップ1102)。この時点ではまだFeatureにOptionをセットしない。すべてのFeatureをリストとして列挙し、ConflictPriority順にリストを並べる(ステップ1103)。
【0040】
ここで、ロックされているFeatureがあれば、ロックされているFeatureをConflictPriority順に並べ、その後ろに通常のFeatureをConflictPriority順に並べる。リストにFeatureが残っていれば(ステップ1104)、リストからFeatureを取り出す(ステップ1105)。指定された印刷設定の値に対応するFeatureのOption、つまり設定しようとしているOptionが、ConstraintsもしくはInvalidConbinationの対象となっているかどうかを、すべてのConstraintsもしくはInvalidConbinationを見て判定する(ステップ1106)。
【0041】
対象となっていれば、禁則状態にあるということで、印刷設定をFeatureの現在の値としてOptionに設定することはできないので、次のFeatureに進む。禁則状態でなければ、次に現在のFeatureのOptionがロック状態になるかどうかを確認する(ステップ1107)。
【0042】
現在のOptionがロック状態であれば、やはり印刷設定をOptionとして設定することができないので、次のFeatureに進む。変更するOptionが禁則状態ではなく、かつ現在のOptionがロック状態でなければ、Featureに印刷設定の値としてOptionをセットする(ステップ1108)。そして、すべてのFeatureに対して処理が終わったら、終了となる。
【0043】
このように、Featureをロックすることで、機能を固定化することができる。機能を固定化したり、禁則処理を行うにあたっては実施例2のほうが簡易であり実装しやすい。しかし、実施例2の禁則処理では、値を変更することで他の値を変更するという処理ができないため、ユーザは印刷設定が禁則状態にあるときはいったん禁則状態を解除するように設定を変更し、再度、値を設定するということをしなければならなくなる。
【0044】
他に、固定化指示可能な印刷設定として、パスワードによる親展印刷の設定の固定、ユーザ名・日時印刷固定なども想定できる。これらの印刷設定を固定化した場合、セキュアプリント固定にすると、保存(メールボックス)や追い越し印刷がOFFになる。ユーザ名や、日時の印刷の固定にすると、ポスターがOFFになるという処理が走る。プリンタのメモリとは、プリンタメモリである。ユーザインタフェース画面とは、ユーザインタフェースの画面である。
【0045】
本実施形態の技術原理をまとめておく。
【0046】
印刷装置の一例であるプリンタ214に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理するコンピュータを開示した。そして、外部記憶装置に、印刷設定の禁則を定義した禁則ルールを記憶する。そして、プリンタドライバのユーザインタフェースやXMLファイルを用いて、印刷設定の固定化を指示する。さらに、コンフィギュレーションモジュールは、固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げる。これは、ルール優先度設定の一例である。
【0047】
外部記憶装置に、印刷設定の値をオブジェクトとして格納する。
【0048】
コンフィギュレーションモジュールは、禁則処理ルールを元にしてオブジェクトの値を変更し、優先度順に禁則処理ルールを評価する。そして、固定化を指示された印刷設定は、ユーザインタフェースからの入力または禁則処理ルールの実行により変更されないようにする。さらに、値を固定化指示したオブジェクトに対して値を変更するような禁則処理ルールを処理するときは、コンフィギュレーションモジュールは、変更する原因となったオブジェクトの値をプリンタドライバのユーザインタフェースから選択できない状態にすることができる。
【0049】
プリンタドライバのユーザインタフェースは、固定化を指示された印刷設定をモニタ110に識別可能に表示する処理を制御する。例えば、図7のごとくである。
【0050】
禁則処理の優先順位はメーカが勝手に決めている。しかし、本実施形態を用いて、禁則処理を自由に変更できるのは便利である。両面固定、2Up固定、モノクロ固定、保存(メールボックス)固定などをユーザインタフェースやXMLファイルで指示できるようにすると好適である。メールボックスとは、プリンタや複合機のメモリ上に、PCから印刷データ等を送信して格納させるためのボックスである。設定によっては、印刷出力を禁止し、必ずメールボックスに保存させることもできる。
【0051】
また、他の人からもらった文書の印刷設定が「はがき」になっていたときに、「はがき」であることを意識せずに印刷してしまったときなどは印刷できないよりも「A4」「両面」で出てくれるのは便利である。また、保存(メールボックス)固定にすると、指定した用紙サイズが「ユーザ定義用紙(長尺)」→「A4」に修正される。これまでの処理であれば、長尺用紙で印刷になってしまっていたので、常に保存にさせることで紙資源の無駄を防げる。つまり、この環境では長尺用紙は使えないということになる。また、他の実施形態として、メールボックスへの保存設定に違反する設定があれば、メールボックスへの印刷データの保管はせずに、印刷中止して、管理者に対して通知しても良いと思われる。ここでは、メールボックスの設定は、印刷に関わる設定としておく。
【0052】
また、2Up固定にすると、製本がOFFに修正される設計も想定できる。製本ができるときは製本で、2Upは諦め、製本がプリンタの仕様上でないときは2Upに固定する、準固定モードも想定できる。
【0053】
(他の実施形態)
本実施形態における図5、図11に示す処理が、外部からインストールされるプログラムによって、コンピュータにより遂行される。そして、その場合、CD−ROMやフラッシュメモリやFD等の記憶媒体により、あるいはネットワークを介して外部の記憶媒体から、プログラムを含む情報群をホストコンピュータに供給される場合でも本発明は適用されるものである。
【0054】
以上のように、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、又は、外部サーバ(図示省略)からダウンロードすることで、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【0055】
この場合、記憶媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、たとえば、フロッピィーディスク、ハードディスク、光ディスク、光磁気ディスク、DVD、CD−ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM等を用いることができる。
【0056】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【図面の簡単な説明】
【0057】
【図1】本発明の一実施形態としての、コンピュータシステムのハードウェアとソフトウェアのブロック構成図である。
【図2】本発明の一実施形態としての、XPSDrv印刷システムのブロック構成図である。
【図3】本発明の一実施形態としての、実施例1におけるコンフィギュレーションモジュールのブロック構成図である。
【図4】本発明の一実施形態としての、実施例1における機種依存ファイルに含まれるXMLファイルのフォーマットの一部である。
【図5】本発明の一実施形態としての、実施例1における禁則エンジンの禁則処理を行うロジックのフローチャートである。
【図6】本発明の一実施形態としての、実施例1におけるロック機能を指定するユーザインタフェース画面の一部である。
【図7】本発明の一実施形態としての、実施例1におけるロック機能が指定された印刷設定画面である。
【図8】本発明の一実施形態としての、実施例1における機種依存ファイルに含まれるXMLファイルにおいて、ロック機能を有効にした一部のXMLである。
【図9】本発明の一実施形態としての、実施例2におけるコンフィギュレーションモジュールのブロック構成図である。
【図10】本発明の一実施形態としての、実施例2における機種依存ファイルであるGPDファイルの一部である。
【図11】本発明の一実施形態としての、実施例2におけるコンフィギュレーションモジュールの禁則処理のフローチャートである。
【図12】本発明の一実施形態としての、実施例2における機種依存ファイルでロック機能を有効にした一部のGPDである。
【図13】本発明の一実施形態としての、印刷設定のバイナリDEVMODE構造体である。
【図14】本発明の一実施形態としての、印刷設定のPrintTicketのXMLである。
【図15】本発明の一実施形態としての、XPSスプールファイルのブロック図である。
【技術分野】
【0001】
本発明は、プリンタドライバを含む印刷制御プログラムに関するものである。
【背景技術】
【0002】
情報処理装置の一例であるコンピュータ上で作成された文書や図といったファイルをアプリケーションから印刷する際には、プリンタドライバを使って描画データをプリンタ言語に変換しプリンタに送信することが行われる。用紙の種類や両面、カラー、給紙段といった設定は、アプリケーションもしくはプリンタドライバが提供するユーザインタフェースの印刷設定で、ユーザが設定したデータをプリンタコマンドとしてプリンタに送信する。
【0003】
プリンタドライバが持つ機能は年々増加する一方である。また、数百個の機能を持つプリンタドライバも少なくない。また、プリンタドライバの印刷設定を行うユーザインタフェースは、ユーザインタフェースからボタンを押して、さらに開くダイアログウィンドウが複数存在する。よって、これらのウィンドウのどこで所望の設定ができるのか迷うユーザも多い。そこでプリンタドライバは、ユーザのために機能の禁則処理(コンフリクト処理)を持っている。機能の禁則処理とは、ある機能を選択したときに、他の機能が使えなくなったり、他の設定値が変更されることを指す。たとえば多くのプリンタドライバでは、「はがき」と「ステイプル」を同時に設定することはできない。このとき、「はがき」を選択すると、プリンタドライバのユーザインタフェース上の「ステイプル」項目はグレーアウトしたり(特許文献1)する。また、設定することが出来ない項目の表示が隠れて選択することができなくなったり、その項目が選択できないという意味のアイコンを表示したりする(特許文献2)。また、設定することが出来ない項目についての警告としてメッセージが表示されたり(特許文献3)する。
【0004】
また、プリンタドライバの禁則処理はユーザインタフェース上の表示だけではない。アプリケーションソフトウェアによっても印刷設定は変更することができる。しかし、アプリケーションからの禁則状態にある設定がそのままプリンタドライバに渡される場合がある。この場合、プリンタドライバがその設定をプリンタコマンドに変換してしまうと、プリンタでエラーになってしまう。そこでプリンタドライバは、印刷する際にも機能の禁則処理を行い、印刷設定を変更して印刷可能な値にしている。
【0005】
一方で、セキュリティ意識の高まりやコストの削減などから、印刷設定の特定機能を固定したいという要求がある。たとえば、カラー機のプリンタでモノクロ印刷固定にすれば、印刷にかかるトナーやインクのコストを削減できる。また、1つのページに2ページ分を縮小して印刷する2Up印刷や、両面印刷を固定にすると、用紙が節約できる。
【0006】
しかし、値を固定する機能は、禁則処理とは相容れないことが多い。たとえば、両面印刷を固定にすると、両面できない用紙を選択したときにどのように禁則すればいいかという問題が発生する。従来では、プリンタドライバ自体をカスタマイズしてしまい、まったく別の専用ドライバを作成するといった方法が一般的であった。しかし、それではユーザの要望ごとにプリンタドライバを作成しなければならない。このため、外部のプラグインから新しい禁則処理ルールを追加することが考えられた(特許文献4)。さらに、可能な限り固定の設定を行ってみて禁則処理によって設定を変更できるときは印刷設定を変更する(特許文献5)などの方法があった。現在持っている禁則処理ルールと逆の禁則処理ルールを自動補完する技術が存在する。
【0007】
また、開発者は、ある機能名に対して、ONとなるすべてのルールを記述し、上記したとおり、OFFとなるルールを省略することができる。OFFとなるルールは推論エンジン302により自動生成される。逆に、開発者は、ある機能名に対して、OFFとなるすべてのルールを記述し、上記したとおり、ONとなるルールを省略することができる。ONとなるルールは推論エンジン302により自動生成される。開発者は、ある機能名に対して、ONとなるルール、OFFとなるルールのすべてを記述することもできる。この場合ルールは自動生成されない。左辺に機能名(ON)、機能名(OFF)の形式で記述された項に対して、右辺に項目を記述する場合には、左辺と同一のON/OFF形式にする。この場合にルールが自動生成される(特許文献6)。
【特許文献1】特開2003−99170
【特許文献2】特開2000−227847
【特許文献3】特開2000−225754
【特許文献4】特開2005−190467
【特許文献5】特開2007−272779
【特許文献6】特開2002−169669
【発明の開示】
【発明が解決しようとする課題】
【0008】
しかしながら、従来の方法では、完全に値を固定化することが困難であった。すなわち、外部のプラグインから禁則処理ルールを差し込む場合は、外部のプラグインがプリンタドライバの禁則処理ルール(コンフリクトルールともいう。)を予めすべて知っていなければならない。さらに、プリンタドライバ本体の機能が拡張し、禁則処理も拡張された場合は、外部のプラグインも新たに変更した禁則処理ルールを差し込まなければならなかった。また、禁則処理によって変更されることを許容する場合は、固定にしている値によっては確実に固定にできるとは限らなかった。逆のルールを自動補完する場合、特許文献6の方法では、設定値がON/OFFのもののみ自動補完するだけである。たとえば、両面をONにするという禁則処理ルールがある場合、両面をOFFにするという禁則処理ルールを自動補完するものである。設定値を固定にした際に禁則処理ルールに不都合がないようにするには、自動補完するルールを固定値に変更するというルールを補完すればよい。しかし、それ以前に評価された禁則処理ルールで値が変更されてしまっては、開発者またはユーザの意図した固定にならない可能性がある。また、設定値が2つ以上あるもの、たとえば用紙サイズのようなものには適用できない。他に、「お気に入り」のようなユーザが保存したプリセットされた複数の設定値を適用する際に、固定にした設定値と共に、固定にした設定値ではない違う値が「お気に入り」に含まれていると、値が変更されてしまい確実に固定にすることができなかった。
【0009】
本願は上記課題の少なくとも一つを鑑みてなされたものである。
【課題を解決するための手段】
【0010】
印刷装置に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理する情報処理装置において、印刷設定の競合を禁止する禁則を定義した禁則ルールを記憶する記憶手段と、印刷設定の固定化を指示する指示手段と、前記固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げて設定するルール優先度設定手段と、を備える情報処理装置が一例として開示される。
【発明の効果】
【0011】
本発明によれば、設定値を固定化しつつ、プリンタの禁則処理にしたがって印刷を行うことが可能であることから、管理者が確実に印刷設定を管理することが可能になるという効果がある。
【発明を実施するための最良の形態】
【0012】
(実施例)
以下、本発明を実施するための最良の形態について図面を用いて説明する。
【0013】
図1は本発明の一実施形態を示す印刷処理システムのブロック構成図である。なお、特に断らない限り、本発明の機能が実行されるのであれば、単体の機能であっても、複数の機器からなるシステムであっても、LAN、WAN等のネットワークを介して接続がなされ処理が行われるシステムであっても、本発明を適用できることは言うまでもない。
【0014】
図1において、コンピュータを用いたシステムのブロック構成図を示す。CPU101はROM102あるいはRAM103あるいは外部記憶装置105に格納されたプログラムに従って装置全体の制御を行う。RAM103はCPU101が各種処理を行う際のワークエリアとしても使用される。記憶装置105はオペレーティングシステム(OS)1054やアプリケーションソフト1051等を記録する。キーボードやマウスなどの入力機器は、入力I/F104を通じて、ユーザがコンピュータに対して各種指示を与えるためのデバイスである。出力I/F106は、データを外部に出力するためのインタフェースであり、モニタ110やプリンタ111に対してデータを出力する。プリンタ111とは直接接続されるローカルI/Oのみならず、LANやWANといったネットワークを通して接続されていてもよい。また、107は共通データバスで、それぞれのデータのやりとりを行う。図2、図3、図9のモジュールは図1の記憶装置105にプリンタドライバ1053として記憶されており、CPU101がRAM103に展開して実行する。
【0015】
図2では、XPSDrv印刷システムのブロック構成図を示す。XPSDrvとはXPS(XML Paper Specification)と呼ばれる文書ファイルフォーマットをスプールデータとして使用し、印刷を行うプリンタドライバのことを指す。ユーザはキーボードやマウスなどといった入力装置104を使用して、出力装置105のモニタに映し出されたWin32アプリケーションプログラム201(以下、Win32アプリと略す)、もしくはWindows(登録商標) Presentation Foundationアプリケーションプログラム202(以下、WPFアプリと略す)から印刷処理を実行する。印刷処理はプリンタの選択、印刷設定の作成、描画データの変換と3つの処理を順番に行うことで実行する。図2の201乃至213,215は図1の外部記憶装置105に記憶される。
【0016】
まずは、印刷したいプリンタ214の選択をする、これは、印刷を実行するプリンタに対応したプリンタドライバを選択することと同義である。次に印刷設定を作成する。印刷設定はアプリケーションが印刷設定用のメモリを確保し、アプリケーションかプリンタドライバのコンフィギュレーションモジュール204が、機種依存ファイル205を利用して設定データを埋めるという形で行われる。Win32アプリ201では印刷設定データとしてバイナリのDEVMODE構造体215を用い、WPFアプリ202ではマークアップ言語のXMLで記載されたPrintTicket203を用いる。DEVMODE構造体215は図13の構造を持っており、オペレーティングシステムが定義するPublic領域とプリンタドライバが独自で定義するPrivate領域を持つバイナリの構造体である。また、PrintTicket203は、図14にあるようなXML形式で記述された印刷設定情報である。このDEVMODE構造体215もしくはPrintTicket203が印刷設定を保持しており、アプリケーションが直接書き換えることで印刷設定を変更する。プリンタ214に依存した専用の設定は、コンフィギュレーションモジュール204が持つプリンタドライバのユーザインタフェースを表示し、ユーザがユーザインタフェースを操作することで行う。プリンタドライバは、ユーザインタフェースの設定に従い、DEVMODE構造体215もしくはPrintTicket203のプリンタ214に依存した設定を変更する。印刷設定とは具体的に、出力する用紙サイズを「A4」にする、両面印刷を行う、カラーとモノクロを切り替える、給紙段を指定するなどといった設定のことを指す。PrintTicket203は印刷設定がXML形式で記述されているので、WPFアプリ202がすべての設定値を直接変更して書き換えることは容易だが、従来のようにプリンタドライバのユーザインタフェースを使って設定変更してもかまわない。
【0017】
最後に描画データの変換を行う。印刷設定が確定したら、ユーザはアプリケーションから印刷処理を実行する。Win32アプリ201から印刷する場合は、バージョン3プリンタドライバの形態を取るGDItoXPS変換モジュール206に描画データが送られ、XPSスプールファイル207が作成される。バージョン3プリンタドライバとは、Microsoft(登録商標)のWindows(登録商標)2000以降に対応したプリンタドライバのことを指す。このときGDItoXPS変換モジュール206はコンフィギュレーションモジュール204を呼び出し、印刷設定をDEVMODE構造体215からPrintTicket203に変換する。WPFアプリ202から印刷する場合は、XPSファイルをWPFアプリ自身が生成するのと、オペレーティングシステムがWPFアプリからの命令に応じてXPSファイルを生成するのと2通りの方法があるが、どちらもXPSスプールファイル207を生成する。このようにXPSDrv印刷システムは、印刷時に必ずXPSスプールファイル207を生成するのが特徴である。
【0018】
XPSスプールファイル207が生成されたら、プリントフィルタパイプラインプロセスに処理が渡される。プリントフィルタパイプラインプロセスは複数のフィルタを通すことで印刷が行われる仕組みで、フィルタコンフィギュレーションファイル208でフィルタの数や順番を制御する。プリントフィルタパイプラインプロセスで動作するフィルタパイプラインマネージャはフィルタコンフィギュレーションファイル208に従って、この実施例では設定フィルタ209、レイアウトフィルタ210、レンダラフィルタ211の順に処理を行う。処理はXPSスプールファイル207をフィルタに受け渡すことで行われ、フィルタがそれぞれXPSスプールファイル207を加工し次のフィルタに渡していくことで処理が進む。最後にはプリンタが理解できるデータ言語であるプリンタ制御言語(以下、PDL(Page Description Language)と略す)となって出力される。もちろんプリンタ214がXPSスプールファイル207を直接読み込めるのであれば、そのままでもよい。設定フィルタ209ではPrintTicketを読み込んで印刷に必要なデータをPrintTicketに書き込む処理を、レイアウトフィルタ210では倍率の変更や製本の面付けレイアウトやスタンプなどレイアウトに関する処理を行う。レイアウトフィルタ210では、XPSスプールファイル207に含まれる印刷設定PrintTicket203に従って動作するため、たとえば面付けの設定がPrintTicket203に存在しないときは、レイアウトフィルタ210は何も動作せずスルーして、次のフィルタにXPSスプールファイル207をそのまま渡す。最後のレンダラフィルタ211では、XPSスプールファイル207をレンダリングしてPDLに変換する。PDLデータは印刷処理のスケジュール管理を行うプリントマネージャ212で管理され、キュー(待ち行列)に印刷ジョブが次々と登録される。プリンタ214が印刷できる状態になったら、キューに登録した順にPDLデータをI/Oモニタ213を通して送信する。このようにして、アプリケーションからの印刷データをプリンタ言語に変換することがプリンタドライバの主な役目であり、実際の印刷処理が行われる。
【0019】
図3は本実施例におけるプリンタドライバのコンフィギュレーションモジュール204のブロック図である。コンフィギュレーションモジュール301はそれぞれのプリンタの機種に依存した情報を持つ機種依存ファイル307を読み込んで動作する。このようにすることで、コンフィギュレーションモジュール301はすべてのプリンタで共通のモジュールであっても、それぞれの機種に特化した動作を行うことができる。機種依存ファイル307は実際の機種データが記述されたXMLデータファイル308を持っており、コンフィギュレーションモジュール301はXMLデータファイル308を、コンフリクトエンジン304のデータファイルパーサー305で解釈して読み込む。
【0020】
XMLデータファイル308はプリンタの機種データを含む巨大なデータファイルとなるので、機種依存ファイル307はXMLデータファイル308をZIP圧縮することで、ファイルサイズを小さくしている。また、データファイルパーサー305は、XMLデータファイル308をいったん読み込むと、バイナリデータファイル309を作成する。バイナリデータファイル309を作成したあとは、XMLデータファイル308に変更がなければ、XMLデータファイル308の代わりにバイナリデータファイル309を使って動作する。これにより、機種依存ファイル307からXMLデータファイル308を展開する作業と、XMLデータファイル308を解析する作業が軽減され、パフォーマンスが上がる。XMLデータファイル308に変更があれば、再度XMLを読み込み、バイナリデータファイル309を作成する。
【0021】
コンフリクトエンジン304のデータファイルパーサー305は、XMLデータファイル308もしくはバイナリデータファイル309を読み込んで、状態変数(StatusVariablesとも呼ばれる。以下、SVと略す)310のオブジェクトインスタンスを作成する。SV310とは、プリンタのそれぞれの機能ごとにオブジェクトとして扱うもので、印刷設定情報の状態を表すものである。SV310は、名前、値もしくは値リスト、値に付随するプロパティ、現在値、デフォルト値、ステータス、リーズン、そしてロックフラグを持ったメモリ上に展開されるオブジェクトである。
【0022】
たとえば、「プリンタで使用できる用紙サイズ」という機能に関するSV310を図3の例で見てみる。用紙サイズのSV310は「MediaSize」という名前を持ち、値リストとして、「A4」「Letter」「B5」「PostCard」などプリンタで使用できる用紙サイズが列挙されている。図3では現在値を黒い丸で、デフォルト値を白い丸で表しているので、デフォルトは「A4」だが、現在は「Letter」が選択されている状態を表している。また、SV310はステータスを持ち、その値が現在の設定値で利用可能かどうかを示すことができる。SV310自体にも値リストのそれぞれの値にもステータスを持ち、図3では「B5」が現在の設定では利用できない用紙ということで、「B5」の値に対して利用不可のステータスを持つ取り消し線が引かれている。用紙サイズが選択できないような状況では、「MediaSize」自体に利用不可のステータスを付けることもできる。同様に、印刷の向きとして「Orientation」、カラーとして「OutputColor」、給紙段として「InputBin」が例として挙げられている。もちろん、これ以外の機能がいくつあってもかまわない。さらに、SV310は値リストの代わりに値として、数値や文字列を持つこともできる。値リストであっても、現在値を複数持つことができるマルチセレクションという形のSV310も作成することができる。マルチセレクションのSV310は、同時に複数の値を選択していることになるので、プリンタの記憶装置に印刷ジョブを保存するボックス保存機能などで、一度の印刷で複数のボックスに同時に格納するような印刷設定を作ることができる。
【0023】
禁則エンジン306はSV310を使用して禁則処理を行う。禁則とは、印刷設定の競合を禁止するためのルールである。例えば、両面 ON、OHP ONであれば、両立しえないので、片方をOFFになるように修正する、というようなルールの定義である。後に詳述する。禁則エンジン306はXMLデータファイル308もしくはバイナリデータファイル309に記載された禁則処理ルールを元に、SV310の値を変更する。禁則処理ルールは、1つ1つのSV310ごとに記載されており、他のSV310の値との関係を記載する。たとえば、部単位ソートを行うSV「Collate」の禁則処理ルールを考えてみる。部単位ソートは製本印刷を行うときは必ず使用しなければならない。このロジックをSV「Collate」の禁則処理ルールとして記載すると、「製本のSV「Booklet」がONなら、自分自身をONにする」という形で記載することになる。また、禁則処理ルールにはリーズンをセットすることができる。リーズンとは禁則処理ルールによって値が変更されたりしたときに、どの禁則処理ルールによって値が変更されたのかを区別するためのSV310につけるマークである。さらに、禁則処理ルールでは、記載した条件の結果として、値を変更するだけでなく、ステータスを変更したり、値リストから特定の値を削除したり追加することも可能である。
【0024】
コンフィギュレーションモジュール301は印刷設定を、DEVMODE311やPrintTicket312という形で、アプリケーションプログラムインタフェース(以下、APIと略す)を通じてアプリケーションソフトウェアと入出力することができる。コンフィギュレーションモジュール301は、DEVMODE311やPrintTicket312を、SV310の現在の値をすべて集めて全体の印刷設定として作成し、アプリケーションソフトウェアに出力する。また、入力としてDEVMODE311やPrintTicket312を受け取った場合は、その値をSV310にセットし、コンフリクトエンジン304を使用して禁則処理を行う。
【0025】
コンフィギュレーションモジュール301はユーザに印刷設定をさせるために、ユーザインタフェース303も持っている。ユーザインタフェース303上には、SV310の現在の値を表示しており、ユーザによって値が変更されたら、その値をSV310にセットし、コンフリクトエンジン304を使用して禁則処理を行う。禁則処理を行った結果、SV310が新しい値に変更され、またユーザインタフェース303上にSV310の現在値を表示する。ユーザインタフェース303は、SV310のステータスに応じてコントロールの表示を変更する。SV310のステータスには、利用可(available)、利用不可(notavailable)、サポート不可(notsupported)、権限不可(notpermission)の4つが存在し、それぞれコントロールの表示が異なる。利用可のときは通常の表示を行うが、利用不可や権限不可のときはコントロールや選択肢をグレーアウトして選択できないようにする。サポート不可のときはコントロールを隠してユーザに見せないようにする。標準に戻すボタンを押すと、SV310をデフォルト値に変更して禁則処理を行い、ユーザインタフェース上にSV310の状態を表示する。このように、コンフィギュレーションモジュール301は、入力や出力がどんな形態であっても、すべてSV310に変換して処理を行うことで、機能や禁則処理の一括管理を行っている。
【0026】
SV310の特別な機能として、値や値リストを固定化するロック機能を持っている。SV310のロックフラグがONになると、SV310は外部から値を変更したり、禁則処理ルールによって変更することができなくなる。ロック機能をONにするには、XMLデータファイル308かバイナリデータファイル309にあらかじめ記載しておくか(図8)、API302やユーザインタフェース303から指定する。図6はロック機能をON・OFFするためのユーザインタフェース303上の表示である。ロック機能は管理者権限を持つユーザのみに指定することを許可しており、図6では両面をロックしたときの表示を表す。図7はロック機能をONにしたときのユーザインタフェース303上の表示を表す。図7では両面をロックしているので、両面が常にONとなりユーザが操作できないようにコントロールをグレーアウトしている。また、ロックしていることを表すために、コントロールの横にロック専用の鍵のマークを表示する。ロックしているコントロール、もしくはロック専用の鍵のマークをポインティングデバイスで指し示すと、ツールチップを表示し固定化していることを表示する。
【0027】
図4はXMLデータファイル308の一部を示している。XMLデータファイル308には、プリンタの機能に応じて、SV310の情報と、禁則処理ルールを記載してあるが、図4はそのうち「Collate」のSV310について記載した箇所である。StatusVariableという要素でSV310を定義する。ここにはnameという属性でSV310の名前を、typeという属性でSV310の型を定義している。図4ではnameには「Collate」を、typeには「selection」を記載している。「selection」型というのは、値リストを使用するSV310であることを示している。次にSV310の定義としてPropertyTable要素と、ConflictRules要素を記載する。PropertyTable要素にはSV310のパラメータを、ConflictRule要素には禁則処理ルールを記載する。PropertyTable要素にはValueInfoTable要素とReasonInfoTable要素の2つがあり、それぞれ値とリーズンを定義する。ValueInfoTable要素にはValueSet要素に値リストのそれぞれの値を記載する。ValueSet要素の1つ1つの値には、Property要素として値に付加するデータを追記することもできる。たとえば、用紙サイズ「A4」に関して幅や高さなどの情報を付加したいときにProperty要素を使用する。DefaultValue要素には値リストのうちデフォルト値となるものを記載する。図4では「Collated」と「Uncollated」という2つの値と、「Collated」がデフォルト値であることが記載されている。また、ReasonInfoTable要素にはReasonSet要素として、リーズンを3つ記載している。ConflictRules要素にはConflict要素で1つの禁則処理ルールを記載する。禁則処理ルールにはそれぞれ優先度が存在し、それをpriorityという属性で記載する。優先度の値が小さいものから禁則処理ルールを評価していくので、小さいほうの優先度が高い。このようにSV310ごとに優先度が設定されているのは、同時入力時の禁則処理を行うために存在する。印刷設定として入力される値がすでに禁則状態にあり、どちらかの値を変更しなければならないときに、優先度が高い機能の値を優先して設定することで、ユーザが望むような印刷設定を行うことができる。優先度が存在しない場合は、禁則処理ルールを評価する順番によっては、先に評価したほうの機能が優先されるので、いつも一定の結果になるとは限らなくなってしまう。Conflict要素にはValue要素とCondition要素があり、Value要素には、禁則した結果として変わる値を記載する。また、Conflict要素には禁則した結果として変わるステータスをstatus属性で記載できる。Condition要素には、禁則する対象のSV310の名前と値を記載する。name属性には対象のSV310の名前を、Value要素には対象のSV310の値を記載する。Condition要素を並列に記載する場合は、論理積(AND)の意味となる。他に算術演算のような機能もあり、result属性がfalseの場合は否定(NOT)に、Block要素は括弧に、AnyOneCondition要素は論理和(OR)になる。図4では3つの禁則処理ルールがある。製本のSV310である「Booklet」の値が「None」以外だったら、「Collated」にしてSV310自体のステータスを利用不可「NotAvailable」にする。表紙「CoverFront」と裏表紙「CoverBack」が「NoCover」以外つまり指定されているときは、「Collated」にしてSV310自体のステータスを利用不可「NotAvailable」にする。ステイプル「Staple」が中とじ「SaddleStitch」のときは「Collated」にしてSV310自体のステータスを利用不可「NotAvailable」にするという3つの禁則処理ルールである。
【0028】
図5は、プリンタドライバに対してユーザが設定を指示したときに開始する。S501は、その都度確認することになっているが、予め処理をして、ユーザが印刷設定を変更したら、S502以降からの処理をするようにしてもよい。
【0029】
次に、コンフリクトエンジン304の禁則エンジン306による禁則処理のロジックを、図5のフローチャートに沿って追っていく。まずは、API302やユーザインタフェース303からSV310のロック機能の情報をもらう。ロック情報を元に禁則エンジン306は、対象となるSV310の値をロックする値に変更し、ロックフラグを立てる(ステップ501)。また、デフォルト値をロックする値に変更する。
【0030】
ステップ502では、次にAPI302やユーザインタフェース303が、DEVMODE構造体やPrintTicketなどの印刷設定や、ユーザインタフェースからのコントロールの入力から、ユーザが指定した印刷設定情報を受け取る(ステップ502)。API302やユーザインタフェース303は受け取った印刷設定情報を元に、変更するSV310の値のリストを作成する。これはSV310の名前と値のペアと、印刷設定情報との組み合わせが記載されたテーブルを持っていて、そのテーブルに沿ってリストを作成する。テーブルはXMLファイルに記載されており、機種依存ファイル307に含まれている。禁則エンジン306は値のリストを元に、対応するSV310の現在値をそれぞれ印刷設定の値に変更する(ステップ503)。禁則エンジン306はここで値が変更されたSV310のリストを作成する(ステップ504)。すでに印刷設定の値でリストを作成しているが、ここでは値が変更できたSV310のリストを作成している。また、禁則処理ルールを処理する過程においては、実際に値を変更したSV310と禁則処理ルールの結果値が変更されたSV310の両方を含んだリストを作成する。ステップ504で作成したリストに含まれるSV310の禁則処理ルールをすべて取り出し、優先度順に並べる(ステップ505)。ここで、SV310の中でロックされているものがあれば、ロックされたSV310の禁則処理ルールをまず優先度順に並べ、他の禁則処理ルールはその後ろに優先度順に並べる。優先度順に並べた禁則処理ルールがまだ存在していれば(ステップ506)、禁則処理ルールを1つ取り出し(ステップ508)、禁則処理ルールの評価を行う。禁則処理ルールに記載されたSV310の値やプロパティを参照し、禁則処理ルールにおけるCondition要素に合致してルールが成立するかどうかを判定する。禁則処理ルールが成立するのであれば、SV310の値を変更する必要があるかどうかを判定する(ステップ509)。値を変更しなければならないときは、ロック情報によってロックフラグが立っているかどうかを判定する(ステップ510)。ロックされているときは、禁則処理ルールにおけるCondition要素に含まれるSV310の値に対して、ステータスを利用不可に変更する(ステップ511)。つまり、通常は禁則処理ルールに記載された対象のSV310の値によって自分の値を変更するのに対して、ロックのときは対象のSV310のステータスを変えるように動作する。ロックされていないときは通常の禁則処理として、禁則処理ルールに従って値を変更しようとする。このとき、変更しようとしている対象のSV310の値が、禁則処理によってすでに1度値が変更されたことがないかどうかのフラグを判定する(ステップ512)。禁則処理は値が変更されたことを起点とし、禁則処理ルールを評価していくが、値が何度も変更されてしまうと、禁則処理ルールによっては評価がループしてしまい終わらなくなることがある。そこで、禁則処理ルールによってSV310の値が変更されるのは1回までとして制限することで、無現ループすることを防いでいる。値が1回も変更されていないことが確かめられたら、SV310の値を変更し、SV310の値を禁則処理ルールによって変更したというフラグを立てる(ステップ513)。そして、次の禁則処理ルールを評価する。禁則処理ルールがすべてなくなったら、禁則処理によって値が変更されたSV310があるかどうかを判定する(ステップ507)。値がひとつも変更されていなければ、すべての禁則処理ルールを評価した結果、値が安定した状態にあると判断し終了する。変更されていれば、値が変更されたSV310の禁則処理ルールをすべて取り出し、優先度順に並べて再度評価を行う。このときもロックしているSV310は優先度を高くする。
【0031】
このように、コンフィギュレーションモジュール301はコンフリクトエンジン304とSV310の持つロック機能を利用して、機能を完全に固定化することができ、禁則処理においても矛盾がないように動作する。
【0032】
(実施例2)
実施例1とは別のコンフィギュレーションモジュールの実施方法として、図9のブロック図にあるシステムを挙げる。実施例1との違いは禁則処理ルールで、実施例1の禁則処理ルールでは対象の値を元に自分の変更になる値を記載していたが、実施例2の禁則処理ルールでは、同時に設定することが不可能な組み合わせを記載するというのが異なる。したがって、コンフリクトエンジンが禁則処理を行うロジックも異なるが、優先度の並び変えによって同等のロック機能を実現する。
【0033】
図9において、コンフィギュレーションモジュール903は、プリンタが異なっても同じモジュールを使える共通のモジュールである。プリンタごとに依存するデータはGPD(Generic Description Language)と呼ばれるテキストファイルに記載しており、GPDファイルをコンフィギュレーションモジュール903のGPDパーサー904が解釈して動作することで、プリンタ固有の動作を実現している。図9では、プリンタAに対応したGPD901を読み込めばプリンタAの動作を、プリンタBに対応したGPD902を読み込めばプリンタBの動作を行う。プリンタドライバを使用するたびにGPDファイルをGPDパーサー904が読み込むのは非効率なので、GPDファイルを読み込んだらバイナリファイルを作成し保存しておく。その後、GPDファイルの記載に変更がなければ、バイナリファイルを使って動作することで、高速化を実現している。
【0034】
図9では、プリンタAに対応したGPD901を読み込んだときは、バイナリデータ906を、プリンタBに対応したGPD902を読み込んだときは、バイナリデータ907を作成している。GPDに記載されたデータを元に、コンフィギュレーションモジュール903は機能ごとのオブジェクトインスタンスを作成し、禁則処理を行う。アプリケーション910からの印刷設定データはCOMPSTUI.DLL909を経由してコンフィギュレーションモジュール903に渡される。また、ユーザインタフェースでの印刷設定はCOMMONUI905上からコンフィギュレーションモジュール903に渡される。コンフィギュレーションモジュール903は印刷設定を機能ごとのオブジェクトインスタンスに反映させ、禁則処理を行ってまた、アプリケーション910やユーザインタフェース上に印刷設定を返している。コンフィギュレーションモジュール903はまたユーザインタフェースプラグイン908を使って、新たな機能を自由に追加することができる。
【0035】
図10はGPDの記載の一部である。*Featureは機能の名前を記述する。図10ではプリンタの給紙段でInputBinという名称をつけたFeatureとして定義している。*Optionは機能に対する値である。図10ではAUTO、INPUTTRAY_MANUAL、INPUTTRAY_CASSETTE1、INPUTTRAY_CASSETTE2の4つのOptionが存在し、どれか1つをInputBinの現在値として選択することになる。*DefaultOptionではOptionのうちどれがデフォルト化を記述する。ここではAUTO、つまり給紙段の「自動」がデフォルトであるという記載になる。
【0036】
禁則処理ルールとしては、*Constraintsと*InvalidConbinationの2つがある。*Constraintsは自分のOptionと他のFeatureのOptionと同時に組み合わさってはならない禁則を記載する。*InvalidConbinationはGPDファイルのルート(行の先頭)に記載し、FeatureのOption同士の禁則を記載する。*InvalidConbinationでは2つ以上のOptionの禁則が記載することができるのが、*Constraintsとの違いである。また、*ConflictPriorityでは、Featureの優先度を記載している。数値が小さいほど優先度が高く、先に禁則処理を評価する。このGPDを読み込んで、コンフィギュレーションモジュール903はFeatureオブジェクトを作成し、禁則処理を行う。
【0037】
また、FeatureにはOptionを固定化するためにロックしているかどうかのフラグを持ち、ロックしている場合はOptionが変更されないようにしている。ロックはGPDのFeatureにあらかじめ記載しておくことも可能である(図12)。
【0038】
コンフィギュレーションモジュール903が行う禁則処理のロジックを、図11のフローチャートに従って追っていく。Featureのロック情報をアプリケーション910やCommonUIのユーザインタフェース905が持っていたときは、指定されたFeatureのOptionに変更し、ロックフラグを立てる(ステップ1101)。
【0039】
また、DefaultOptionをロックするOptionに変更する。次にアプリケーション910やCommonUIのユーザインタフェース905からユーザが指定した印刷設定情報を受け取る(ステップ1102)。この時点ではまだFeatureにOptionをセットしない。すべてのFeatureをリストとして列挙し、ConflictPriority順にリストを並べる(ステップ1103)。
【0040】
ここで、ロックされているFeatureがあれば、ロックされているFeatureをConflictPriority順に並べ、その後ろに通常のFeatureをConflictPriority順に並べる。リストにFeatureが残っていれば(ステップ1104)、リストからFeatureを取り出す(ステップ1105)。指定された印刷設定の値に対応するFeatureのOption、つまり設定しようとしているOptionが、ConstraintsもしくはInvalidConbinationの対象となっているかどうかを、すべてのConstraintsもしくはInvalidConbinationを見て判定する(ステップ1106)。
【0041】
対象となっていれば、禁則状態にあるということで、印刷設定をFeatureの現在の値としてOptionに設定することはできないので、次のFeatureに進む。禁則状態でなければ、次に現在のFeatureのOptionがロック状態になるかどうかを確認する(ステップ1107)。
【0042】
現在のOptionがロック状態であれば、やはり印刷設定をOptionとして設定することができないので、次のFeatureに進む。変更するOptionが禁則状態ではなく、かつ現在のOptionがロック状態でなければ、Featureに印刷設定の値としてOptionをセットする(ステップ1108)。そして、すべてのFeatureに対して処理が終わったら、終了となる。
【0043】
このように、Featureをロックすることで、機能を固定化することができる。機能を固定化したり、禁則処理を行うにあたっては実施例2のほうが簡易であり実装しやすい。しかし、実施例2の禁則処理では、値を変更することで他の値を変更するという処理ができないため、ユーザは印刷設定が禁則状態にあるときはいったん禁則状態を解除するように設定を変更し、再度、値を設定するということをしなければならなくなる。
【0044】
他に、固定化指示可能な印刷設定として、パスワードによる親展印刷の設定の固定、ユーザ名・日時印刷固定なども想定できる。これらの印刷設定を固定化した場合、セキュアプリント固定にすると、保存(メールボックス)や追い越し印刷がOFFになる。ユーザ名や、日時の印刷の固定にすると、ポスターがOFFになるという処理が走る。プリンタのメモリとは、プリンタメモリである。ユーザインタフェース画面とは、ユーザインタフェースの画面である。
【0045】
本実施形態の技術原理をまとめておく。
【0046】
印刷装置の一例であるプリンタ214に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理するコンピュータを開示した。そして、外部記憶装置に、印刷設定の禁則を定義した禁則ルールを記憶する。そして、プリンタドライバのユーザインタフェースやXMLファイルを用いて、印刷設定の固定化を指示する。さらに、コンフィギュレーションモジュールは、固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げる。これは、ルール優先度設定の一例である。
【0047】
外部記憶装置に、印刷設定の値をオブジェクトとして格納する。
【0048】
コンフィギュレーションモジュールは、禁則処理ルールを元にしてオブジェクトの値を変更し、優先度順に禁則処理ルールを評価する。そして、固定化を指示された印刷設定は、ユーザインタフェースからの入力または禁則処理ルールの実行により変更されないようにする。さらに、値を固定化指示したオブジェクトに対して値を変更するような禁則処理ルールを処理するときは、コンフィギュレーションモジュールは、変更する原因となったオブジェクトの値をプリンタドライバのユーザインタフェースから選択できない状態にすることができる。
【0049】
プリンタドライバのユーザインタフェースは、固定化を指示された印刷設定をモニタ110に識別可能に表示する処理を制御する。例えば、図7のごとくである。
【0050】
禁則処理の優先順位はメーカが勝手に決めている。しかし、本実施形態を用いて、禁則処理を自由に変更できるのは便利である。両面固定、2Up固定、モノクロ固定、保存(メールボックス)固定などをユーザインタフェースやXMLファイルで指示できるようにすると好適である。メールボックスとは、プリンタや複合機のメモリ上に、PCから印刷データ等を送信して格納させるためのボックスである。設定によっては、印刷出力を禁止し、必ずメールボックスに保存させることもできる。
【0051】
また、他の人からもらった文書の印刷設定が「はがき」になっていたときに、「はがき」であることを意識せずに印刷してしまったときなどは印刷できないよりも「A4」「両面」で出てくれるのは便利である。また、保存(メールボックス)固定にすると、指定した用紙サイズが「ユーザ定義用紙(長尺)」→「A4」に修正される。これまでの処理であれば、長尺用紙で印刷になってしまっていたので、常に保存にさせることで紙資源の無駄を防げる。つまり、この環境では長尺用紙は使えないということになる。また、他の実施形態として、メールボックスへの保存設定に違反する設定があれば、メールボックスへの印刷データの保管はせずに、印刷中止して、管理者に対して通知しても良いと思われる。ここでは、メールボックスの設定は、印刷に関わる設定としておく。
【0052】
また、2Up固定にすると、製本がOFFに修正される設計も想定できる。製本ができるときは製本で、2Upは諦め、製本がプリンタの仕様上でないときは2Upに固定する、準固定モードも想定できる。
【0053】
(他の実施形態)
本実施形態における図5、図11に示す処理が、外部からインストールされるプログラムによって、コンピュータにより遂行される。そして、その場合、CD−ROMやフラッシュメモリやFD等の記憶媒体により、あるいはネットワークを介して外部の記憶媒体から、プログラムを含む情報群をホストコンピュータに供給される場合でも本発明は適用されるものである。
【0054】
以上のように、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、又は、外部サーバ(図示省略)からダウンロードすることで、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【0055】
この場合、記憶媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、たとえば、フロッピィーディスク、ハードディスク、光ディスク、光磁気ディスク、DVD、CD−ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM等を用いることができる。
【0056】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【図面の簡単な説明】
【0057】
【図1】本発明の一実施形態としての、コンピュータシステムのハードウェアとソフトウェアのブロック構成図である。
【図2】本発明の一実施形態としての、XPSDrv印刷システムのブロック構成図である。
【図3】本発明の一実施形態としての、実施例1におけるコンフィギュレーションモジュールのブロック構成図である。
【図4】本発明の一実施形態としての、実施例1における機種依存ファイルに含まれるXMLファイルのフォーマットの一部である。
【図5】本発明の一実施形態としての、実施例1における禁則エンジンの禁則処理を行うロジックのフローチャートである。
【図6】本発明の一実施形態としての、実施例1におけるロック機能を指定するユーザインタフェース画面の一部である。
【図7】本発明の一実施形態としての、実施例1におけるロック機能が指定された印刷設定画面である。
【図8】本発明の一実施形態としての、実施例1における機種依存ファイルに含まれるXMLファイルにおいて、ロック機能を有効にした一部のXMLである。
【図9】本発明の一実施形態としての、実施例2におけるコンフィギュレーションモジュールのブロック構成図である。
【図10】本発明の一実施形態としての、実施例2における機種依存ファイルであるGPDファイルの一部である。
【図11】本発明の一実施形態としての、実施例2におけるコンフィギュレーションモジュールの禁則処理のフローチャートである。
【図12】本発明の一実施形態としての、実施例2における機種依存ファイルでロック機能を有効にした一部のGPDである。
【図13】本発明の一実施形態としての、印刷設定のバイナリDEVMODE構造体である。
【図14】本発明の一実施形態としての、印刷設定のPrintTicketのXMLである。
【図15】本発明の一実施形態としての、XPSスプールファイルのブロック図である。
【特許請求の範囲】
【請求項1】
印刷装置に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理する情報処理装置において、
印刷設定の競合を禁止する禁則を定義した禁則ルールを記憶する記憶手段と、
印刷設定の固定化を指示する指示手段と、
前記固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げて設定するルール優先度設定手段と、
を備える情報処理装置。
【請求項2】
印刷設定の値をオブジェクトとして格納する手段と、
禁則処理ルールを元にしてオブジェクトの値を変更する手段と、
優先度順に禁則処理ルールを評価する手段と、
前記固定化を指示された印刷設定は、ユーザインタフェースからの入力または禁則処理ルールの実行により変更されないようにする手段と、
を備える請求項1に記載の情報処理装置。
【請求項3】
値を固定化指示したオブジェクトに対して値を変更するような禁則処理ルールを処理するときは、変更する原因となったオブジェクトの値をプリンタドライバのユーザインタフェースから選択できない状態にする手段を有する請求項1に記載の情報処理装置。
【請求項4】
前記指示手段は、プリンタドライバのユーザインタフェース画面を介して印刷設定の固定化を指示する請求項1に記載の情報処理装置。
【請求項5】
前記指示手段により固定化を指示された印刷設定が識別可能に表示される請求項1に記載の情報処理装置。
【請求項6】
両面、2Up、モノクロ、プリンタメモリへの保存、親展印刷、ユーザ名又は日時の印刷、の印刷設定のうち、少なくともひとつを前記指示手段は固定化指示できる請求項1に記載の情報処理装置。
【請求項7】
印刷装置に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理する情報処理装置における方法において、
印刷設定の競合を禁止する禁則を定義した禁則ルールを記憶する記憶工程と、
印刷設定の固定化を指示する指示工程と、
前記固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げて設定するルール優先度設定工程と、
を備える情報処理方法。
【請求項8】
印刷設定の値をオブジェクトとして格納する工程と、
禁則処理ルールを元にしてオブジェクトの値を変更する工程と、
優先度順に禁則処理ルールを評価する工程と、
前記固定化を指示された印刷設定は、ユーザインタフェースからの入力または禁則処理ルールの実行により変更されないようにする工程と、
を備える請求項7に記載の情報処理方法。
【請求項9】
値を固定化指示したオブジェクトに対して値を変更するような禁則処理ルールを処理するときは、変更する原因となったオブジェクトの値をプリンタドライバのユーザインタフェースから選択できない状態にする工程を有する請求項7に記載の情報処理方法。
【請求項10】
前記指示工程は、プリンタドライバのユーザインタフェース画面を介して印刷設定の固定化を指示する請求項7に記載の情報処理方法。
【請求項11】
前記指示工程により固定化を指示された印刷設定が識別可能に表示される請求項7に記載の情報処理方法。
【請求項12】
両面、2Up、モノクロ、プリンタメモリへの保存、親展印刷、ユーザ名又は日時の印刷、の印刷設定のうち、少なくともひとつを前記指示工程は固定化指示できる請求項7に記載の情報処理方法。
【請求項13】
請求項7乃至12のいずれか1項に記載の方法をコンピュータに実行させる制御プログラム。
【請求項1】
印刷装置に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理する情報処理装置において、
印刷設定の競合を禁止する禁則を定義した禁則ルールを記憶する記憶手段と、
印刷設定の固定化を指示する指示手段と、
前記固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げて設定するルール優先度設定手段と、
を備える情報処理装置。
【請求項2】
印刷設定の値をオブジェクトとして格納する手段と、
禁則処理ルールを元にしてオブジェクトの値を変更する手段と、
優先度順に禁則処理ルールを評価する手段と、
前記固定化を指示された印刷設定は、ユーザインタフェースからの入力または禁則処理ルールの実行により変更されないようにする手段と、
を備える請求項1に記載の情報処理装置。
【請求項3】
値を固定化指示したオブジェクトに対して値を変更するような禁則処理ルールを処理するときは、変更する原因となったオブジェクトの値をプリンタドライバのユーザインタフェースから選択できない状態にする手段を有する請求項1に記載の情報処理装置。
【請求項4】
前記指示手段は、プリンタドライバのユーザインタフェース画面を介して印刷設定の固定化を指示する請求項1に記載の情報処理装置。
【請求項5】
前記指示手段により固定化を指示された印刷設定が識別可能に表示される請求項1に記載の情報処理装置。
【請求項6】
両面、2Up、モノクロ、プリンタメモリへの保存、親展印刷、ユーザ名又は日時の印刷、の印刷設定のうち、少なくともひとつを前記指示手段は固定化指示できる請求項1に記載の情報処理装置。
【請求項7】
印刷装置に対して送信して印刷させるデータを生成するプリンタドライバにおける印刷設定を処理する情報処理装置における方法において、
印刷設定の競合を禁止する禁則を定義した禁則ルールを記憶する記憶工程と、
印刷設定の固定化を指示する指示工程と、
前記固定化を指示された印刷設定に関わる禁則ルールの優先度を従前の優先度よりも上げて設定するルール優先度設定工程と、
を備える情報処理方法。
【請求項8】
印刷設定の値をオブジェクトとして格納する工程と、
禁則処理ルールを元にしてオブジェクトの値を変更する工程と、
優先度順に禁則処理ルールを評価する工程と、
前記固定化を指示された印刷設定は、ユーザインタフェースからの入力または禁則処理ルールの実行により変更されないようにする工程と、
を備える請求項7に記載の情報処理方法。
【請求項9】
値を固定化指示したオブジェクトに対して値を変更するような禁則処理ルールを処理するときは、変更する原因となったオブジェクトの値をプリンタドライバのユーザインタフェースから選択できない状態にする工程を有する請求項7に記載の情報処理方法。
【請求項10】
前記指示工程は、プリンタドライバのユーザインタフェース画面を介して印刷設定の固定化を指示する請求項7に記載の情報処理方法。
【請求項11】
前記指示工程により固定化を指示された印刷設定が識別可能に表示される請求項7に記載の情報処理方法。
【請求項12】
両面、2Up、モノクロ、プリンタメモリへの保存、親展印刷、ユーザ名又は日時の印刷、の印刷設定のうち、少なくともひとつを前記指示工程は固定化指示できる請求項7に記載の情報処理方法。
【請求項13】
請求項7乃至12のいずれか1項に記載の方法をコンピュータに実行させる制御プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【公開番号】特開2010−40002(P2010−40002A)
【公開日】平成22年2月18日(2010.2.18)
【国際特許分類】
【出願番号】特願2008−205617(P2008−205617)
【出願日】平成20年8月8日(2008.8.8)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成22年2月18日(2010.2.18)
【国際特許分類】
【出願日】平成20年8月8日(2008.8.8)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]