以下、図面に基づいて本発明の実施の形態を説明する。図2は、本発明の実施の形態における画像形成装置のハードウェア構成の一例を示す図である。図2では、画像形成装置の具体例として、プリンタ、コピー、スキャナ、又は、ファクス等の複数の機能を一台の筐体において実現する複合機1のハードウェア構成が示されている。
複合機1のハードウェアとしては、コントローラ601と、オペレーションパネル602と、ファクシミリコントロールユニット(FCU)603と、撮像部604と、印刷部605が存在する。
コントローラ601は、CPU611、ASIC612、NB621、SB622、MEM−P631、MEM−C632、HDD(ハードディスクドライブ)633、メモリカードスロット634、NIC(ネットワークインタフェースコントローラ)641、USBデバイス642、IEEE1394デバイス643、セントロニクスデバイス644により構成される。
CPU611は、種々の情報処理用のICである。ASIC612は、種々の画像処理用のICである。NB621は、コントローラ601のノースブリッジである。SB622は、コントローラ601のサウスブリッジである。MEM−P631は、複合機1のシステムメモリである。MEM−C632は、複合機1のローカルメモリである。HDD633は、複合機1のストレージである。メモリカードスロット634は、メモリカード635をセットするためのスロットである。NIC641は、MACアドレスによるネットワーク通信用のコントローラである。USBデバイス642は、USB規格の接続端子を提供するためのデバイスである。IEEE1394デバイス643は、IEEE1394規格の接続端子を提供するためのデバイスである。セントロニクスデバイス644は、セントロニクス仕様の接続端子を提供するためのデバイスである。オペレーションパネル602は、オペレータが複合機1に入力を行うためのハードウェア(操作部)であると共に、オペレータが複合機1から出力を得るためのハードウェア(表示部)である。撮像部604は、原稿から画像(画像データ)を読み取るためのハードウェア(スキャナ)である。印刷部605は、画像(画像データ)を印刷用紙に印刷するためのハードウェア(プリンタ)である。
図3は、本発明の実施の形態の画像形成装置におけるソフトウェア構成例を示す図である。図3に示されるように、複合機1におけるソフトウェアは、デバイス制御層10、フィルタ層20、アクティビティ層30、UI制御部40、及び履歴記録部50等より構成される。なお、図3における各部の上下関係は、各部間の呼び出し関係に基づいている。すなわち、基本的に図中において上にある層が下の層を呼び出す。
デバイス制御層10は、デバイス(ハードウェア)を直接的に制御するソフトウェア部品(ドライバ)群が実装されている部分であり、例えば、読取制御部11、印刷制御部12、保管制御部13、FAX制御部14、及び画像加工部15等が含まれる。
読取制御部11は、原稿からの画像データの読み取りを撮像部604に実行させるための制御を行う。印刷制御部12は、印刷用紙への画像データの印刷を印刷部605に実行させるための制御を行う。保管制御部13は、撮像部604によって読み取られた画像データ、又はネットワークを介して受信された画像データ等のHDD633への保存(記録)や読み出し等に関する処理の制御を行う。FAX制御部14は、FAXの送受信をFCU603に実行させるための制御を行う。画像加工部15は、画像データの加工処理に関する処理制御を行う。
フィルタ層20は、ユーザによって要求されるジョブを実現するための一部の機能をデバイス制御層10におけるソフトウェア部品を用いて実行するソフトウェア部品群が実装されている部分である。本実施の形態ではフィルタ層20におけるソフトウェア部品を「フィルタ」と呼ぶ。これは、複合機1のジョブを実行する手アプリケーションが、「パイプ&フィルタ」と呼ばれるソフトウェアアーキテクチャを基づいていることによる。
図4は、パイプ&フィルタアーキテクチャの概念的に説明するための図である。図4において、「F」はフィルタを示し、「P」はパイプを示す。図中に示されるように、各フィルタはパイプによって接続される。フィルタは、入力されたデータに対して変換を施し、その結果を出力する。パイプは、フィルタから出力されたデータを次のフィルタに伝達する。なお、パイプは、記憶領域によって実現される。
すなわち、本実施の形態における複合機1では、ジョブをドキュメント(画像データ)に対する「変換」の連続として捉える。複合機1のジョブは、ドキュメントの入力、加工、及び、出力によって構成されるものとして一般化することができる。そこで「入力」、「加工」、及び、「出力」を、それぞれ「変換」として捉え、一つの「変換」を実現するソフトウェア部品がフィルタとして構成される。入力を実現するフィルタを特に「入力フィルタ」という。また、加工を実現するフィルタを特に「加工フィルタ」という。更に、出力を実現するフィルタを特に「出力フィルタ」という。なお、各フィルタは独立しており、フィルタ間における依存関係(呼び出し関係)は基本的に存在しない。従って、フィルタ単位で追加(インストール)又は削除(アンインストール)が可能とされている。
図3において、読取フィルタ21、蓄積文書入力フィルタ22、受信フィルタ23、及びPC文書入力フィルタ24は、入力フィルタである。
読取フィルタ21は、読取制御部11を介して撮像部604による画像データの読み取りを実行し、読み取られた画像データを出力する。蓄積文書入力フィルタ22は、保管制御部13を介して複合機1の記憶装置に蓄積されている文書データ(画像データ)を読み出し、読み出されたデータを出力する。受信フィルタ23は、FAX制御部14を介してFAX受信を実行し、受信されたデータを出力する。PC文書入力フィルタ24は、非図示のクライアントPCから印刷データを受信し、受信された印刷データを出力する。
また、編集フィルタ25は加工フィルタである。編集フィルタ25は、画像加工部15を用いて入力されたデータに所定の画像変換処理(集約、拡大、又は縮小等)を施し、出力する。
また、印刷フィルタ26、文書蓄積フィルタ27、及び送信フィルタ28は、出力フィルタである。
印刷フィルタ26は、入力されたデータを印刷制御部12を介して印刷部605に出力(印刷)させる。文書蓄積フィルタ27は、入力されたデータを保管制御部13を介して複合機1内のHDD633内に保存する。送信フィルタ28は、入力されたデータをFAX制御部14を介してFAX送信する。
アクティビティ層30は、フィルタを組み合わせて(接続して)ユーザによるジョブを実現するためのアプリケーションとしてのソフトウェア部品群が実装されている部分である。本実施の形態ではアクティビティ層30におけるソフトウェア部品(アプリケーション)を「アクティビティ」と呼ぶ。図3では、コピーアクティビティ31、FAXアクティビティ32、スキャナアクティビティ33、及びプリンタアクティビティ34が示されている。
コピーアクティビティ31は、読取フィルタ21と、編集フィルタ25と、印刷フィルタ26との組み合わせにより、コピー機能(コピーアプリケーション)を実現するアクティビティある。
FAXアクティビティ32は、受信フィルタ23と文書蓄積フィルタ27との組み合わせにより、FAX受信した画像データを保存する機能を実現するアクティビティである。
スキャナアクティビティ33は、読取フィルタ21と、編集フィルタ25と、文書蓄積フィルタ27との組み合わせにより、スキャンした画像データを保存する機能を実現するアクティビティである。
プリンタアクティビティ34は、PC文書入力フィルタ24と、編集フィルタ25と、印刷フィルタ26との組み合わせにより、印刷機能(プリンタアプリケーション)を実現するアクティビティである。
なお、各アクティビティ31は独立しており、アクティビティ間における依存関係(呼び出し関係)は基本的に存在しない。したがって、アクティビティ単位で追加(インストール)又は削除(アンインストール)が可能である。よって、図3に示されているアクティビティ以外にも、必要に応じて各種のフィルタの組み合わせによるアクティビティを作成し、インストールすることができる。
フィルタ及びアクティビティについて更に詳しく説明する。図5は、フィルタの構成要素を説明するための図である。図5に示されるように、各フィルタは、フィルタ設定用UI、フィルタロジック、フィルタ固有下位サービス、及び永続記憶領域情報等より構成される。このうち、フィルタ設定用UI、フィルタ固有下位サービス、及び永続記憶領域情報については、フィルタによって必ずしも構成要素に含まれない。
フィルタ設定用UIは、フィルタの動作条件等を設定させるための画面をオペレーションパネル602等に表示させるプログラムである。すなわち、フィルタごとに動作条件が設定される。例えば、読取フィルタ21であれば、フィルタ設定用UIは、解像度、濃度、画像種別等を設定させる画面が相当する。なお、オペレーションパネル602が、HTMLデータや、スクリプトに基づいて表示制御を行うことが可能であれば、フィルタ設定用UIは、HTMLデータやスクリプトであってもよい。
フィルタロジックは、フィルタの機能を実現するためロジックが実装されたプログラムである。すなわち、フィルタの構成要素としてのフィルタ固有下位サービスや、デバイス制御層10等を利用して、フィルタ設定用UIを介して設定された動作条件に応じてフィルタの機能を実現する。例えば、読取フィルタ21であれば、スキャナによる原稿の読み取り制御のためのロジックが相当する。
フィルタ固有下位サービスは、フィルタロジックを実現するために必要な下位機能(ライブラリ)である。
永続記憶領域情報は、フィルタに対する設定情報(例えば、動作条件のデフォルト値)等、不揮発メモリに保存する必要があるデータのスキーマ定義が相当する。当該スキーマ定義は、フィルタのインストール時に登録される。
図6は、アクティビティの構成要素を説明するための図である。図6に示されるように、アクティビティは、アクティビティUI、アクティビティロジック、及び永続記憶領域情報等より構成される。
アクティビティUIは、アクティビティに関する画面(例えば、アクティビティの動作条件等を設定させるための設定画面)をオペレーションパネル602等に表示させるための情報又はプログラムである。
アクティビティロジックは、アクティビティの処理内容が実装されたプログラムである。基本的に、アクティビティロジックには、フィルタの組み合わせに関するロジック(例えば、フィルタの実行順、複数のフィルタに跨る設定、フィルタの接続変更、エラー処理等)が実装されている。
永続記憶領域情報は、アクティビティに対する設定情報(例えば、動作条件のデフォルト値)等、不揮発メモリに保存する必要があるデータのスキーマ定義が相当する。当該スキーマ定義は、アクティビティのインストール時に登録される。
図3に戻る。UI制御部40は、オペレーションパネル602への操作画面の表示や、当該操作画面を介して入力される指示に応じた処理の起動等を行う。
履歴記録部50は、複合機1における各種の事象の発生回数等を記録するためのカウンタの更新処理(カウントアップ等)を行う。カウンタをその用途によって分類した場合、例えば、課金に利用される課金カウンタ、複合機1の利用状況を把握するために利用される管理者カウンタ、ユーザ別の利用状況や課金振替に利用されるユーザ別カウンタ、利用制限(例えば、印刷枚数の制限等)に利用される利用量制限カウンタ、ジョブの実行状況の把握等に利用されるジョブログカウンタ等に分類され、各分類には複数のカウンタが属しうる。例えば、課金カウンタは、モノクロ印刷のカウンタやコピー印刷のカウンタ等、複数のカウンタによって構成される。また、複数の用途に利用される(すなわち、複数の分類に属する)カウンタも存在しうる。なお、本実施の形態において「課金」とは、複合機1の利用状況に応じて複合機1の販売者がユーザに対して使用料を請求することをいう。したがって、特に課金カウンタの操作については、フィルタ等のカスタマイズによって変更可能であるという状態は好ましくない。例えば、印刷ジョブが実行されたのにもかかわらず、課金カウンタがカウントアップされないような仕組みが実装されてしまうと、販売者側は、正確に課金を行うことができなくなってしまうからである。なお、カウンタは、HDD633等の記憶装置に記録されている。
なお、図3のソフトウェア構成において、デバイス制御層10は、カスタマイズするための手段は公開されていない。すなわち、ユーザやソフトウェアベンダ等、複合機1のベンダ以外によって、新たなソフトウェア部品をデバイス制御層10に追加したり、デバイス制御層10における既存のソフトウェア部品を改変したりすることは基本的にできない。一方、フィルタ層20及びアクティビティ層30は、ユーザやソフトウェアベンダ等によって、新たなフィルタ又はアクティビティの追加等によるカスタマイズが可能とされている。
本実施の形態では、コピーアクティビティ31の動作時(すなわち、コピージョブの実行時)におけるカウンタの更新処理について説明する。したがって、デバイス層10、フィルタ層20、及びアクティビティ層30に関しては、図7に示されるソフトウェア部品の動作に注目する。
図7は、デバイス層、フィルタ層、及びアクティビティ層において本実施の形態で注目対象となるソフトウェア部品を示す図である。コピーアクティビティ31は、読取フィルタ21、編集フィルタ25、及び印刷フィルタ26を利用する。したがって、フィルタ層20では、図示される3つのフィルタが注目対象となる。また、読取フィルタ21は、読取制御部11を利用し、編集フィルタ25は画像加工部15を利用し、印刷フィルタ26は印刷制御部12を利用する。したがって、デバイス制御層10では、図示される3つのソフトウェア部品が注目対象となる。
以下、複合機1の処理手順について説明する。図8は、第一の実施の形態におけるカウンタの更新処理を説明するための図である。
オペレーションパネル602における操作によって、コピーアクティビティ31が実行対象として選択されると、UI制御部40は、コピーアクティビティ31のアクティビティUIに基づいてコピーアクティビティ31の動作条件の設定画面(コピー画面)を表示させる。コピー画面内には、コピーアクティビティ31が利用する各フィルタ(読取フィルタ21、編集フィルタ25、及び印刷フィルタ26)の動作条件の設定領域が、各フィルタのフィルタ設定用UIに基づいてUI制御部40によって表示される。したがって、ユーザは、コピー画面において各フィルタの動作条件を設定する。設定された動作条件は、UI制御部40より各フィルタに通知され、各フィルタのフィルタロジック内において保持される。
動作条件の設定が完了し、コピーの実行が指示されると(例えば、スタートボタンが押下されると)、コピーアクティビティ31は、読取フィルタ21、編集フィルタ25、及び印刷フィルタ26に対してジョブの実行を指示する。当該指示に応じて、入力フィルタ(ここでは、読取フィルタ21)以外のフィルタ(ここでは、編集フィルタ25及び印刷フィルタ26)は直ちに処理を開始せず、自らの入力側に接続されているパイプに対してデータが入力されるまで待機する。すなわち、複合機1が採用するパイプ&フィルタのアーキテクチャにおいては、フィルタ間の処理のタイミングの同期はパイプによってとられる。
読取フィルタ21は、コピーアクティビティ31によるジョブの実行指示に応じ、原稿のページごとに読み取りを行うことを履歴記録部50に通知する(S11)。履歴記録部50は、当該通知に応じ、ページの読み取りに応じて更新すべきカウンタをカウントアップする。但し、課金カウンタに属するカウンタについては、このタイミングではカウントアップは行われない。
続いて、読取フィルタ21は、設定された動作条件を伴って、原稿の読み取りを読取制御部11に要求する(S12)。この際、読取フィルタ21は、原稿より読み取られた画像データを格納すべきメモリのアドレス(読取フィルタ21と編集フィルタ25との間のパイプに係るメモリのアドレス)をも読取制御部11に通知する。読取制御部11は、撮像部604を制御し、動作条件に従った原稿の読み取りを実行し、読み取られた画像データを読取フィルタ21によって指定されたアドレスに格納する。また、読取制御部11は、原稿のページが読み取られるたびにページの読み取りが実行されたことを履歴記録部50に通知する(S13)。履歴記録部50は、当該通知に応じ、ページの読み取りの完了に応じて更新すべきカウンタをカウントアップする。なお、履歴記録部50は、このタイミングにおいて課金カウンタに属するカウンタをカウントアップする。すなわち、履歴記録部50は、カスタマイズ手段(方法)が公開されているフィルタからの通知(図中において、各フィルタから履歴記録部50への破線の矢印)に基づいて課金カウンタの値は更新せず、カスタマイズ手段が公開されていないデバイス制御層10からの通知(図中において、実線の矢印)に基づいて課金カウンタの値を更新する。これにより、カスタマイズによる課金カウンタの不正な操作が防止される。
続いて、編集フィルタ25は、読取フィルタ21との間におけるパイプに係るメモリ領域に画像データが格納されたことを検知すると、画像データの加工(編集)を行うことを履歴記録部50に通知する(S14)。履歴記録部50は、当該通知に応じ、画像データの変換に応じて更新すべきカウンタをカウントアップする。なお、上記したように、課金カウンタに属するカウンタについては、このタイミングではカウントアップは行われない。
続いて、編集フィルタ25は、設定された動作条件を伴って、画像データの加工を画像加工部15に要求する(S15)。この際、編集フィルタ25は、加工された画像データを格納すべきメモリのアドレス(編集フィルタ25と印刷フィルタ26との間のパイプに係るメモリのアドレス)を画像加工部15に通知する。画像加工部15は、動作条件に従った画像データの加工を実行し、加工された画像データを編集フィルタ25によって指定されたアドレスに格納する。なお、図8の例では、画像加工部15は、履歴記録部50に対して画像の加工が完了した旨の通知は行わない。本実施の形態では、画像の加工に応じてカウントアップされる課金カウンタが無い場合を例としているためである。但し、画像の加工に応じてカウントアップされる課金カウンタが有る場合は、画像加工部15は、加工の完了を履歴記録部50に通知すればよい。
続いて、印刷フィルタ26は、編集フィルタ25との間におけるパイプに係るメモリ領域に画像データが格納されたことを検知すると、画像データのページごとに印刷を行うことを履歴記録部50に通知する(S16)。履歴記録部50は、当該通知に応じ、ページの印刷に応じて更新すべきカウンタをカウントアップする。なお、上記したように、課金カウンタに属するカウンタについては、このタイミングではカウントアップは行われない。
続いて、印刷フィルタ26は、設定された動作条件を伴って、画像データの印刷を印刷制御部12に要求する(S17)。印刷制御部12は、印刷部605を制御し、動作条件に従った印刷を実行する。また、印刷制御部12は、ページが印刷されるたびにページの読取が実行されたことを履歴記録部50に通知する(S18)。履歴記録部50は、当該通知に応じ、ページの印刷の完了に応じて更新すべきカウンタをカウントアップする。なお、履歴記録部50は、このタイミングにおいて課金カウンタに属するカウンタをカウントアップする。
上述したように、第一の実施の形態における複合機1によれば、事象の発生に応じたカウンタの操作は履歴記録部50に一元化されている。したがって、各ソフトウェア部品(フィルタやデバイス制御層10におけるソフトウェア部品)は、発生した事象示す情報(事象発生情報)を履歴記録部50に通知すればよく、当該事象に応じてどのようなカウンタの値を更新すべきかを意識する必要はない。したがって、カウンタの構成等を変更する場合であっても、当該変更による影響は履歴記録部50に限られ、他のソフトウェア部品の改造(ソースコードの修正)等が必要とされる可能性を著しく低減させることができる。
また、課金カウンタの更新については、カスタマイズ手段が公開されていないデバイス制御層10からの通知にのみ基づいて行われるため、カスタマイズによる課金カウンタの不正な操作等を防止することができる。
ところで、第一の実施の形態の場合、各フィルタ等から個別に履歴記録部50への通知がなされるため、履歴記録部50において、各フィルタ等から通知される事象発生情報についてジョブ及びページ単位での関連付けを行う必要がある。そのため、各フィルタ等は、履歴記録部50に対して、当該関連付けを可能とする識別子(ジョブIDやページ番号)等を事象発生情報と共に通知する必要がある。但し、集約、分割(1ページを複数ページに跨って印刷すること)、文書統合(複数の文書を一つの文書に統合して印刷すること)、又は表紙若しくは合紙挿入等が行われる場合、入力されるページ(例えば、読取フィルタ21において読み取られるページ)と、出力されるページ(例えば、印刷フィルタ26において印刷されるページ)とは、必ずしも一対一には対応しない。したがって、各フィルタ等より通知される事象発生情報の関連付けは複雑な処理が要求されるという問題がある。
また、各フィルタ等が並列して動作可能である場合、各フィルタ等からの事象の通知の順序はロジック的には必ずしも保障されない(入力→加工→出力の順序通りに通知されるとは限らない)という問題もある。
また、課金カウンタのセキュリティの確保のため、課金カウンタについてはデバイス制御層10からの通知に基づいてカウントアップされ、他のカウンタについてはフィルタからの通知に基づいてカウントアップされるといったように、課金カウンタのみ事象の発生の通知元及び通知のタイミングが異なるため、電源断等の障害の発生等により課金カウンタと課金カウンタ以外との間で値のずれが生じる可能性があるという問題もある。
そこで、上記の問題点を解決した例として第二の実施の形態を説明する。なお、第二の実施の形態において特に言及しない点については、第一の実施の形態と同様でよい。まず、図9を用いて、図8(第一の実施の形態)と大きく異なる点について説明する。図9は、第二の実施の形態におけるカウンタの更新処理を説明するための図である。
第二の実施の形態では、入力フィルタ(読取フィルタ21)は、ジョブの開始に先立って、ページの入力結果(本実施の形態では読み取り結果)を格納するための仮想的な箱(以下、「ページ入力結果データ」という。)と、ページの出力結果(本実施の形態ではページの印刷結果)を格納するための仮想的な箱(以下、「ページ出力結果データ」という。)とを用意する。
図10は、ページ入力結果データの構成例を示す図である。図10において、ページ入力結果データは、1ページ分の画像データの入力について、一つの入力種別と、一つ以上のkey及びvalueの組によって構成される入力処理の属性情報とを含むデータ(例えば、構造体)である。
入力種別は、入力の種別を示す情報であり、例えば、撮像部604を用いた入力(読み取り)であれば「SCAN」といった値が登録される。また、keyは属性名であり、valueは値である。keyには入力パラメータ(読み取りパラメータ)の名前が登録され、valueにはkeyによって特定されるパラメータについて動作条件に基づいて特定される値が登録される。
また、図11は、ページ出力結果データの構成例を示す図である。図11において、ページ出力結果データは、1ページ分の画像データの出力について、一つ以上の入力種別と、編集ページ結果と、一つの出力種別と、出力ページ結果とを含むデータ(例えば、構造体)である。
入力種別は、ページ入力結果データにおける入力種別と同義である。ページ出力結果データに入力種別を含めるのは、同じ出力(例えば、印刷)が行われる場合であっても入力種別によって(例えば、印刷対象のデータがスキャンされた場合とPC等より受信された場合とによって)課金額等が異なる場合を考慮してのことである。また、一つのページ出力結果データが複数の入力種別を含み得るのは、集約等、複数ページの入力に基づいて一ページの出力が行われる場合があることを考慮してのことである。
編集ページ結果は、編集処理の属性情報であり、一つ以上のkey(属性名)とvalue(値)との組とより構成される。出力種別は、出力の種別を示す情報であり、例えば、印刷部605を用いた出力(印刷)であれば「PRINT」といった値が登録される。出力ページ結果は、出力処理の属性情報であり、一つ以上のkey(属性名)とvalue(値)との組とより構成される。
図9において、破線で示される矢印はページ入力結果データの流れを示し、点線で示される矢印はページ出力結果データの流れを示す。同図より明らかなように、それぞれの流れの中で末端のソフトウェア部品(読取制御部11、印刷制御部12)が、ページ入力結果データ又はページ出力結果データを履歴記録部50に伝達する。
すなわち、読取フィルタ21は、中身が空のページ入力結果データ及びページ出力結果データを用意すると、処理情報(処理の属性を示す情報)として動作条件に基づく属性情報(key及valueの組)をページ入力結果データに登録し、読取制御部11に対してページの読み取りを要求する際に、当該ページ入力結果データを読み取り制御部11に引き渡す(S21)。読取制御部11は、ページの読取制御を行った後、処理情報として動作条件に基づく属性情報をページ入力結果データに追加し、当該ページ入力結果データを履歴記録部50に出力することにより、ページの読み取りの実行を通知する(S22)。履歴記録部50は、入力されたページ入力結果データの内容に基づいてカウントアップすべきカウンタを判定し、当該カウンタをカウントアップする。
一方、読取フィルタ21は、ページ出力結果データについては、処理情報として入力種別を登録し、パイプを介して編集フィルタ25に引き渡す(S23)。編集フィルタ25は、動作条件に基づく画像データの加工処理を画像加工部15を用いて実行し(S24)、処理情報として当該動作条件に基づく編集ページ結果をページ出力結果データに登録し、当該ページ出力結果データをパイプを介して印刷フィルタ26に引き渡す(S25)。印刷フィルタ26は、処理情報として動作条件に基づく印刷結果をページ出力結果データに登録し、印刷制御部12に対してページの印刷を要求する際に、当該ページ出力結果データを印刷制御部12に引き渡す(S26)。印刷制御部12は、ページの印刷を行った後、処理情報として動作条件に基づく出力ページ結果をページ出力結果データに追加し、当該ページ出力結果データを履歴記録部50に出力することにより、ページの印刷を通知する(S27)。履歴記録部50は、入力されたページ入力結果データに基づいてカウントアップすべきカウンタを判定し、当該カウンタをカウントアップする。
以上の処理において、課金に影響を与える処理情報は、デバイス制御層10に属するソフトウェア部品(読取制御部11、印刷制御部12)によって、ページ入力結果データ又はページ出力結果データに登録される。すなわち、履歴記録部50は、デバイス制御層10においてページ入力結果データ又はページ出力結果データに登録された情報に基づいて、課金カウンタの値を更新する。したがって、第二の実施の形態においても、課金カウンタに関するセキュリティは適切に確保される。
図9に示した処理内容について更に詳しく説明する。図12は、第二の実施の形態におけるカウンタの更新処理を説明するためのシーケンス図である。
コピー画面を介した動作条件の設定が完了し、オペレーションパネル602を介してコピーの実行指示がユーザによって入力されると、UI制御部40は、コピージョブの実行をコピーアクティビティ31に要求する(S101)。コピージョブの実行要求に応じ、コピーアクティビティ31は、読取フィルタ21、編集フィルタ25、及び印刷フィルタ26に対してジョブの実行を指示する(S102、S103、S104)。ここで、編集フィルタ25及び印刷フィルタ26については、自らの入力側のパイプに対してデータが入力されるまで処理を待機するのは、第一の実施の形態において説明した通りである。
読取フィルタ21は、コピーアクティビティ31によるジョブの実行指示に応じ、空のページ入力結果データと空のページ出力結果データとの提供を履歴記録部50に要求する(S105)。履歴記録部50は、当該要求に応じ、空のページ入力結果データと空のページ出力結果データとを生成し、生成された二つのデータを読取フィルタ21に返却する。
続いて、読取フィルタ21は、ページ入力結果データ及びページ出力結果データに対して、動作条件に基づく属性情報又は入力種別を登録する(S106)。
図13は、処理の進行に応じたページ入力結果データの内容の変遷例を示す図である。図13に示される表において、「シーケンス番号」の列は、参考までに図12におけるステップ番号を示したものであり、ページ入力結果データを構成する情報ではない。すなわち、シーケンス番号」がS106の行が、ステップS106が行われた後のページ入力結果データの状態を示す。なお、ページ入力結果データの構成例については、図10において説明した通りである。
図13の例では、ステップS106において、二つの属性情報(キー(key)と値(value)との組)が読取フィルタ21によって登録された例が示されている。1つ目の属性情報において、キーは「dfFeed」であり、値は「FEED_FRONT」である。また、2つ目の属性情報においてキーは「resolusion」であり、値は「600DPI」である。これは、DF(Document Feeder)を利用して原稿の表面を読み取るモードにおいて、読取解像度は600dpiであることを示している。
また、図14は、処理の進行に応じたページ出力結果データの内容の変遷例を示す図である。図14に示される表において、「シーケンス番号」の列は、参考までに図12におけるステップ番号を示したものであり、ページ出力結果を構成する情報ではない。すなわち、シーケンス番号」がS106の行が、ステップS106が行われた後のページ出力結果データの状態を示す。なお、ページ出力結果データの構成例については、図11において説明した通りである。
図14の例では、ステップS106において、入力種別(「SCAN」)が登録された例が示されている。
続いて、読取フィルタ21は、ページ入力結果データを伴って、原稿の読み取りの実行を読取制御部11に要求する(S107)。この際、読取フィルタ21は、読取フィルタ21に設定された動作条件、及び原稿より読み取られた画像データを格納すべきメモリのアドレス(読取フィルタ21と編集フィルタ25との間のパイプに係るメモリのアドレス)をも読取制御部11に通知する。
続いて、読取制御部11は、撮像部604を制御し、動作条件に従った1ページ分の原稿の読み取りを実行し、読み取られた画像データを読取フィルタ21によって指定されたアドレスに格納する。また、読取制御部11は、入力種別と、動作条件に基づく属性情報とをページ入力結果データに追加登録する(S108)。その結果、ページ入力結果データは、図13において「シーケンス番号」が「S108」の行に示される状態となる。ここで、S108に係る行とS106に係る行との差分が、ステップS108において登録された情報である。すなわち、ステップS108では、入力種別(「SCAN」)が登録され、3つ目の属性情報と4つ目の属性情報とが登録される。3つ目の属性情報において、キーは「colorMode」であり、値は「FULL_COLOR」である。また、4つ目の属性情報において、キーは「size」であり、値は「A4」である。これは、フルカラーモードによってA4サイズのページの読み取りが実行されたことを示す。
続いて、読取制御部11は、ページ入力結果データを履歴記録部50に出力することにより、ページの読み取りの実行を通知する(S109)。履歴記録部50は、入力されたページ入力結果データの内容に基づいてカウントアップすべきカウンタを判定し、当該カウンタをカウントアップする(S110)。続いて、読取フィルタ21は、ステップS105し、ステップS106において入力種別を登録したページ出力結果データをパイプを介して編集フィルタ25に引き渡す(S111)。
編集フィルタ25は、読取フィルタ21との間におけるパイプに係るメモリ領域に画像データが格納されたことを検知すると、編集フィルタ25に設定された動作条件に基づく当該画像データの加工処理を画像加工部15に実行させる。その結果、加工後の画像データが、編集フィルタ25と印刷フィルタ26との間のパイプに係るメモリのアドレスに格納される。画像データの加工が終了すると、編集フィルタ25は、動作条件に基づく編集ページ結果をページ出力結果データに登録する(S112)。
その結果、ページ出力結果データは、図14において「シーケンス番号」が「S112」の行に示される状態となる。ここで、S112に係る行とS106に係る行との差分が、ステップS112において登録された情報である。すなわち、ステップS112では、1つ目の編集ページ結果と2つ目の編集ページ結果とが登録される。1つ目の編集ページ結果において、キーは「combine」であり、値は「1」である。また、2つ目の編集ページ結果において、キーは「magnification」であり、値は「200」である。これは、集約枚数は1であり(すなわち、集約は行わず)、200%の変倍が行われたことを示す。続いて、編集フィルタ25は、ページ出力結果データをパイプを介して印刷フィルタ26に引き渡す(S113)。
印刷フィルタ26は、編集フィルタ25との間におけるパイプに係るメモリ領域に画像データが格納されたことを検知すると、印刷フィルタ26に設定された動作条件に基づく出力ページ結果をページ出力結果データに登録する(S114)。その結果、ページ出力結果データは、図14において「シーケンス番号」が「S114」の行に示される状態となる。ここで、S114に係る行とS112に係る行との差分が、ステップS114において登録された情報である。すなわち、ステップS114では、1つ目の出力ページ結果と2つ目の出力ページ結果とが登録される。1つ目の出力ページ結果において、キーは「printSide」であり、値は「ONE_SIDE」である。また、2つ目の出力ページ結果において、キーは「trayNumber」であり、値は「1」である。これは、印刷面は片面であり、排紙トレイはトレイ1が用いられることを示す。続いて、印刷フィルタ26は、ページ出力結果データと設定された動作条件とを伴って、画像データの印刷を印刷制御部12に要求する(S115)。
印刷制御部12は、印刷部605を制御し、動作条件に従ったページの印刷を実行する。また、印刷制御部12は、ページの印刷を行った後、動作条件に基づく出力ページ結果をページ出力結果データに登録する(S116)。その結果、ページ出力結果データは、図14において「シーケンス番号」が「S116」の行に示される状態となる。ここで、S116に係る行とS114に係る行との差分が、ステップS116において登録された情報である。すなわち、ステップS116では、3つ目の出力ページ結果と4つ目の出力ページ結果とが登録される。3つ目の出力ページ結果において、キーは「color」であり、値は「FULL_COLOR」である。また、4つ目の出力ページ結果において、キーは「size」であり、値は「A3」である。これは、フルカラーによるA3サイズの印刷であることを示す。ここで、カラーモード(モノクロ印刷であるかカラー印刷であるか)や用紙サイズは、課金に影響を与える可能性のある属性情報であるため、デバイス制御層10に含まれる印刷制御部12によって登録される。
なお、課金に影響を与える可能性のある情報について、フィルタ(ここでは、印刷フィルタ26)においてキーと値とが既に登録されている場合であっても、デバイス制御層10のソフトウェア部品(ここでは、印刷制御部12)は、当該のキーと値とを上書きする。
図15は、デバイス制御層によるページ出力結果データの上書きの様子を示す図である。図15では、印刷フィルタ21によって、カラーモード(color)の値が白黒として登録された後、印刷制御部12によって、カラーモードの値がフルカラー(FULL_COLOR)に上書きされている例が示されている。このように、フィルタがカスタマイズされ、課金に影響を与える情報が誤って登録された場合であっても、カスタマイズ手段が公開されていないデバイス制御層10において、正しい値に上書きされるため、課金カウンタの不正な操作を防止することができる。
続いて、印刷制御部12は、ページ出力結果データを履歴記録部50に出力することにより、ページの印刷の実行を通知する(S117)。履歴記録部50は、入力されたページ出力結果データの内容に基づいてカウントアップすべきカウンタを判定し、当該カウンタをカウントアップする(S118)。
上述したように、第二の実施の形態における複合機1によれば、ページ出力結果データが入力→加工→出力の順で、それぞれを実行するソフトウェア部品に伝達され、当該ページ出力結果データに各ソフトウェア部品によって情報が登録される。また、ページ出力結果データの履歴管理部50への伝達は、各ソフトウェア部品より個別に行われるのではなく、処理の実行順において末端のソフトウェア部品によって行われる。したがって、入力ページ及び出力ページ等の関連付けはページ出力結果データにおいて自動的に保持される。よって、履歴管記録部50において入力ページと出力ページとの関連付け等を判断する必要はない。
なお、上記の説明では、ページ出力結果データにおける入力種別は、フィルタ(読取フィルタ21)によって登録される。したがって、入力種別に応じて課金額が異なる場合、フィルタのカスタマイズにより、入力種別に不正な値が登録される可能性がある。そこで、入力種別に応じて課金額が異なる場合、履歴記録部50は、ページ出力結果データに対応するページ入力結果データに登録されている入力種別に基づいて正しい入力種別を判定するようにすればよい。ページ入力結果データにおける入力種別は、カスタマイズできないデバイス制御層10(読取制御部11)によって登録されるため、信頼できる値だからである。この場合、ページ出力結果データにおいて、入力種別は必ずしも登録される必要はない。なお、履歴記録部50において、ページ入力結果データとページ出力結果データとの対応関係を判定可能とするために、共通の識別情報(ID等)を入力フィルタ(読取フィルタ21)において双方のデータに付与するようにすればよい。当該識別情報の付与は、付与元(入力フィルタ)が同一であるため、特段複雑な処理は必要とされない。
ところで、集約が行われるジョブの場合、ページ出力結果データは次のように処理される。図16は、集約が行われる場合のページ出力結果データの処理を説明するための図である。
図16では、2ページ分を1ページに集約する例が示されている。この場合、読取フィルタ21からは、1ページ目のページ出力結果データ61と、2ページ目のページ出力結果データ62とが編集フィルタ25に引き渡される。
編集フィルタ25は、動作条件として集約が設定されている場合、集約数分のページのページ出力結果データがパイプに蓄積されるまで待機する。集約数分のページのページ出力結果データが蓄積されると、編集フィルタ25は、集約数分のページ出力結果データを一つのページ出力結果データにマージ(統合)し、マージされたページ出力結果データ63に編集ページ結果を登録した上で印刷フィルタ26に引き渡す。ここで行われるマージは、ページ出力結果データを構成する情報のうち、入力フィルタ(読取フィルタ21)において登録される情報のマージである。本実施の形態において、入力フィルタによってページ出力結果データに登録される情報は、入力種別である。したがって、入力種別がマージされる。例えば、各ページが異なる入力先より入力される場合(例えば、スキャンされたページと、複合機1に蓄積されている文書のページとを集約する場合)、ページ出力結果データ61に登録されている入力種別と、ページ出力結果データ62に登録されている入力種別とは異なる。したがって、マージによって複数の入力種別が登録された一つのページ出力結果データ63が生成される。一方、各ページが同じ入力先より入力される場合は、ページ出力結果データ61に登録されている入力種別と、ページ出力結果データ62に登録されている入力種別とは同じである。したがって、マージによって一つの入力種別が登録された一つのページ出力結果データ63が生成される。以降、マージされた一つのページ出力結果データ63は、上述した処理によって履歴管理部50に伝達される。
このように、集約が行われる場合であっても、入力、加工、及び出力に関する情報がページ出力結果データにおいて適切に関連付けられる。
また、入力されたページを異なる出力先に出力するジョブの場合、ページ出力結果データは次のように処理される。図17は、出力先が複数の場合のページ出力結果データの処理を説明するための図である。
図17では、印刷フィルタ26及び文書蓄積フィルタ27の二つの出力フィルタが編集フィルタ25に接続されている。この場合、読取フィルタ21によって読み取られた画像データが編集フィルタ25において加工され、印刷フィルタ26及び文書蓄積フィルタ27に出力される。印刷フィルタ26は、入力された画像データの印刷を実行し、文書蓄積フィルタ27は、入力された画像データの蓄積を実行する。このように、一つの入力ページが、複数の出力先に出力される。
この場合、読取フィルタ21が1ページ目のページ出力結果データ61を編集フィルタ25に引き渡すと、編集フィルタ25は、ページ出力結果データ61に編集ページ結果を登録し、自らに複数のパイプ(印刷フィルタ26との間のパイプと文書蓄積フィルタとの間のパイプ)が接続されていることに基づいて、接続されているパイプの数だけ、ページ出力結果データ61の複製を生成する。続いて、編集フィルタ25は、複製されたページ出力結果データ61を各出力フィルタに引き渡す。以降、複製されたそれぞれのページ出力結果データ61は、上述した処理によって履歴管理部50に伝達される。
このように、出力先が複数である場合であっても、入力、加工、及び出力に関する情報がそれぞれの出力先に対応して複製されたページ出力結果データにおいて適切に関連付けられる。
また、同一のページが複数部印刷されたり、複数の宛先に送信されたりするジョブの場合、ページ出力結果データは次のように処理される。図18は、複数部出力の場合のページ出力結果データの処理を説明するための図である。なお、同図では、便宜上、読取フィルタ21は省略されている。
この場合、編集フィルタ25より1ページ目のページ出力結果データ61が引き渡されると、印刷フィルタ26は、出力結果データ61に出力ページ結果を登録した後、自らの動作条件として複数部印刷が設定されていることに基づいて、部数分だけ出力結果データ61の複製を生成する。続いて、印刷フィルタ26は、ページごとに印刷制御部12に印刷要求を行うたびに、複製されたそれぞれのページ出力結果データ61を印刷制御部12に引き渡す。以降、複製されたそれぞれのページ出力結果データ61は、上述した処理によって履歴管理部50に伝達される。
このように、複数部の出力が行われる場合であっても、入力、加工、及び出力に関する情報が各部に対応して複製されたページ出力結果データにおいて適切に関連付けられる。
次に、履歴記録部50による、ページ入力結果データ及びページ出力結果データに基づく、更新すべきカウンタを判定について説明する。当該判定は、固定的にプログラムロジックとして組み込まれていても良いが、拡張性を考慮すると、「どのような場合にいずれのカウンタをカウントアップするか」といった定義情報を別途定義し、当該定義情報に基づいて履歴管理部50が判定するようにするとよい。本実施の形態では、斯かる定義情報を「カウンタ仕様」という。カウンタ仕様には、ページ入力結果データに対応した「入力カウンタ仕様」と、ページ出力結果データに対応した「出力カウンタ仕様」とに大別され、カウンタごとに定義される。なお、カウンタ仕様は、HDD633等の記憶装置に保存される。
図19は、入力カウンタ仕様の構成例を示す図である。図19では、カラースキャンの数をカウントするカラースキャンカウンタに関する入力カウンタ仕様(カラースキャンカウンタ仕様)が示されている。図示されるように、入力カウンタ仕様は、カウンタID71、入力種別72、及びカウント条件式73等より構成される。カウンタID71は、更新(カウントアップ)対象となるカウンタのIDである。図中では、カウンタID71として「scan_color」が例示されている。入力種別72及びカウント条件式73は、「どのような場合にカウントアップするか」を規定する情報である。入力種別72によって、カウンタIDに係るカウンタがカウントアップされる入力種別が規定される。また、カウント条件式73によって、カウンタIDに係るカウンタがカウントアップされる属性情報の値が規定される。図中では、入力種別72として「SCAN」が指定され、カウント条件式73として「カラーモード(colorMode)キーの値がフルカラー(FULL_COLOR)と一致すること」が指定された例が示されている。なお、カウント条件式73は、複数定義可能である。
すなわち、履歴記録部50は、ページ入力結果データを受け付けると、ページ入力結果データと、各入力カウンタ仕様とを比較照合し、カウントアップすべきカウンタを判定する。したがって、例えば、図13においてシーケンス番号がS108の行に係るページ入力結果データを受け付けた場合、履歴記録部50は、図19に示されるカラースキャンカウンタ仕様に基づいて、カウンタIDが「scan_color」のカウンタをカウントアップする。
また、図20は、出力カウンタ仕様の構成例を示す図である。図20では、カラーコピーの数をカウントするコピー印刷フルカラーカウンタに関する出力カウンタ仕様(コピー印刷フルカラーカウンタ仕様)が示されている。図示されるように、出力カウンタ仕様は、カウンタID81、出力種別82、入力種別83、及びカウント条件式84等より構成される。カウンタID81は、更新(カウントアップ)対象となるカウンタのIDである。図中では、カウンタID81として「print_copy_color」が例示されている。出力種別82、入力種別83、及びカウント条件式84は、「どのような場合にカウントアップするか」を規定する情報である。出力種別82によって、カウンタIDに係るカウンタがカウントアップされる出力種別が規定される。また、入力種別83によって、カウンタIDに係るカウンタがカウントアップされる入力種別が規定される。また、カウント条件式84によって、カウンタIDに係るカウンタがカウントアップされる編集ページ結果又は出力ページ結果の値が規定される。図中では、出力種別82として「PRINT」が指定され、入力種別83として「SCAN」が指定され、カウント条件式84として「カラーモード(color)キーの値がフルカラー(FULL_COLOR)と一致すること」が指定された例が示されている。なお、カウント条件式84は、複数定義可能である。
すなわち、履歴記録部50は、ページ出力結果データを受け付けると、ページ出力結果データと、予め定義されている各出力カウンタ仕様とを比較し、カウントアップすべきカウンタを判定する。したがって、例えば、図14においてシーケンス番号がS116の行に係るページ出力結果データを受け付けた場合、履歴記録部50は、図20に示されるコピー印刷フルカラーカウンタ仕様に基づいて、カウンタIDが「print_copy_color」のカウンタをカウントアップする。
ところで、カウンタは、基本的に事象の発生回数をカウントするものであるため、1回の事象の発生に応じてその値は1増加するのが通常である。しかし、例えば、用紙サイズが大きいページが印刷されたときに課金額を通常のページの倍にしたい場合等、ダブルカウント(2を増加)したい場合もある。斯かる場合、カウンタ仕様は次のように定義すればよい。
図21は、ダブルカウントを行う場合のカウンタ仕様の定義例を示す図である。図21中、図20と同一部分には同一符号を付し、その説明は省略する。
図21に示されるように、ダブルカウントが必要な場合は、更に、ダブルカウント条件式85が定義される。この場合、履歴記録部50は、入力種別82、出力種別83、カウント条件式84、及びダブルカウント条件式85の全てが満たされる場合に、カウンタをダブルカウントする。一方、ダブルカウント条件式85のみが満たされない場合、履歴記録部50は、カウンタを1だけ増加させる。
また、印字したドット数をカウントする場合等、1回の事象(1ページの処理)ごとに増加量(カウント数)が変化するカウンタ(以下、「カバレッジカウンタ」という。)を実装したい場合がある。この場合、カウンタ仕様は次のように定義すればよい。
図22は、カバレッジカウンタに対するカウンタ仕様の定義例を示す図である。図22中、図20と同一部分には同一符号を付し、その説明は省略する。
図22に示されるように、カバレッジカウンタについては、更に、カウント数86が定義される。カウント数86には、ページ出力結果データにおいて、カウント数が登録されたkeyの値が指定される。例えば、図22の例では、カウント数86において指定されているkeyの値は、「count」である。したがって、この場合、履歴記録部50は、ページ出力結果データにおける「count」キーに対応する値を取得し、取得された値だけカウンタを増加させる。すなわち、この場合、ページ出力結果データに情報を登録する側において、処理結果等に応じて、「count」キーとその値とをページ出力結果データに登録しておく。
なお、図21及び図22では、出力カウンタ仕様を例として説明しているが、入力カウンタ仕様についても、同様にダブルカウント条件式やカウント数を付加してもよい。
また、本実施の形態では、読取フィルタ21、編集フィルタ25、及び印刷フィルタ26によってジョブが実行される場合のカウンタの更新処理について説明したが、他のフィルタによってジョブが実行される場合もページ入力結果データ及びページ出力結果データの扱いについては、本実施の形態にいて説明した処理手順に従えばよい。すなわち、入力フィルタは、読取フィルタ21と同様の処理を行い、加工フィルタは、編集フィルタ25と同様の処理を行い、出力フィルタは印刷フィルタ26と同様の処理を行えばよい。また、入力フィルタより利用されるデバイス制御層10は、読取制御部11と同様の処理を行い、出力フィルタより利用されるデバイス制御層10は、印刷制御部12と同様の処理を行えばよい。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。