以下、本発明について図面を参照して説明する。なお、本発明は以下の記述に限定されるものではなく、本発明の要旨を逸脱しない範囲において適宜変更可能である。
[第1の実施形態]
図1は本発明の第1の実施形態にかかる画像形成システムの構成を説明するためのブロック図である。画像形成システムは、ユーザの操作によりドキュメントを作成し、当該ドキュメントに基づく印刷ジョブを生成する画像処理装置としてのホストPC100と、例えば電子写真方式等による画像形成が可能な画像形成装置としてのプリンタ200とを備え、このホストPC100とプリンタ200はネットワーク900を介して接続されている。まず、ホストPC100について説明し、次いでプリンタ200について説明する。
まず、ホストPC100の構成について説明する。ホストPC100は、ユーザがホストPC100を制御するためのユーザインタフェース101と、ユーザインタフェース101への入力を受けてプリンタドライバ103を制御する印刷ジョブ受付部としての流用印刷ユーティリティ102と、ユーザにより作成されたドキュメントをジョブデータに変換するジョブデータ作成部としてのプリンタドライバ103と、ジョブデータから差分ジョブデータを作成する差分ジョブデータ作成部としての差分検出部104と、印刷ジョブデータ又は差分印刷ジョブデータをプリンタ200への送信を制御するジョブデータ送信部としての送信制御部105と、送信制御部105の指示に基づいてネットワーク900を介してプリンタ200に送信する通信部106と、PC100の制御の際に実行される制御プログラム等を記憶する記憶部107と、基本ジョブデータ又は差分ジョブデータ等を記憶する印刷データ記憶部107Aとを備える。
ユーザインタフェース101は、例えば図示せぬマウス,キーボード,モニタ等を有し、ユーザがホストPC100を制御するための入出力デバイスである。ユーザインタフェース101を介してユーザにより作成されたドキュメントは記憶部107に記憶される。
流用印刷ユーティリティ102は、ユーザにより起動されると、図2に示すようなGUI(Graphic User Interface)300をユーザインタフェース101の図示せぬモニタに表示させる。図2に示すGUI300は、印刷ジョブの基本としての基本ジョブであるベースJOBの入力を受付けるベースJOBテキストボックス300Aと、ベースJOBを基本として印刷が実行される他の印刷ジョブとしての流用JOBの入力を受付ける流用JOBテキストボックス300Bと、印刷実行の実行指示を受付ける印刷開始ボタン300Cとを備える。図2のGUI300には、ベースJOBとしてaaa.doc、流用JOBとしてbbb.doc,ccc.doc,ddd.docが入力されている様子が示されている。本実施形態においては、これらの印刷ジョブの入力は手入力としているが、例えばユーザが作業したドキュメントの履歴をポップアップメニュー等で表示させ、表示されたドキュメントから印刷ジョブを選択する形態としてもよい。また、流用ユーティリティ102は、GUI300を介して受付けたベースJOB及び流用JOBを印刷ジョブデータに変換するようプリンタドライバ103に指示を供給する。
プリンタドライバ103は、流用印刷ユーティリティ102からの指示の供給を受け、例えば、図3に示す、aaa.doc301A,bbb.doc301B,ccc.doc301C,ddd.doc301Dのそれぞれ5ページからなる文書ドキュメントをプリンタ200が解釈可能な記述言語であるジョブデータに変換する。なお、図3に示す5ページからなる文書ドキュメントは、ページ2,3,5には差異はなく、ページ1の社名,ページ4の担当者のみが異なっている。図4は、プリンタドライバ103がユーザによりベースJOBとして指定されたaaa.docをプリンタ200が解釈可能なジョブデータに変換した際のイメージ図である。プリンタドライバ103はドキュメントをジョブデータに変換した後、ジョブデータを印刷データ記憶部107Aに記憶させる。また、プリンタドライバ103は、ジョブデータへの変換対象の印刷ジョブがベースJOBであった場合には、ドキュメントをジョブデータに変換後、即座にジョブデータをプリンタ200に送信するよう送信制御部105に指示を供給する。一方、プリンタドライバ103は、ジョブデータへの変換対象の印刷ジョブが流用JOBであった場合には、ドキュメントをジョブデータに変換後、差分検出部104に対してベースJOBのジョブデータと流用JOBのジョブデータとの差分を検出するよう指示を供給する。また、プリンタドライバ103は、差分検出部104による差分ジョブデータの生成後、当該差分ジョブデータをプリンタ200に送信するよう送信制御部200に指示を供給する。
差分検出部104は、プリンタドライバ103からベースJOBのジョブデータと流用JOBのジョブデータとの差分の検出指示が供給されると、対応するベースJOBのジョブデータと流用JOBのジョブデータとを印刷データ記憶部107Aから検索し、両ジョブデータを比較することで、図5に示すような差分ジョブデータを作成する。図5に示されている差分ジョブデータは、aaa.doc301AをベースJOB、bbb.doc301Bを流用JOBとした場合の、bbb.doc301Bのジョブデータのaaa.doc301Aのジョブデータに対する差分ジョブデータである。また、差分検出部104は、作成した差分ジョブデータを再度印刷データ記憶部107Aに記憶させる。
送信制御部105は、プリンタドライバ103からのジョブデータの送信指示に基づき、プリンタドライバ103に指定されたベースJOBのジョブデータ又は流用JOBのジョブデータにユーザ名を付与し、通信部106に対してプリンタ200にジョブデータを送信するよう指示を供給する。なお、ここでのユーザ名とは、例えばホストPC100のネットワークID等のジョブデータの送信元を識別するための識別情報である。
通信部106は、送信制御部105によるジョブデータの送信指示に基づき、ジョブデータをネットワーク900を介してプリンタ200に送信する。
上述した機能を備えた流用印刷ユーティリティ102,プリンタドライバ103,差分検出部104,送信制御部105,通信部106は、ホストPC100の図示せぬオペレーティングシステム上で動作するアプリケーションプログラムである。これらのアプリケーションプログラムは、例えば、UV−EPROM(Ultra-Violet Erasable Programmable Read Only Memory)、又はEEPROM(Electronically Erasable and Programmable Read Only Memory)等の不揮発性メモリに格納され、実行指令に基づき図示せぬCPU(Central Processing Unit)が記憶部107から読み出し、処理を実行することでその機能が発揮される。
記憶部107は、例えば、HDD(Hard Disk Drive)やフラッシュメモリ、或いはRAM(Random Access Memory)等を備えた記憶領域である。記憶部107は、さらにベースJOBのジョブデータや流用JOBのジョブデータ等が記憶される印刷データ記憶部107Aを備える。印刷データ記憶部107Aに記憶されるジョブデータは、図6に示すように、ID,JOBナンバー,データタイプに関連付けられて記憶される。IDは、流用印刷ユーティリティ102を介してユーザにより印刷実行の実行指示が入力された際に取得される任意な固有の値である。このIDは、流用印刷ユーティリティ102の1回の動作で印刷に供される複数のジョブ(1つのベースJOB及び複数の流用JOB)で共通である。JOBナンバーは、同一ID内では固有の値である。流用JOBの最後に処理されるジョブでは必ず9999のナンバーがセットされ、その他のジョブでは、0000から処理される順にインクリメントされる値がセットされる。データタイプは、ジョブデータがベースJOBのジョブデータの場合には、「ベースJOB」がセットされる。また、同様に流用JOBのジョブデータの場合には、「流用JOB」がセットされ、差分ジョブデータの場合には、「差分データ」がセットされる。
以下、ID,JOBナンバー,データタイプに関連付けられたジョブデータがベースJOBのジョブデータの場合は印刷データ、データタイプに関連付けられたジョブデータが流用JOBのジョブデータの場合は流用データ、差分検出部104により作成された流用JOBの差分ジョブデータの場合は差分データと称する。また、印刷データ又は差分データのヘッダにユーザ名が付されたものを、単にデータと称する。
次に、プリンタ200の構成について説明する。プリンタ200は、図1に示すように、ホストPC100から送信されたデータを受信する受信部201と、受信部201から供給されたデータを記憶部206に記憶させると共に、印刷制御部204に印刷実行の指示を供給する受信解析部202と、受信した差分データから流用JOBのジョブデータを復元する差分合成部203と、受信解析部202の指示に基づき、ベースJOBのジョブデータ又は流用JOBのジョブデータをラスタデータに変換し、印刷部205に印刷実行の実行指示を供給する印刷制御部204と、印刷制御部204の指示に基づき、記録媒体に画像を形成する印刷部205と、印刷データ又は差分データ等を記憶する記憶部206とを備える。
受信部201は、ネットワーク900を介してホストPC100から送信されたデータを受信し、受信したデータを受信解析部202に供給する。前述したように、受信部201が受信するデータは、ホストPC100の送信制御部105により印刷データ又は差分データのヘッダにユーザ名が付されたものであり、ユーザ名304A,ID304B,JOBナンバー304C,データタイプ304D,印刷ジョブデータ304Eから構成される。ここでのユーザ名は、例えば「taro]とする(図7)。
受信解析部202は、通信部201からデータの供給を受けると、記憶部206に記憶させると共に、印刷部205に印刷実行の指示を供給する。ここで、通信部201から供給を受けたデータタイプがベースJOBである場合には、受信解析部202は、印刷部205に対して印刷実行の指示を供給する。一方、通信部201から供給を受けたデータタイプが差分データである場合には、受信解析部202は、差分合成部203に対して流用JOBのジョブデータを復元するよう指示を供給する。また、受信解析部202は、差分合成部203による流用JOBのジョブデータの復元後、当該ジョブデータを印刷するよう印刷部205に対して印刷実行の指示を供給する。
差分合成部203は、受信解析部202より流用JOBのジョブデータの復元指示が供給されると、対応する印刷データと差分データを記憶部206から検索し、合成することで流用JOBのジョブデータを復元し、記憶部206に再度記憶させる。
印刷制御部204は、受信制御部202からの印刷指示に基づき、受信制御部202により指定されたベースJOBのジョブデータ又は差分合成部203により復元された流用JOBのジョブデータを記録部206から読み取り、画像修理してラスタデータに変換する。さらに、印刷制御部204は、ベースJOBのジョブデータに対応するラスタデータ又は流用JOBのジョブデータに対応するラスタデータを印刷するよう印刷部205に対して指示を供給する。
上述した機能を備えた通信部201,受信制御部202,差分合成部203,印刷制御部204は、プリンタ200が備えるアプリケーションプログラムである。これらのアプリケーションプログラムは、例えば、UV−EPROM(Ultra-Violet Erasable Programmable Read Only Memory)、又はEEPROM(Electronically Erasable and Programmable Read Only Memory)等の不揮発性メモリ不揮発性メモリに格納され、実行指令に基づき図示せぬCPU(Central Processing Unit)が記憶部206から読み出し、処理を実行することでその機能が発揮される。
印刷部205は、例えば電子写真方式による画像形成が可能な印刷エンジンであり、印刷制御部204の指示に基づき記録媒体に画像を形成する。
記憶部206は、例えば、HDD(Hard Disk Drive)やフラッシュメモリ、或いはRAM(Random Access Memory)等を備えた記憶領域である。記憶部206は、図8に示すようにユーザ名毎に印刷データ又は差分デー等タを記憶する。
このような構成を備えた画像形成システムの動作について、以下に説明する。まず、流用印刷ユーティリティ102が実行する処理について図9を用いて説明する。図9は、流用印刷ユーティリティ102の処理動作を説明するフローチャートである。
まず、図示せぬマウス等のユーザインタフェース101を介したユーザによる起動指示に基づき、流用印刷ユーティリティ102が起動する(ステップS101)。起動した流用印刷ユーティリティ102は、図2に示すGUI300を図示せぬモニタに表示する。流用印刷ユーティリティ102は、ベースJOBテキストボックス300A及び流用JOBテキストボックス300Bへの入力が完了し、ユーザによる印刷開始ボタン300Cの押下があるまで待機する(ステップS102)。なお、図2に示すように、ここではベースJOBテキストボックス300AにベースJOBとして、aaa.doc301Aが入力され、流用JOBテキストボックス300Bに流用JOBとして、bbb.doc301B,ccc.doc301C,ddd.doc301Dがユーザにより入力されたものとする。
ユーザによる入力が完了し、印刷開始ボタンが押下されると(ステップS102 Yes)、流用印刷ユーティリティ102は、ベースJOB及び流用JOBに対して固有なIDを取得する。なお、ここでは0000から0455までのIDが以前に使用されており、流用印刷ユーティリティ102は、IDとして0456を取得したものとする。また、流用印刷ユーティリティ102は、aaa.doc301AがベースJOBである旨を示すベースJOBフラグをセットする(ステップS103)。
次に、流用印刷ユーティリティ102は、プリンタドライバ103に対してID=0456を通知すると共にaaa.doc301Aを処理するよう指示を供給する(ステップS104)。このプリンタドライバ103による処理については後ほど説明する。
次に、流用印刷ユーティリティ102は、流用JOBテキストボックス300Bに入力された未処理の流用JOBの数を算出する。この時点における未処理の流用JOBは、bbb.doc301B,ccc.doc301C,ddd.doc301Dの3つであるため(ステップS105 No)、流用印刷ユーティリティ102は、プリンタドライバ103に対してID=0456を通知すると共にbbb.doc301Bを処理するよう指示を供給する(ステップS104)。このプリンタドライバ103による処理については後ほど説明する。また、流用印刷ユーティリティ102は、ccc.doc301Cについても同様に処理する。
ccc.doc301Cの処理が終了後、ステップS105において、流用印刷ユーティリティ102は、残る未処理の流用JOBがddd.doc301Dのみであると判断すると(ステップS105 Yes)、最後の未処理流用JOBである旨を示す最終フラグをセットする。流用印刷ユーティリティ102は、プリンタドライバ103に対してID=0456を通知すると共にddd.doc301Dを処理するよう指示を供給し(ステップS106)、処理を終了する。
次に、流用印刷ユーティリティ102の指示に基づき処理を実行するプリンタドライバ103の処理動作及び送信されたデータを受信したプリンタ200が実行する処理動作を図10及び図11を用いて説明する。図10は、流用印刷ユーティリティ102の指示の供給を受けて主にプリンタドライバ103が実行する処理を説明するフローチャートであり、図11は、送信されたデータを受信したプリンタ200が実行する処理を説明するフローチャートである。
流用印刷ユーティリティ102の指示の供給を受けて、プリンタドライバ103は、1)aaa.doc301A(ベースJOB)にかかる処理,2)bbb.doc301B及びccc.doc301C(流用JOB)にかかる処理,3)ddd.doc301D(最終流用JOB)にかかる処理を順に実行する。まず、1)aaa.doc301A(ベースJOB)にかかる処理について説明する。
ベースJOBとして、aaa.doc301Aの処理の実行指示の供給を受けたプリンタドライバ103は、記憶部107に記憶されているaaa.doc301Aを読み取り、図4に示すジョブデータを作成する(ステップS202)。
次に、プリンタドライバ103は、最後の未処理流用JOBである旨を示す最終フラグがセットされているか否かを確認する(ステップS203)。aaa.doc301Aには、最終フラグがセットされていないので(ステップS203 No)、プリンタドライバ103は、固有のJOBナンバーを取得する。ここでは、JOBナンバーとして0000がセットされたものとする(ステップS205)。
次に、プリンタドライバ103は、ベースJOBである旨を示すベースJOBフラグがセットされているか否かを確認する(ステップS206)。aaa.doc301Aには、ベースJOBフラグがセットされているので(ステップS206 Yes)、プリンタドライバ103は、ジョブデータにID,JOBナンバー,データタイプを関連付け、記憶部107内の印刷データ記憶部107Aに印刷データとして記憶させる(図12)。
次に、プリンタドライバ103は、送信制御部105に対して印刷データを送信するよう指示を供給する。印刷データの送信指示の供給を受けた送信制御部105は、印刷データ記憶部107Aからプリンタ200に送信する印刷データを読み取り、そのヘッダにユーザ名として「taro」を追加する(図13)。そして、送信制御部105はデータを通信部106に供給する。データの供給を受けた通信部106は、データをネットワーク900を介してプリンタ200に送信し(ステップS207)、処理を終了する。
ホストPC100から送信されたデータを通信部201を介して受信した受信制御部202は(ステップS301 Yes)、図14に示すように、受信したデータを記憶部206に記憶させる。さらに、受信制御部202は、受信データのデータタイプの解析を行う(ステップS302)。ここでは、受信したデータは印刷データ、すなわちデータタイプ=ベースJOBであるので(S303 Yes)、受信制御部202は印刷制御部204に対して印刷を実行するよう指示を供給する。
印刷実行の指示の供給を受けた印刷制御部204は、記憶部206に記憶されている印刷データを読み取り、ジョブデータをラスタデータに変換後、印刷部206に供給する。ラスタデータの供給を受けた印刷部205は記録媒体に画像を形成する。
続いて、2)bbb.doc301B及びccc.doc301C(流用JOB)にかかる処理について説明する。2)bbb.doc301B及びccc.doc301Cは同一の処理であるため、ここではbbb.doc301Bにかかる処理について説明する。なお、ステップS202,ステップS203,ステップS205における処理は、1)aaa.doc301Aと同一の処理のため、ここでは説明を省略する。
ステップS206において、プリンタドライバ103は、ベースJOBである旨を示すベースJOBフラグがセットされているか否かを確認する。ここでは、ベースJOBフラグはセットされていないため(ステップS206 No)、プリンタドライバ103は、差分検出部104に対して差分ジョブデータを作成するよう指示を供給すると共に、図15に示すように流用データを印刷データ記憶部107Aに記憶させる。
差分ジョブデータの作成指示の供給を受けた差分検出部104は、印刷データ記憶部107Aに記憶されている印刷データ及び流用データを読み出し、両データを比較して差分ジョブデータを作成する(ステップS208)。作成された差分ジョブデータは、図6に示すように、ID,JOBナンバー,データタイプに関連付けられて差分データとして印刷データ記憶部107Aに記憶される。差分検出部104による差分ジョブデータの作成は後述する。
次に、プリンタドライバ103は、送信制御部105に対して差分データを送信するよう指示を供給する。差分データの送信指示の供給を受けた送信制御部105は、印刷データ記憶部107Aからプリンタ200に送信する差分データを読み取り、そのヘッダにユーザ名として「taro」を追加する(図7)。そして、送信制御部105はデータを通信部106に供給する。データの供給を受けた通信部106は、データをネットワーク900を介してプリンタ200に送信する。また、プリンタドライバ103は、印刷データ記憶部107Aに記憶されている差分データを削除し、印刷データ記憶部107Aは図12に示す状態に戻る(ステップS209)。
次に、プリンタドライバ103は、最後の未処理流用JOBである旨を示す最終フラグがセットされているか否かを確認する(ステップS210)。ここでは、最終フラグはセットされていないので(ステップS210 No)、プリンタドライバ103は処理を終了する。
ホストPC100から送信されたデータを通信部201を介して受信した受信制御部202は(ステップS301 Yes)、図16に示すように、受信したデータを記憶部206に記憶させる。さらに、受信制御部202は、受信データのデータタイプの解析を行う(ステップS302)。ここでは、受信したデータは差分データ、すなわちデータタイプ=差分データであるので(S303 No)、受信制御部202は差分合成部203に流用JOBのジョブデータを復元するよう指示を供給する。流用JOBの復元指示の供給を受けた差分合成部203は、対応する印刷データと差分データを記憶部206から検索し、合成することで流用JOBのジョブデータを復元し、図17に示すように記憶部206に流用データとして再度記憶させる(ステップS305)。差分合成部203による流用JOBのジョブデータの復元は後述する。
次に、受信制御部202は印刷制御部204に対して印刷を実行するよう指示を供給する。印刷実行の指示の供給を受けた印刷制御部204は、記憶部206に記憶されている流用データを読み取り、ジョブデータをラスタデータに変換後、印刷部206に供給する。ラスタデータの供給を受けた印刷部205は記録媒体に画像を形成する。さらに、受信制御部202は、記憶部206に記憶されている流用JOBのジョブデータを削除し(ステップS306)、記憶部206は図14に示す状態となる。
さらに、受信制御部202は、流用JOBに関連付けられていたJOBナンバーが9999であるか否かを確認する(ステップS307)。ここでは、JOBナンバーは9999ではないので(ステップS307 No)、受信制御部202は処理を終了する。
続いて、3)ddd.doc301D(最終流用JOB)にかかる処理について説明する。まず、最終流用JOBとして、ddd.doc301Dの処理の実行指示の供給を受けたプリンタドライバ103は、記憶部107に記憶されているddd.doc301Dを読み取り、ジョブデータを作成する(ステップS202)。
次に、プリンタドライバ103は、最後の未処理流用JOBである旨を示す最終フラグがセットされているか否かを確認する(ステップS203)。ddd.doc301Dには、最終フラグがセットされているので(ステップS203 Yes)、プリンタドライバ103は、JOBナンバーとして9999をセットする(ステップS204)。
次に、プリンタドライバ103は、ベースJOBである旨を示すベースJOBフラグがセットされているか否かを確認する(ステップS206)。ここでは、ベースJOBフラグはセットされていないため(ステップS206 No)、プリンタドライバ103は、差分検出部104に対して差分ジョブデータを作成するよう指示を供給すると共に、図18に示すように流用データを印刷データ記憶部107Aに記憶させる。
差分ジョブデータの作成指示の供給を受けた差分検出部104は、印刷データ記憶部107Aに記憶されている印刷データ及び流用データを読み出し、両データを比較して差分ジョブデータを作成する(ステップS208)。作成された差分ジョブデータは、図19に示すように、ID,JOBナンバー,データタイプに関連付けられて差分データとして印刷データ記憶部107Aに記憶される。差分検出部104による差分ジョブデータの作成は後述する。
次に、プリンタドライバ103は、送信制御部105に対して差分データを送信するよう指示を供給する。差分データの送信指示の供給を受けた送信制御部105は、印刷データ記憶部107Aからプリンタ200に送信する差分データを読み取り、そのヘッダにユーザ名として「taro」を追加する(図20)。そして、送信制御部105はデータを通信部106に供給する。データの供給を受けた通信部106は、データをネットワーク900を介してプリンタ200に送信する。また、プリンタドライバ103は、印刷データ記憶部107Aに記憶されている差分データを削除し、印刷データ記憶部107Aは図12に示す状態に戻る(ステップS209)。
次に、プリンタドライバ103は、最後の未処理流用JOBである旨を示す最終フラグがセットされているか否かを確認する(ステップS210)。ここでは、最終フラグはセットがセットされているので(ステップS210 Yes)、プリンタドライバ103は、印刷データ記憶部107Aに記憶されているベースJOBの印刷データを削除し(ステップS211)、処理を終了する。
ホストPC100から送信されたデータを通信部201を介して受信した受信制御部202は(ステップS301 Yes)、図21に示すように、受信したデータを記憶部206に記憶させる。さらに、受信制御部202は、受信データのデータタイプの解析を行う(ステップS302)。ここでは、受信したデータは差分データ、すなわちデータタイプ=差分データであるので(S303 No)、受信制御部202は差分合成部203に流用JOBのジョブデータを復元するよう指示を供給する。流用JOBの復元指示の供給を受けた差分合成部203は、対応する印刷データと差分データを記憶部206から検索し、合成することで流用JOBのジョブデータを復元し、図22に示すように記憶部206に流用データとして再度記憶させる(ステップS305)。差分合成部203による流用JOBのジョブデータの復元は後述する。
次に、受信制御部202は印刷制御部204に対して印刷を実行するよう指示を供給する。印刷実行の指示の供給を受けた印刷制御部204は、記憶部206に記憶されている流用データを読み取り、ジョブデータをラスタデータに変換後、印刷部206に供給する。ラスタデータの供給を受けた印刷部205は記録媒体に画像を形成する。さらに、受信制御部202は、記憶部206に記憶されている流用JOBのジョブデータを削除し(ステップS306)、記憶部206は図14に示す状態となる。
さらに、受信制御部202は、流用JOBに関連付けられていたJOBナンバーが9999であるか否かを確認する(ステップS307)。ここでは、JOBナンバーは9999であるので(ステップS307 Yes)、受信制御部202はベースJOBの印刷データを削除し(ステップS308)、処理を終了する。
次に、図23を用いて差分検出部104が差分ジョブデータを作成する処理について説明する。ここでは、aaa.doc301AをベースJOBとし、bbb.doc301Bを流用JOBとして、差分ジョブデータを作成する処理について説明する。また、プリンタドライバ103により図4に示すaaa.doc301Aのジョブデータ302、及び図24に示すbbb.doc301Bのジョブデータ305が作成され、それぞれ、印刷データ及び流用データとして記憶部107に記憶されているものとする。
図10のステップS208において、プリンタドライバ103により起動指示の供給を受けると、差分検出部104は記憶部107に記憶されているベースJOBの印刷データ及び流用JOBの流用データを読み取り、ワークメモリに展開する。なお、ワークメモリに展開される印刷データのページデータをbase(n)、流用データのページデータをryu(n)と称し、例えば、印刷データのページ1データはbase(1)と称する。つまり、base(1)〜base(5) がaaa.doc301Aに対する印刷データの各ページデータに相当し、ryu(1)〜ryu(5)がbbb.doc301Bに対する流用データの各ページデータに相当する。また、差分検出部104はページ比較処理を行っているページ番号の変数であるptを1に初期化する。さらに、差分検出部104は空の差分ジョブデータをメモリに確保する。(ステップS401)。
ステップS402において、差分検出部104は、ryu(1)がNULLデータか否かを確認する。ここでは、ryu(1)はNULLデータではないので(ステップS402 No)、差分検出部104は、base(1)とryu(1)とを比較し差異があるか否かを確認する(ステップS403)。具体的には、差分検出部104は、図4に示したジョブデータ302のページ1データ302Aと図24に示したジョブデータ305のページ1データ305Aとを比較する。ここでは、ページ1データ302Aのポイント302AAにおける「A」と、ページ1データ305Aのポイント305AAにおける「B」とが異なる。したがって、base(1)とryu(1)には差異があるので(ステップS403 No)、pt=1と、ryu(1)とを差分ジョブデータに追加する(ステップS404)。
次に、差分検出部104は、pt=2として(ステップS405)、再びステップS402からの処理を実行する。
同様に、差分検出部104は、ryu(2)がNULLデータか否かを確認する。ここでは、ryu(2)はNULLデータではないので(ステップS402 No)、差分検出部104は、base(2)とryu(2)とを比較し差異があるか否かを確認する(ステップS403)。ここでは、差異はないので(ステップS403 Yes)、差分検出部104は、pt=3として(ステップS405)、再びステップS402からの処理を実行する。本実施形態においては、pt=3及び5については、base(n)とryu(n)との差異はないので、差分検出部104はpt=2と同様な処理を実行する。したがって、pt=3及び5にかかる処理の説明は省略する。
pt=4において、差分検出部104は、ryu(4)がNULLデータか否かを確認する。ここでは、ryu(4)はNULLデータではないので(ステップS402 No)、差分検出部104は、base(4)とryu(4)とを比較し差異があるか否かを確認する(ステップS403)。ページ1データと同様に差分検出部104は、図4に示したジョブデータ302のページ4データ302Bと図24に示したジョブデータ305のページ4データ305Bとを比較する。ここでは、ページ4データ302Bのポイント302BBにおける「佐藤」と、ページ4データ305Bのポイント305BBにおける「鈴木」とが異なる。したがって、base(4)とryu(4)には差異があるので(ステップS403 No)、pt=4と、ryu(4)とを差分ジョブデータに追加する(ステップS404)。
最後に、pt=6において、差分検出部104は、ryu(6)がNULLデータか否かを確認する。ここでは、ryu(6)はNULLデータであるので(ステップS402 Yes)、差分検出部104は、図5に示す差分ジョブデータを差分データとして印刷データ記憶部107Aに記憶させ、処理を終了する。
次に、図25を用いて差分合成部203が、流用データを復元する処理について説明する。ここでは、aaa.doc304AをベースJOBとし、bbb.doc301Bを流用JOBとして、流用データを復元する処理について説明する。また、プリンタ200には、ホストPC100より印刷データ及び差分データがデータとして送信され、当該データはそれぞれ記憶部206に記憶されているものとする。
図11のステップS305において、受信解析部202により起動指示の供給を受けると、差分合成部203は記憶部206に記憶されている印刷データ及び差分データを読み取り、ワークメモリに展開する。なお、ワークメモリに展開される印刷データのページデータをbase(n)と称し、例えば、印刷データの1ページ目のページデータはbase(1)と称する。つまり、base(1)〜base(5)がaaa.doc301Aに対する印刷データの各ページデータに相当する。また、差分合成部203は、空の流用ジョブデータをメモリに確保する(ステップS501)。
次に、差分合成部203は、ワークメモリに展開した差分データに、未処理のページ番号(pt)及びページデータ(ryu(n))が存在するか否かを確認する(ステップS502)。ここでは図5に示すように、差分データには、2セットのページ番号及びページデータが存在し、いずれも未処理であるため(ステップS502 No)、差分合成部203は、1セット分のページ番号及びページデータを読み取り、ページ番号とページデータに分離する(ステップ503)。
ステップS504において、差分合成部203は、base(1)のページデータをryu(1)のページデータに置き換え、再びステップS502からの処理を実行する。差分データには、もう1セットの未処理のページ番号及びページデータが残っているので(ステップS502 No)、差分合成部203は、この1セット分のページ番号及びページデータを読み取り、ページ番号とページデータに分離する(ステップ503)。
再度、ステップS504において、差分合成部203は、base(4)のページデータをryu(4)のページデータに置き換え、再びステップS502からの処理を実行する。差分データには、未処理のページ番号及びページデータのセットは残っていないので(ステップS502 Yes)、差分合成部203は、復元したbbb.doc301BのジョブデータをID,JOBナンバー,データタイプに関連付けて流用データとして記憶部206に記憶させ、処理を終了する。
以上のように、第1の実施形態によれば、複数の文書ドキュメントの印刷の際に、1つ目の文書ドキュメント(ベースJOB)の印刷後の2つ目以降の文書ドキュメント(流用JOB)の印刷に関しては、1つ目の文書ドキュメントとの差分データのみをプリンタに送信し、プリンタ側で2つ目以降の文書ドキュメントを復元し印刷するため、ホストPCから送信されるデータ量を最低限に留めることができる。また、プリンタが実際の印刷物を出力するまでに実行する処理が簡略化されるため、ユーザが印刷物を取得するまでの時間を短縮することができる。
[第2の実施形態]
第1の実施形態においては、ページ内容の異なる同一のページ数から構成される複数の文書ドキュメントを印刷することが可能な画像形成システムについて説明したが、本実施形態においては、ページ内容が異なり、かつ、異なるページ数から構成される複数の文書ドキュメントを印刷することが可能な画像形成システムについて説明する。本実施形態において印刷に供される文書ドキュメントは、例えば図26に示すように、aaa.doc301A,bbb2.doc307B,ccc2doc307C,ddd.doc301Dから構成されている。
bbb2.doc307Bのaaa.doc301Aに対する差異は、1)ページ1の宛先が「B」社であり、2)ページ3が追加されており、3)ページ5の担当者名が異なる点である。また、ccc2.doc307Cのaaa.doc301Aに対する差異は、1)ページ1の宛先が「C」社であり、2)aaa.doc301Aのページ2に相当するページが削除されており、3)ページ3の担当者名が異なる点である。ddd.doc301Dのaaa.doc301Aに対する差異は実施形態1と同一である。
このような構成からなる複数の文書ドキュメントを印刷することが可能な画像形成システムについて以下に説明する。
本発明の第2の実施形態にかかる画像形成システムの構成は、第1の実施形態にかかる画像形成システムと略同一であるため、同一な部分に関しては同一の符号を付して説明を省略し、異なる箇所について説明をする。
図27は、第2の実施形態にかかる画像形成システムの構成を説明するブロック図である。画像形成システムは、ユーザの操作によりドキュメントを作成し、当該ドキュメントに基づく印刷ジョブを生成する画像処理装置としてのホストPC300と、例えば電子写真方式等による画像形成が可能な画像形成装置としてのプリンタ400とを備え、このホストPC300とプリンタ400はネットワーク900を介して接続されている。まず、ホストPC300について説明し、次いでプリンタ400について説明する。
まず、ホストPC300について説明する。ホストPC300は、第1の実施形態にかかるホストPC100の差分検出部104に替えて差分検出部304を備える。
差分検出部304は、プリンタドライバ103かららベースJOBのジョブデータと流用JOBのジョブデータとの差分の検出指示が供給されると、対応するベースJOBのジョブデータと流用JOBのジョブデータとを印刷データ記憶部107Aから検索し、両ジョブデータを比較することで、図28に示すような差分ジョブデータ309を作成する。図28に示されている差分ジョブデータ309は、aaa.doc301AをベースJOB、bbb2.doc307Bを流用JOBとした場合の、bbb.doc307Bのジョブデータのaaa.doc301Aのジョブデータに対する差分ジョブデータである。また、差分検出部304は、作成した差分ジョブデータを再度印刷データ記憶部107Aに記憶させる。さらに、差分検出部304は、ホストPC300の図示せぬオペレーティングシステム上で動作するアプリケーションプログラムである。このアプリケーションプログラムは、例えば、UV−EPROM(Ultra-Violet Erasable Programmable Read Only Memory)、又はEEPROM(Electronically Erasable and Programmable Read Only Memory)等の不揮発性メモリに格納され、実行指令に基づき図示せぬCPU(Central Processing Unit)が記憶部107から読み出し、処理を実行することでその機能が発揮される。
次に、プリンタ400の構成について説明する。プリンタ400は、第1の実施形態にかかるプリンタ200の差分合成部203に替えて差分合成部403を備える。
差分合成部403は、受信解析部202より流用JOBのジョブデータの復元指示が供給されると、対応する印刷データと差分データを記憶部206から検索し、合成することで流用JOBのジョブデータを復元し、記憶部206に再度記憶させる。また、差分合成部403は、プリンタ400が備えるアプリケーションプログラムである。これらのアプリケーションプログラムは、例えば、UV−EPROM(Ultra-Violet Erasable Programmable Read Only Memory)、又はEEPROM(Electronically Erasable and Programmable Read Only Memory)等の不揮発性メモリ不揮発性メモリに格納され、実行指令に基づき図示せぬCPU(Central Processing Unit)が記憶部206から読み出し、処理を実行することでその機能が発揮される。
このような構成を備えた画像形成システムの動作について、以下に説明する。なお、図29に示すように流用印刷ユーティリティ102が図示せぬモニタに表示させるGUI306には、ベースJOBとしてaaa.doc301A、流用JOBとしてbbb2.doc307B,ccc2.doc307C,ddd.doc301Dがユーザにより入力されているものとする。
本実施形態にかかる流用印刷ユーティリティ102,プリンタドライバ103,受信制御部202は、第1の実施形態における流用印刷ユーティリティ102,プリンタドライバ103,受信制御部202が実行する処理と同一の処理を実行する。したがって、以下の説明においては、差分検出部304が差分ジョブデータを作成する処理及び差分合成部403が流用データを復元する処理について説明する。まず、差分検出部304が差分ジョブデータを作成する処理について図30、図31を用いて説明する。なお、ここでは、aaa.doc301AをベースJOBとし、bbb2.doc307B及びccc2.doc307Cを流用JOBとして、差分ジョブデータを作成する処理について説明する。また、プリンタドライバ103により図4に示すaaa.doc301Aのジョブデータ302、図32に示すbbb2.doc307Bのジョブデータ308、及び図33に示すccc2.doc307Cのジョブデータ3010が作成され、それぞれ、印刷データ及び流用データとして記憶部107に記憶されているものとする。
まず、bbb2.doc307Bの処理について説明する。図10のステップS208において、プリンタドライバ103により起動指示の供給を受けると、差分検出部304は記憶部107に記憶されているベースJOBの印刷データ及び流用JOBの流用データを読み取り、ワークメモリに展開する。また、差分検出部304は、空の差分ジョブデータをメモリに確保する。さらに、差分検出部304は、変数bpt=1,pt=1,i=0,j=0に初期化する(ステップS601)。ここで、bpt及びptはページ処理を行っているベースJOB及び流用JOBそれぞれのページ番号を示す。また、i,jは、汎用的な変数である。なお、ワークメモリに展開される印刷データのページデータをbase(n)、流用データのページデータをryu(n)と称し、例えば、印刷データのページ1データはbase(1)と称する。つまり、base(1)〜base(5) がaaa.doc301Aに対する印刷データの各ページデータに相当し、ryu(1)〜ryu(6)がbbb2.doc307Bに対する流用データの各ページデータに相当する。
ステップS602において、差分検出部304は、base(1)がNULLデータか否かを確認する。ここでは、base(1)はNULLではないので(ステップS602 Yes)、差分検出部304は、ryu(1)がNULLデータか否かを確認する(ステップS603)。ここでは、ryu(1)はNULLではないので(ステップS603 Yes)、差分検出部304は、base(1)とryu(1)とを比較し差異があるか否かを確認する(ステップS605)。具体的には、差分検出部104は、図4に示したジョブデータ302のページ1データ302Aと図31に示したジョブデータ308のページデータ308Aとを比較する。ここでは、ページデータ302Aのポイント302AAにおける「A」と、ページデータ308Aのポイント308AAにおける「B」とが異なる。したがって、base(1)とryu(1)には差異がある(ステップS605 No)。さらに、差分検出部304は、bbb2.doc307Bのページ1がaaa.doc301Aに対する追加か否かを確認するため、bbb2.doc307Bのページ2以降とaaa.doc301Aのページ1とを比較する。即ち、差分検出部304は、変数iをインクリメントし(ステップS607)、ryu(2)がNULLデータか否かを確認する(ステップS608)。ここでは、ryu(2)はNULLデータではないので(ステップS608 No)、base(1)とryu(2)とを比較する(ステップS609)。ここでは、base(1)とryu(2)とは一致しないので(ステップS609 No)、差分検出部304は再び、ステップS607からの処理を実行する。
差分検出部304は、同様なステップを繰り返す。つまり、差分検出部304は、変数iをインクリメントしながら、i=2;base(1)とryu(3)との比較、i=3;base(1)とryu(4)との比較、i=4;base(1)とryu(5)との比較、i=5;base(1)とryu(6)との比較を順次実行する。
i=6となった時点において(ステップS607)、ryu(7)は存在せず、NULLデータであるため(ステップS608 Yes)、差分検出部304は、aaa.doc301Aのページ1と同じページはbbb2.doc307Bには存在しないと判断する。これは、ryu(1)に対応するページがaaa.doc301Aに対する追加ページではないこと、及びaaa.doc301Aのページ1がbbb2.doc307Bでは不要であり、削除又は、置換えの対象であることを示している。
続いて、aaa.doc301Aのページ1がbbb2.doc307Bに対する削除対象か否かを確認するため、差分検出部304はaaa.doc301Aのページ2以降のページに対応するbase(2)〜とryu(1)とを比較する。すなわち、差分検出部304は、変数jをインクリメントし(ステップS612)、base(2)がNULLデータか否かを確認する(ステップS613)。ここでは、base(2)はNULLデータではないので(ステップS613 No)、差分検出部304はbase(2)とryu(1)とを比較する(ステップS614)。ここでは、一致しないので(ステップS614 No)、差分検出部304は再び、ステップS612からの処理を実行する。
差分検出部304は、同様なステップを繰り返す。つまり、差分検出部304は、変数jをインクリメントしながら、j=2;base(3)とryu(1)との比較、j=3;base(4)とryu(1)との比較、j=4;base(5)とryu(1)との比較を順次実行する。
j=5となった時点において(ステップS612)、base(6)は存在せず、NULLデータであるため(ステップS613 Yes)、差分検出部304は、bbb2.doc307Bのページ1と同じページはaaa.doc301Aには存在しないと判断する。これは、ryu(1)に対応するページが差分合成時に必要なページであること、及びaaa.doc301Aのページ1が削除対象ではないことを示す。したがって、差分検出部304は、差分合成時において、差分合成部403がryu(1)をbase(1)に置き換えることに結論付ける。差分検出部304は、これを意味するコマンド309Aとして「rewrite1」、及びページデータ308Aで示すryu(1)を差分データに追加する(ステップS617)。また、差分検出部304は、bpt,ptをインクリメントし(ステップ618)、変数i,jを0に初期化して、再びステップS602からの処理を実行する。
ステップS602において、差分検出部304は、base(2)がNULLデータか否かを確認する。ここでは、base(2)はNULLではないので(ステップS602 Yes)、差分検出部304は、ryu(2)がNULLデータか否かを確認する(ステップS603)。ここでは、ryu(2)はNULLではないので(ステップS603 Yes)、差分検出部304は、base(2)とryu(2)とを比較し差異があるか否かを確認する(ステップS605)。ここでは、base(2)とryu(2)は一致するので(ステップS605 Yes)、差分検出部304は、bpt,ptをインクリメントし(ステップ606)、変数i,jを0に初期化して、再びステップS602からの処理を実行する。
ステップS602において、差分検出部304は、base(3)がNULLデータか否かを確認する。ここでは、base(3)はNULLではないので(ステップS602 Yes)、差分検出部304は、ryu(3)がNULLデータか否かを確認する(ステップS603)。ここでは、ryu(3)はNULLではないので(ステップS603 Yes)、差分検出部304は、base(3)とryu(3)とを比較し差異があるか否かを確認する(ステップS605)。ここでは、base(3)とryu(3)には差異があり、一致しないので(ステップS605 No)、差分検出部304は、bbb2.doc307Bのページ3がaaa.doc301Aに対する追加か否かを確認するため、bbb2.doc307Bのページ4以降とaaa.doc301Aのページ3とを比較する。即ち、差分検出部304は、変数iをインクリメントし(ステップS607)、ryu(4)がNULLデータか否かを確認する(ステップS608)。ここでは、ryu(4)はNULLデータではないので(ステップS608 No)、base(3)とryu(4)とを比較する(ステップS609)。ここでは、base(3)とryu(4)とは一致するので(ステップS609 Yes)、差分検出部304はbbb2.doc307Bのページ3がaaa.doc301Aのページ3、すなわちbbb2.doc307Bのページ4の前に挿入されるページデータであると判断する。したがって、差分検出部304は、base(2)の後にryu(3)が挿入されることを意味するコマンド309Cとして「insert2」、及びページデータ308Cで示すryu(3)を差分データに追加する(ステップS610)。また、差分検出部304は、bpt,ptをインクリメントし(ステップ611)、変数i,jを0に初期化して、再びステップS602からの処理を実行する。
以降、ここまでの同様のステップで、差分検出部304は差分データにコマンド309E「rewrite4」とページデータ308Bで示すryu(5)を差分データに追加する。最終的には、図28に示される差分データ309が作成される。
bpt=6,pt=7となった時点で、base(6)はNULLデータであり(ステップS602 No)、ryu(7)もNULLデータであるため(ステップS604 No)、差分検出部304は差分データを印刷データ記憶部107Aに記憶させ、処理を終了する。
次に、図34を用いて差分合成部403が、流用データを復元する処理について説明する。ここでは、aaa.doc304AをベースJOBとし、bbb2.doc307Bを流用JOBとして、流用データを復元する処理について説明する。また、プリンタ400には、ホストPC100より印刷データ及び差分データがデータとして送信され、当該データはそれぞれ記憶部206に記憶されているものとする。
図11のステップS305において、受信解析部202により起動指示の供給を受けると、差分合成部403は記憶部206に記憶されている印刷データ及び差分データを読み取り、ワークメモリに展開する。なお、ワークメモリに展開される印刷データのページデータをbase(n)と称し、例えば、印刷データのページ1データはbase(1)と称する。つまり、base(1)〜base(5) がaaa.doc301Aに対する印刷データの各ページデータに相当する。また、差分合成部203は、空の流用ジョブデータをメモリに確保する(ステップS701)。
次に、差分合成部403は、ワークメモリに展開した差分データに、未処理のコマンド、ページ番号、及びページデータが存在するか否かを確認する(ステップS702)。ここでは図28に示すように、差分データには、コマンド309Aとページデータ309B,コマンド309Cとページデータ309D,コマンド309Eとページデータ309Fの3セットが存在し、いずれも未処理であるため(ステップS702 No)、差分合成部403は、1セット分のコマンド、ページ番号、及びページデータを読み取る。すなわち、コマンド309Aからcommand=”rewrite”,bpt=1,ページデータ309B(=308A)を得る(ステップS703)。
次に、ステップS704において、差分合成部403は、コマンドがrewriteか否かを判断する。ここでは、コマンドはrewriteなので(ステップS704 Yes)、差分合成部403は、base(1)をページデータ308Bで置換え(ステップS705)、再びステップS702からの処理を実行する。
同様に、差分合成部403は、ワークメモリに展開した差分データに、未処理のコマンド、ページ番号、及びページデータが存在するか否かを確認する(ステップS702)。ここでは、差分データには、コマンド309Cとページデータ309D,コマンド309Eとページデータ309Fの2セットが存在し、いずれも未処理であるため(ステップS702 No)、差分合成部203は、1セット分のコマンド、ページ番号、及びページデータを読み取る。即ち、コマンド309Cからcommand=”insert”,bpt=2,ページデータ309D(=308C)を得る(ステップS703)。
次に、ステップS704において、差分合成部403は、コマンドがrewriteか否かを判断する。ここでは、コマンドはrewriteではないので(ステップS704 No)、差分合成部403は、コマンドがinsertか否かを判断する(ステップS706)。ここでは、コマンドはinsertなので(ステップS705 Yes)、差分合成部403は、base(2)の後にページデータ309Dを追加し(ステップS707)、再びステップS702からの処理を実行する。
同様に、差分合成部403は、ワークメモリに展開した差分データに、未処理のコマンド、ページ番号、及びページデータが存在するか否かを確認する(ステップS702)。ここでは、差分データには、コマンド309Eとページデータ309Fの1セットが存在し、いずれも未処理であるため(ステップS702 No)、差分合成部203は、1セット分のコマンド、ページ番号、及びページデータを読み取る。即ち、コマンド309Cからcommand=”rewrite”,bpt=4,ページデータ309F(=308B)を得る(ステップS703)。
次に、ステップS704において、差分合成部403は、コマンドがrewriteか否かを判断する。ここでは、コマンドはrewriteなので(ステップS704 Yes)、差分合成部403は、base(4)をページデータ308Fで置換え(ステップS705)、再びステップS702からの処理を実行する。
ワークメモリに展開した差分データに、未処理のコマンド、ページ番号、及びページデータが存在しないので(ステップS702 Yes)差分合成部403は、ページデータ順にページ番号を振りなおし(ステップS710)、流用データとして記憶部206に記憶させ、処理を終了する。
次に、ccc2.doc307Cの処理について説明する。図10のステップS208において、プリンタドライバ103により起動指示の供給を受けると、差分検出部304は記憶部107に記憶されているベースJOBの印刷データ及び流用JOBの流用データを読み取り、ワークメモリに展開する。また、差分検出部304は、空の差分ジョブデータをメモリに確保する。さらに、差分検出部304は、変数bpt=1,pt=1,i=0,j=0に初期化する(ステップS601)。ここで、bpt及びptはページ処理を行っているベースJOB及び流用JOBそれぞれのページ番号を示す。また、i,jは、汎用的な変数である。なお、ワークメモリに展開される印刷データのページデータをbase(n)、流用データのページデータをryu(n)と称し、例えば、印刷データのページ1データはbase(1)と称する。つまり、base(1)〜base(5) がaaa.doc301Aに対する印刷データの各ページデータに相当し、ryu(1)〜ryu(4)がccc2.doc307Cに対する流用データの各ページデータに相当する。
ステップS602において、差分検出部304は、base(1)がNULLデータか否かを確認する。ここでは、base(1)はNULLではないので(ステップS602 Yes)、差分検出部304は、ryu(1)がNULLデータか否かを確認する(ステップS603)。ここでは、ryu(1)はNULLではないので(ステップS603 Yes)、差分検出部304は、base(1)とryu(1)とを比較し差異があるか否かを確認する(ステップS605)。具体的には、差分検出部104は、図4に示したジョブデータ302のページ1データ302Aと図32に示したジョブデータ3010のページデータ310Aとを比較する。ここでは、ページデータ302Aのポイント302AAにおける「A」と、ページデータ310Aのポイント310AAにおける「C」とが異なる。したがって、base(1)とryu(1)には差異がある(ステップS605 No)。さらに、差分検出部304は、ccc2.doc307Cのページ1がaaa.doc301Aに対する追加か否かを確認するため、ccc2.doc307Cのページ2以降とaaa.doc301Aのページ1とを比較する。即ち、差分検出部304は、変数iをインクリメントし(ステップS607)、ryu(2)がNULLデータか否かを確認する(ステップS608)。ここでは、ryu(2)はNULLデータではないので(ステップS608 No)、base(1)とryu(2)とを比較する(ステップS609)。ここでは、base(1)とryu(2)とは一致しないので(ステップS609 No)、差分検出部304は再び、ステップS607からの処理を実行する。
差分検出部304は、同様なステップを繰り返す。つまり、差分検出部304は、変数iをインクリメントしながら、i=2;base(1)とryu(3)との比較、i=3;base(1)とryu(4)との比較、i=4;base(1)とryu(5)との比較、i=5;base(1)とryu(6)との比較を順次実行する。
i=6となった時点において(ステップS607)、ryu(7)は存在せず、NULLデータであるため(ステップS608 Yes)、差分検出部304は、aaa.doc301Aのページ1と同じページはccc2.doc307Cには存在しないと判断する。これは、ryu(1)に対応するページがaaa.doc301Aに対する追加ページではないこと、及びaaa.doc301Aのページ1がccc2.doc307Cでは不要であり、削除又は、置換えの対象であることを示している。
続いて、aaa.doc301Aのページ1がccc2.doc307Cに対する削除対象か否かを確認するため、差分検出部304はaaa.doc301Aのページ2以降のページに対応するbase(2)〜とryu(1)とを比較する。すなわち、差分検出部304は、変数jをインクリメントし(ステップS612)、base(2)がNULLデータか否かを確認する(ステップS613)。ここでは、base(2)はNULLデータではないので(ステップS613 No)、差分検出部304はbase(2)とryu(1)とを比較する(ステップS614)。ここでは、一致しないので(ステップS614 No)、差分検出部304は再び、ステップS612からの処理を実行する。
差分検出部304は、同様なステップを繰り返す。つまり、差分検出部304は、変数jをインクリメントしながら、j=2;base(3)とryu(1)との比較、j=3;base(4)とryu(1)との比較、j=4;base(5)とryu(1)との比較を順次実行する。
j=5となった時点において(ステップS612)、base(6)は存在せず、NULLデータであるため(ステップS613 Yes)、差分検出部304は、ccc2.doc307Cのページ1と同じページはaaa.doc301Aには存在しないと判断する。これは、ryu(1)に対応するページが差分合成時に必要なページであること、及びaaa.doc301Aのページ1が削除対象ではないことを示す。したがって、差分検出部304は、差分合成時において、差分合成部403がryu(1)をbase(1)に置き換えることに結論付ける。差分検出部304は、これを意味するコマンド311Aとして「rewrite1」、及びページデータ310Aで示すryu(1)を差分データに追加する(ステップS617)。また、差分検出部304は、bpt,ptをインクリメントし(ステップ618)、変数i,jを0に初期化して、再びステップS602からの処理を実行する。
ステップS602において、差分検出部304は、base(2)がNULLデータか否かを確認する。ここでは、base(2)はNULLではないので(ステップS602 Yes)、差分検出部304は、ryu(2)がNULLデータか否かを確認する(ステップS603)。ここでは、ryu(2)はNULLではないので(ステップS603 Yes)、差分検出部304は、base(2)とryu(2)とを比較し差異があるか否かを確認する(ステップS605)。ここでは、base(2)とryu(2)には差異があり、一致しないので(ステップS605 No)、差分検出部304は、ccc2.doc307Cのページ2がaaa.doc301Aに対する追加か否かを確認するため、ccc2.doc307Cのページ3以降とaaa.doc301Aのページ2とを比較する。即ち、差分検出部304は、変数iをインクリメントし(ステップS607)、ryu(3)がNULLデータか否かを確認する(ステップS608)。ここでは、ryu(3)はNULLデータではないので(ステップS608 No)、base(2)とryu(3)とを比較する(ステップS609)。ここでは、base(2)とryu(3)とは一致しないので(ステップS609 No)、差分検出部304は再び、ステップS607からの処理を実行する。
差分検出部304は、変数iをインクリメントし(ステップS607)、ryu(4)がNULLデータか否かを確認する(ステップS608)。ここでは、ryu(4)はNULLデータではないので(ステップS608 No)、base(2)とryu(4)とを比較する(ステップS609)。ここでは、base(2)とryu(3)とは一致しないので(ステップS609 No)、差分検出部304は再び、ステップS607からの処理を実行する。
再度、差分検出部304は、変数iをインクリメントし(ステップS607)、i=3となった時点で、ryu(5)は存在せず、NULLデータであるため(ステップS608 Yes)、差分検出部304は、aaa.doc301Aのページ2はccc2.doc307Cには存在しないと判断する。
続いて、aaa.doc301Aのページ2がccc2.doc307Cに対する削除対象か否かを確認するため、差分検出部304はaaa.doc301Aのページ3以降のページに対応するbase(3)〜とryu(2)とを比較する。すなわち、差分検出部304は、変数jをインクリメントし(ステップS612)、base(3)がNULLデータか否かを確認する(ステップS613)。ここでは、base(2)はNULLデータではないので(ステップS613 No)、差分検出部304はbase(3)とryu(2)とを比較する(ステップS614)。ここでは、一致するので(ステップS614 Yes)、差分検出部304はaaa.doc301Aのページ2は単独で余分なページであると判断し、当該ページデータが削除対象であることを意味するコマンド311C「delete2」を差分データに追加する。
以降、ここまでの同様のステップで、差分検出部304は差分データにコマンド311D「rewrite4」とページデータ310Bで示すryu(5)を差分データに追加する。最終的には、図35に示される差分データ311が作成される。
bpt=6,pt=5となった時点で、base(6)はNULLデータであり(ステップS602 No)、ryu(5)もNULLデータであるため(ステップS604 No)、差分検出部304は差分データを印刷データ記憶部107Aに記憶させ、処理を終了する。
次に、図34を用いて差分合成部403が、流用データを復元する処理について説明する。ここでは、aaa.doc304AをベースJOBとし、ccc2.doc307Cを流用JOBとして、流用データを復元する処理について説明する。また、プリンタ400には、ホストPC100より印刷データ及び差分データがデータとして送信され、当該データはそれぞれ記憶部206に記憶されているものとする。
図11のステップS305において、受信解析部202により起動指示の供給を受けると、差分合成部403は記憶部206に記憶されている印刷データ及び差分データを読み取り、ワークメモリに展開する。なお、ワークメモリに展開される印刷データのページデータをbase(n)と称し、例えば、印刷データのページ1データはbase(1)と称する。つまり、base(1)〜base(5)がaaa.doc301Aに対する印刷データの各ページデータに相当する。また、差分合成部203は、空の流用ジョブデータをメモリに確保する(ステップS701)。
次に、差分合成部403は、ワークメモリに展開した差分データに、未処理のコマンド、ページ番号、及びページデータが存在するか否かを確認する(ステップS702)。ここでは図34に示すように、差分データには、コマンド311Aとページデータ311B,コマンド311C,コマンド311Dとページデータ311Eの3セットが存在し、いずれも未処理であるため(ステップS702 No)、差分合成部403は、1セット分のコマンド、ページ番号、及びページデータを読み取る。すなわち、command=”rewrite”,bpt=1,ページデータ311B(=310A)を得る(ステップS703)。
次に、ステップS704において、差分合成部403は、コマンドがrewriteか否かを判断する。ここでは、コマンドはrewriteなので(ステップS704 Yes)、差分合成部403は、base(1)をページデータ311Bで置換え(ステップS705)、再びステップS702からの処理を実行する。
同様に、差分合成部403は、ワークメモリに展開した差分データに、未処理のコマンド、ページ番号、及びページデータが存在するか否かを確認する(ステップS702)。ここでは、差分データには、コマンド311C,コマンド311Dとページデータ311Eの2セットが存在し、いずれも未処理であるため(ステップS702 No)、差分合成部203は、1セット分のコマンド、ページ番号、及びページデータを読み取る。即ち、コマンド311Cからcommand=”delete”,bpt=2,ページデータNULLを得る(ステップS703)。
次に、ステップS704において、差分合成部403は、コマンドがrewriteか否かを判断する。ここでは、コマンドはrewriteではないので(ステップS704 No)、差分合成部403は、コマンドがinsertか否かを判断する(ステップS706)。ここでは、コマンドはinsertではないので(ステップS705 No)、差分合成部403はコマンドがdeleteか否かを判断する(ステップS708)。ここでは、コマンドはdeleteなので(ステップS708 Yes)、差分合成部403は、base(2)を削除し(ステップS709)、再びステップS702からの処理を実行する。
同様に、差分合成部403は、ワークメモリに展開した差分データに、未処理のコマンド、ページ番号、及びページデータが存在するか否かを確認する(ステップS702)。ここでは、差分データには、コマンド311Dとページデータ311Eの1セットが存在し、いずれも未処理であるため(ステップS702 No)、差分合成部203は、1セット分のコマンド、ページ番号、及びページデータを読み取る。即ち、command=”rewrite”,bpt=4,ページデータ311E(=310B)を得る(ステップS703)。
次に、ステップS704において、差分合成部403は、コマンドがrewriteか否かを判断する。ここでは、コマンドはrewriteなので(ステップS704 Yes)、差分合成部403は、base(4)をページデータ311Eで置換え(ステップS705)、再びステップS702からの処理を実行する。
ワークメモリに展開した差分データに、未処理のコマンド、ページ番号、及びページデータが存在しないので(ステップS702 Yes)差分合成部403は、ページデータ順にページ番号を振りなおし(ステップS710)、流用データとして記憶部206に記憶させ、処理を終了する。
以上のように、第2の実施形態によれば、第1の実施形態の効果に加え、単にページ毎の差異の有無を確認するだけではなく、ページに差異があった場合にはそれ以降のページを参照して、ページの過不足があるか否かを検出するため、ページ差替えだけではなくページ過不足がある場合に、過不足があったページ以降のページデータの比較がずれてしまい、差分データが多くなることを防ぐため、差分データのデータサイズを削減でき、ホストPCから送信されるデータ量を最低限に留めることができる。また、プリンタが実際の印刷物を出力するまでに実行する処理が簡略化されるため、ユーザが印刷物を取得するまでの時間を短縮することができる。
本実施形態の説明において、画像処理装置としてPCを用いて説明したが、本発明は、これに代わりプリンタサーバ、ワークステーション等を用いたシステムにも利用することができる。また、画像形成装置としてプリンタを用いて説明したが、MFPやファクシミリ、複写機等を利用することもできる。さらに、画像処理装置と画像形成装置とを接続する通信路としてネットワークを用いて説明したが、RS232C、IEEE1284、USB等の他の通信路を利用することもできる。