以下、添付図面に従って本発明に係る実施形態を詳細に説明する。
図1は、本発明の実施例を示す印刷システムの全体の構成を説明するシステム構成図である。本画像形成装置200は、画像入力デバイスであるスキャナ部2070、画像出力デバイスであるプリンタ部2095、コントロールユニット2000、ユーザインターフェースである操作部2012から構成される。スキャナ部2070、プリンタ部2095、操作部2012は、それぞれコントロールユニット2000に接続される。コントロールユニット2000は、LAN2011などのネットワーク伝送手段(ネットワークインタフェース)に接続されている。なお、LANは有線、無線を問わない。また、LAN2011には、画像形成装置200と同様の構成を持つ他の画像形成装置220、230が接続されている。画像形成装置220は、スキャナ部2270、プリンタ部2295、操作部2212を持ち、それらがコントロールユニット2200に接続されている。また、画像形成装置230も、スキャナ部2370、プリンタ部2395、操作部3212を持ち、それらがコントロールユニット2300に接続されている。
また、LAN2011には、パーソナルコンピュータ等で代表されるホストコンピュータ2100が接続されている。
なお、図示では、1台のホストコンピュータ2100、3台の画像形成装置200、220、230がLAN2011に接続されている例を示しているが、それらの数は問わない。また、LAN2011には他のネットワークデバイスが接続されていても構わない。
図2は、画像形成装置200の構成を説明するブロック図である。他の画像形成装置220、230も同様の構成を有するものとし、その説明は省略する。
コントロールユニット2000は画像入力デバイスであるスキャナ部2070や画像出力デバイスであるプリンタ部2095と接続する。また、このコントロールユニット2000はLAN2011や公衆回線(WAN)2051と接続することで、画像情報やデバイス情報の入出力を行うCPU2001は画像形成装置2000全体を制御するコントローラである。RAM2002はCPU2001が動作するためのシステムワークメモリであり、画像データを一時記憶するための画像メモリとしても利用される。ROM2003はブートROMであり、システムのブートプログラムが格納されている。HDD2004はハードディスクドライブで、システムソフトウェア、画像データを格納する。なお、実施形態では、HDD2004を例にしているが、記憶容量の大きければ、他のストレージデバイスであても構わない。
操作部I/F2006は操作部(UI)2012と通信するためのインターフェースである。この操作部I/Fは、操作部2012が有する液晶表示器等の表示装置に表示すべき画像データを出力したり、ユーザによる操作部2012が有する各種スイッチ、ボタン、タッチパネルへの入力をCPU2001に伝える役割を有する。
ネットワークI/F2010はLAN2011と通信するためのインタフェースである。Modem2050は公衆回線2051に接続し、情報の入出力を行う。以上のデバイスがシステムバス2007上に配置される。イメージバスI/F2005はシステムバス2007と画像データを高速で転送するイメージバス2008を接続し、データ構造を変換するバスブリッジである。イメージバス2008は、PCIバスまたはIEEE1394で構成される。
イメージバス2008上には以下のデバイスが配置される。
イメージプロセッサ(RIP)2060はディスプレイリストをラスタイメージに展開する。デバイスI/F2020は、画像入出力デバイスであるスキャナ部2070やプリンタ部2095とイメージバス2008とを信号線2071、2096を介して接続するインタフェースである。
スキャナ画像処理部2080は、スキャナ部2080からの画像データをデバイスI/F2020を介して入力し、その画像データに対し補正、加工、編集を行う。プリンタ画像処理部 2090は、プリント出力画像データに対して、プリンタの補正、解像度変換、ハーフトーニング等を行い、デバイスI/F2020からプリンタ部2095に出力する処理を行なう。
画像回転部2030は画像データの回転を行う。画像圧縮部2040は、多値画像データはJPEG、2値画像画像データはJBIG、MMR、MHの圧縮伸張処理を行う。
画像形成装置200の外観を図3に示す。画像入力デバイスであるスキャナ部2070は、原稿となる紙上の画像を照明し、CCDラインセンサ(図示せず)を走査することで、ラスターイメージデータ2071として電気信号に変換する。原稿用紙は原稿フィーダ2072のトレイ2073にセットされる。装置使用者が操作部2012から読み取り起動指示することにより、コントローラCPU2001がスキャナ部2070に指示を与える。この結果、フィーダ2072は原稿用紙を1枚ずつフィードし、原稿読み取り面に原稿用紙を搬送する。これにより、原稿の画像を読取ることになる。
画像出力デバイスであるプリンタ部2095は、ラスターイメージデータ2096を用紙上に画像を形成する。この形成する際の方式は感光体ドラムや感光体ベルトを用いた電子写真方式、微少ノズルアレイからインクを吐出して用紙上に直接画像を印字するインクジェット方式等があるが、どの方式でも構わない。プリント動作の起動は、コントローラCPU2001からの指示を信号線2096を介して出力することで開始する。プリンタ部2095には、異なる用紙サイズまたは異なる用紙向きを選択できるように複数の給紙段を持ち、それに対応した用紙カセット2101、2102、2103がある。また、排紙トレイ2111は印字し終わった用紙を受けるものである。
操作部2012の構成を図4に示す。LCD表示部2013は、LCD上にタッチパネルシート2019が貼られており、システムの操作画面およびソフトキーを表示するとともに、表示してあるキーが押されるとその位置情報をコントローラCPU2001に伝える。スタートキー2014は原稿画像の読み取り動作を開始する時などに用いる。スタートキー2014の中央部には、緑と赤の2色LED2018があり、いずれか一方を点灯することで、スタートキー2014が使える状態にあるかどうかを報知する。ストップキー2015は稼働中の動作を止める働きをする。IDキー2016は、使用者のユーザIDを入力する時に用いる。リセットキー2017は操作部からの設定を初期化する時に用いる。
図5は、実施形態における画像形成装置のソフトウェアブロック構成図である。
1501はUI即ちユーザインターフェースを司るものであり、オペレータが本画像形成装置の各種操作・設定を行う際、機器との仲介を行うモジュールである。本モジュールは、オペレータの操作に従い、後述の各種モジュールに入力情報を転送し処理の依頼、或いはデータの設定等を行う。
1502はAddress-Book即ちデータの送付先、通信先等を管理するデータベースモジュールである。Address-Bookの内容は、UI 1501からの操作によりデータの追加、削除、取得が行われ、オペレータの操作により後述の各モジュールにデータの送付・通信先情報を与えるものとして使用されるものである。
1504はUniversal-Send即ち、データの配信を司るモジュールであり、UI 1501によりオペレータに指示されたデータを、同様に指示された通信(出力)先に配布するものである。また、オペレータにより、本機器のスキャナ機能を使用し配布データの生成が指示された場合は、後述のControl-API 1519を介して機器を動作させ、データの生成を行う。1505はUniversal-Send 1504内で出力先にプリンタが指定された際に実行されるモジュールである。1506はUniversal-Send 1504内で通信先にE-mailアドレスが指定された際に実行されるモジュールである。1507はUniversal-Send 1504内で出力先にデータベースが指定された際に実行されるモジュールである。1508はUniversal-Send 1504内で出力先に本機器と同様の画像形成装置が指定された際に実行されるモジュールである。
1509はPDLモジュールであり、本画像形成装置の外部から送信されたPDL(Page Description Language)文書を、本画像形成装置のプリント機能を使用してプリントする機能を実現する。1509 PDL内部の1531はJob-Ticket-Parserであり、PDLデータと一緒に受信したJob-Ticketデータを解釈するモジュールである。Job-Ticketでは印刷メディアや部数、後処理、各種色処理、画像処理方法が指定可能である。これらの情報はJob-Ticket-Parser1531で解析された後に、後述のControl-API 1519を介して、後述のJob-Manager1520、Print-Manager1526、PDL-Interpreter1527に伝達される。また、1512 HTTPモジュールを使用して外部のWebサーバに格納された電子文書を取り出しプリントする機能も提供するものである。
1510はCopyモジュールであり、本画像形成装置のプリンタ機能とスキャナ機能を使用し、UIの指示に基づいてCopy動作を実行するものである。
1511はボックスモジュール(Box)である。このボックスモジュール1511は、スキャン画像もしくはPDLプリント画像をHDDに格納し、格納した画像のプリンタ機能による印刷、Universal-Send機能による送信、HDDに格納した文書の削除、グルーピング(個別BOXへの格納)、BOX間移動、BOX間コピーなどの管理機能を提供する。
1512は本画像形成装置がHTTPにより通信する際に使用されるモジュールである。このモジュール1512は、後述のTCP/IP1516モジュールにより前述のPDL 1509モジュールに通信を提供する。1513はlprモジュールであり、後述のTCP/IP 1517モジュールにより前述のUniversal-Send1504内のプリンタモジュール1505に通信を提供するものである。1514はSMTPモジュールであり、後述のTCP/IP 1517モジュールにより前述のUniversal-Send1504内のE-mailモジュール1506に通信を提供するものである。1515はSLM即ちSalutation-Managerモジュールであり、後述のTCP/IP 1517モジュールにより前述のUniversal-Send1504内のデータベースモジュール1517、DPモジュール1518に通信を提供するものである。1516はLPDモジュールであり、後述のTCP/IP 1517 モジュールにより、前述のPDL 1509 モジュールに通信を提供するものである。1517はTCP/IP通信モジュールであり、前述の各種モジュールに後述のNetwork-Driverによりネットワーク通信を提供するものである。1518はネットワークドライバであり、ネットワークに物理的に接続される部分を制御するものである。
1519はControl-APIであり、Universal-Send1504、PDL1509、Copy1510、Box1511等の上位モジュールに対し、後述のJob-Manager1520等の下位モジュールとのインターフェースを提供する。これにより、Control-API1519は上位、及び下位のモジュール間の依存関係を軽減しそれぞれの流用性を高める。
1520はJob-Managerであり、前述の各種モジュールよりControl-API 1519を介して指示される処理を解釈し、後述の各モジュールに指示を与えるものである。また、本モジュールは、本画像形成装置内で実行されるハード的な処理を一元管理するものである。1521はCODEC-Managerであり、Job-Manager1520が指示する処理の中でデータの各種圧縮・伸長を管理・制御するものである。1522はFBE-Encoderであり、Job-Manager 1520、Scan-Manager 1525により実行されるスキャン処理により読み込まれたデータをFBEフォーマットにより圧縮するものである。1523はJPEG-CODECであり、Job-Manager1520、Scan-Manager1525により実行されるスキャン処理、及びPrint-Manager 1526により実行される印刷処理において、読み込まれたデータのJPEG圧縮及び印刷データのJPEG展開処理を行うものである。1524はMMR-CODECであり、Job-Manager 1520、Scan-Manager 1525により実行されるスキャン処理、及びPrint-Manager 1526により実行される印刷処理において、読み込まれたデータのMMR圧縮及び印刷データのMMR伸長処理を行うものである。
1525はScan-Managerであり、Job-Manager1520が指示するスキャン処理を管理・制御するものである。1528はScanner I/Fであり、Scan-Manager 1524と本画像形成装置が内部的に接続しているスキャナ部とのI/Fを提供するものである。
1526はPrint-Managerであり、Job-Manager1519が指示する印刷処理を管理・制御するものである。1529はEngine-I/Fドライバであり、Print-Manager1526と印刷部とのI/Fを提供するものである。
1527はPDL Interpreterである。このPDL Interpreter1527は、Job-Manager1520の指示により、LIPS、PostScript、PCL、PDF、SVGなどのPDLもしくは電子文書フォーマットを解釈し、PDLもしくは電子文書フォーマットの種別によらない共通の表現形式であるディスプレイリストを生成する。
1530はRenderであり、PDL Interpreter 1527により生成されたディスプレイリストを、Print-Manager 1520の指示により、イメージプロセッサを用いてラスタイメージメモリに展開するものである。
次に、図6を用いてページ記述言語を解釈し画像形成を行うRIP処理の流れに関して説明する。
PostScriptインタプリタ3001は図5のPDL Interpreter1527に含まれるモジュールの1つで、PostScript言語で記述されたデータを解釈し中間言語データであるディスプレイリスト3017を生成する。
なお、PostScriptインタプリタ3001内の各モジュールはパイプライン実行する。そして、描画オブジェクト毎に3004から3011までの各モジュールが繰り返し実行され、同一ページ内の全描画オブジェクトに対する処理が終了した時点で1ページ分のディスプレイリストが生成される。
RIP詳細パラメータ3016はJob Ticketにより指定された情報のうちRIP処理時に適用されるパラメータ群である。ここで与えられるパラメータとしては、出力カラーモード、RGBソースプロファイル、CMYKシミュレーションプロファイル、出力プロファイルがある。Job Ticketは、前述したように、図5のJob-Ticket-Parser1531によって解釈される。
図6のRIP処理の流れでは、各ページに含まれる描画オブジェクトの色によってページ全体がカラーかモノクロかを決定する、出力カラーモード設定Autoを前提に説明する。
言語処理部3004はPostScript言語データを解釈し、その解釈結果に応じてPostScript言語データを文字処理部3005、グラフィックス処理部3006、イメージ処理部3007のいずれかに出力する。
文字処理部3005は指定されたフォントから文字ビットマップを生成し、レンダリング処理に対処するための、描画座標、色を含めた所定のフォーマットのデータを生成する。グラフィックス処理部3006は、コンピュータグラフィックス等の命令を、やはり、レンダリング処理が高速にするための所定形式(色を含む)のデータに変換する。イメージ処理部3007はイメージデータを共通の内部データ形式に変換する処理を行う。
CMSエンジン3008はカラーマネージメントを行うモジュールであり、入力色を絶対色空間に変換後、プリンタエンジン固有の出力色(CMYK)を生成するものである。PostScript言語ではDevice色空間、CIEBased色空間、特殊色空間など多様な色空間が規定されている。Device色空間で指定された入力色に関しては、RGBソースプロファイル、CMYKシミュレーションプロファイルなどの予め用意されたICCプロファイル群のうち指定されたものを用いて色変換を行う。CIEBased色空間で指定された入力色に関してはその色空間で指定された変換テーブル、変換関数、変換マトリックスに従い色変換を行う。絶対色空間からプリンタエンジン固有の色空間への変換は出力プロファイルもしくは、PostScriptで規定されたColor Rendering Dictionaryを用いて行う。出力プロファイルに関してはグレイスケールがK単色で表現されることを優先したグレイ補償プロファイルと、グレイスケールをCMYK4色で表現するノーマルプロファイルの二つが選択的に使用可能である。Separation色空間、もしくはDeviceN色空間などで指定された特色についてはNamed ICCプロファイルを用いてプロセスカラー(CMYK)に変換する。
色判定部3009はCMSエンジンの出力値であるCMYK色を調べ、現在処理中のページがカラーページかモノクロページか判定するものである。色判定はRIP詳細パラメータの出力カラーモードによりAutoが指定された場合にのみ実行される。出力カラーモードにはその他に、カラーとモノクロが指定可能であるが、カラーもしくはモノクロが指定された場合には色判定は実行されない。
ディスプレイリストジェネレータ3011は中間言語データであるディスプレイリスト3017を生成するものである。また、ディスプレイリスト内には、各オブジェクトの属性フラグが含まれており、オブジェクトがグラフィックス、イメージ、文字の何れであるかが識別される。各属性は文字処理部3007、グラフィックス処理部3008、イメージ処理部3009から通知されたものがそのまま使用される。属性フラグはレンダを経て後段の画像処理に使用される。また、ディスプレイリスト内には、各オブジェクトのラスタオペレーション情報が含まれており、ラスタオペレーション処理が必要なオブジェクトか否かが識別される。
レンダ3002は、図2のRIP2060に対応する。RIP2060には、深度8ビット(256階調)を有するC(シアン)、M(マゼンタ)、Y(イエロー)、K(ブラック)のビットマップイメージを格納するための4つのプレーンメモリと、深度2ビットの属性プレーンメモリを有する。
レンダ3002は、ディスプレイリストを解釈し、4つのプレーンメモリに描画するためのC、M、Y、Kのビットマップイメージ3018を生成する。言い換えれば、レンダ3002は、ディスプレイリストからビットマップイメージ(プリンタ部2095が印刷処理可能な印刷データ)へのデータ変換処理を実行する。この生成処理は図2のRIP2060を使用して大半の処理が行われる。レンダ3002ではMask(result = src & dest)、Copy(result = src)、Merge(result = src | dest)などのラスタオペレーションモードを備えている。すなわち、レンダ3002は、描画オブジェクト毎に指定されたラスタオペレーションモードに従い、既に描画済の描画オブジェクト(背景、dest)と次に描画すべき描画オブジェクト(前景、src)との間でラスタオペレーション処理を実行し、描画結果(result)をページメモリ上に展開する。
また、レンダ3002はディスプレイリスト3017に含まれる属性フラグを元に各デバイスピクセル単位に属性を示す、オブジェクト属性マップ3019を5枚目の属性プレーンメモリに書き込む。この属性プレーンメモリは、上記のようにピクセル毎に2ビットの深度を持ち、グラフィックスの画素の場合には“01”、イメージ(自然画)の画素であれば“10”、文字/線画の画素であれば“11”が書き込まれる。
次に、CMYKビットマップ3018、オブジェクト属性マップ3019は画像処理プロセッサ3003に送られる。
なおディスプレイリストの作成後に続いてレンダリングが行われるかどうかは、Job Manager1520およびPrintManager1526による制御に依存する。直ぐにレンダリングが行われない場合は作成した各ページのディスプレイリストは順次ハードディスク2004の所定の位置に格納される。
画像処理プロセッサ3003は図5のPrint Manager1526の制御下で、レンダ3002により生成されたCMYKビットマップ3018に対して、濃度・カラーバランス調整3012、出力ガンマ補正3013、ハーフトーニング3014などの画像処理を行う。
ハーフトーニング3014はオブジェクト属性マップ3019を参照してオブジェクト属性毎に異なるハーフトーニングを適用する。例えば、ハーフトーニング3014はグラフィックス属性の画像領域に対しては解像度優先の高線数スクリーンを、イメージ属性の画像領域に対しては諧調優先の低解像度スクリーンを、文字属性の画像領域に対しては誤差拡散を適用した処理を行なう。
色判定部3009で注目ページがモノクロページと判定された場合には、レンダ3002で作成されたCMYKビットマップ3018のうちK成分のビットマップのみが画像処理プロセッサ3004に送られ、最終出力で使用されるKビットマップ3021が生成される。また、色判定部3009で注目ページがカラーページと判定された場合には、レンダ3002で生成されたCMYKビットマップ3018がそのまま画像処理プロセッサ3002に送られ、最終出力で使用されるCMYKビットマップ3020が生成される。こうして、画像処理プロセッサ3003により生成されたCMYKビットマップ3020もしくはKビットマップ3021が図5のEngine I/F 1529を介してプリンタエンジンに転送され、記録紙等の所望の記録メディアに印刷出力されるものである。
なお、本印刷装置は2つの印刷モードを有する。1つは、生成されたCMYKビットマップ3020もしくはKビットマップ3021の印刷処理と、次のページのページ解釈もしくはレンダリング処理とを並列処理するRIP・印刷並列モードである。もう1つは、1つのジョブ中の全ページのレンダリング後に、順次印刷処理を行なうRIP・印刷シーケンシャルモードである。RIP・印刷並列モードでは、ページ解釈もしくはレンダリングに時間がかかった場合に、エンジン速度で出力できない可能性がある。一方、RIP・印刷シーケンシャルモードの場合は複数ページをエンジン速度で出力することが可能である。これら2つのモードの選択は、ジョブチケットで指定可能であるが、本印刷装置ではRIP・印刷シーケンシャルモードをデフォルトの動作とする。
以上、実施形態におけるハードウェア/ソフトウェアそれぞれの構成と、各構成要素の機能を説明した。次に、実施形態におけるクラスタ(分散)印刷処理について説明する。
説明を簡単なものとするため、画像形成装置200、220、230は同じ機能を有し、且つ、それぞれのプリンタ部の単位時間当たりの印刷枚数は同じであるものとする。そして、ここでは、ここでは画像形成装置200を例にして説明する。
なお、クラスタ印刷処理では、マスタプリンタとスレーブプリンタとの協動処理が行われる。このときのホストコンピュータ2100がプリントデータの出力先して指定された画像形成装置がマスタとなり、マスタプリンタが受信したジョブチケット内に記述されたネットワークアドレスで特定される画像形成装置がスレーブとなる。従って、各画像形成装置200、220、230はそれぞれがマスタとなり得るし、それぞれがスレーブとなり得る点に注意されたい。
また、以下の説明で「ページ番号」という表現を用いるが、このページ番号は印刷すべき論理ページ番号を示すものであって、ホストコンピュータ2100が印刷指示した文書の物理ページ番号を意味するものではない。例えば、ホストコンピュータで200ページの文書を編集していて、そのうちの101ページから200ページを印刷するジョブを発行した場合、実施形態における画像形成装置は論理的に100ページの文書を印刷するものとして処理する。すなわち、以下の説明での「ページ番号」が“1”は、上記の場合、ユーザが望む文書の100ページ目を意味することになる。
以下、図7乃至図11を用いて、クラスタプリント処理の処理手順を説明する。図7乃至図11のフローチャートに示されるプログラムは図5のJob Manager 1520とPrint Manager1526によって実行されるものである。また、クラスタプリントを行うか否かの指示、及びクラスタプリントを行う場合のスレーブプリンタの指定は、上記の通り、ジョブチケットにより行われる。つまり、Job Ticket Parser1531によるジョブチケットの解釈結果がControl API 1519を介してJob Manager1520に通知される。
先ず、ステップS1において、ホストコンピュータ(印刷データ発生源)2100よりクラスタプリントジョブを受信したか否か、すなわち、クラスタプリントのマスタとして機能する要求を受信したか否かを判断する。
クラスタプリントのマスタプリンタの要求を受けたと判断した場合には、ステップS2に進み、PostScriptインタプリタを起動し全ページの解釈を行う。この結果、全ページのディスプレイリストデータが生成される。生成されたディスプレイリストデータはHDD2004に格納する。なお、この処理によって印刷すべき全ページ数が判明するので、その全ページ数をPmaxと定義する。
次いで、ステップS3に進んで、生成された全ページ分のディスプレイリストデータをスレーブプリンタに転送する。このとき転送するディスプレイリストにはスレーブプリンタとして動作することを指示するJob Ticketが付加される。また、転送したディスプレイリストはマスタープリンタ上でも消去されずに残す。なお、ステップS3の処理までは、Job Manager1520によって実行される。Job Manager1520はPostScriptインタプリタを起動して、ページ解釈のみを実行させることになる。
詳細は後述するが、スレーブプリンタは、ディスプレイリストデータを受信すると、そのレンダリング処理を開始することになる。マスタプリンタにおけるレンダリング処理順序は以下の説明から明らかになるように、ページ番号1、2、…と昇順である。これに対し、スレーブプリンタのレンダリングする順序は、ページ番号Pmax,Pmax-1、Pmax-2の順、すなわち、マスタプリンタのそれとは逆の降順にレンダリングを行なう。そして、スレーブプリンタは、現在、レンダリング中のページ番号をマスタプリンタにメッセージと情報として通知してくる。また、マスタプリンタのスレーブプリンタからのレンダリング処理中のページ番号の通知を受信する処理は、別タスクで行なっているものとする。この別タスクでは、スレーブプリンタからレンダリングページ番号を示すメッセージを受信する度に、RAM2002内の予め設定されたアドレス位置にその情報を上書き(更新)していくものとする。
図11はマスタプリンタが有する上記の別タスクの処理手順を示している。
先ず、ステップS41では、スレーブプリンタからレンダリング処理中のページ番号を示すメッセージを受信するのを待つ。そのメッセージを受信すると、ステップS42に進んで、メッセージ中のページ番号をRAM2002に確保された変数Kのアドレス位置にその番号を上書きする。
なお、スレーブプリンタのマスタプリンタからのレンダリング処理中のページ番号の受信、並びに、更新処理も、スレーブプリンタにおけるレンダリング処理とは別タスクであるが、図11と実質的に同じである。
説明を図7のフローチャートに戻す。全ページ分のディスプレイリストデータのスレーブプリンタへの転送が完了すると、処理はステップS4に進んで、変数iに初期値として“1”を代入する。そして、ステップS5に進んで、ページ番号iのレンダリング処理中であることを示すメッセージを生成し、スレーブプリンタに通知(送信)する。この通知を終えると、ステップS6に進み、HDD2004に格納されたディスプレイリストデータ中のi番目のページのディスプレイリストデータを読み込みレンダリングを行なう。注目しているi番目のページのレンダリングが完了すると、処理はステップS7に進み、そのレンダリング結果であるビットマップイメージデータをHDD2004に格納する。
次いで、ステップS8に進んで、スレーブプリンタの現在レンダリング中のページ番号Kを、上記RAM2002から取得する。
そして、ステップS9において、次にレンダリングすべきページ番号iと、スレーブプリンタでレンダリング中のページ番号Kから“1”を減じた値を比較し、「i<K−1」であるか否かを判断する。これは、スレーブプリンタが次にレンダリングしようとするページが、マスタプリンタ側で既にレンダリングが完了しているか否かを判断していることに他ならない。また、マスタプリンタが次にレンダリングしようとするページが、スレーブプリンタにてレンダリングを開始している、或いは、スレーブプリンタで既にレンダリングが完了しているか否かを判断すると言い換えても良い。
なお、ステップS9を、「i=K−1?」とせず、「i<K−1?」としたのは、一方のプリンタで1ページのレンダリング中に、他方のプリンタでは2ページ以上のレンダリング可能になる場合があるからである。
さて、ステップS9の判断が“Yes”の場合、マスタプリンタが次にレンダリングすべきページは、少なくともスレーブプリンタ側ではレンダリングが未着手状態であることになるので、ステップS10に進む。このステップS10では変数iとPmaxと等しいか否か、すなわち、最終ページのレンダリングが完了したか否かを判断する。「i<Pmax」であると判断した場合には、ステップS11に進んで、変数iを“1”だけインクリメントし、ステップS5以降の処理を繰り返す。
一方、ステップS9において「No」、すなわち、マスタプリンタ側で次にレンダリングすべきページが、スレーブプリンタ側で既にレンダリング処理中、或いは、レンダリングが完了していると判断した場合には、ステップS12に処理を進める。また、ステップS10でNoと判断された場合も処理をステップS12に進める。
ここで注意したい点は、ステップS12に処理が進んだ場合、全ページのレンダリングデータが、マスタ、スレーブプリンタそれぞれのレンダリングした結果を足し合わせることで得られる点である。
そこで、ステップS12では、マスタプリンタによってレンダリングしたページ数が、スレーブプリンタによってレンダリングしたページ数と実質的に等しいか否かを判断する。
等しいと判断した場合には、マスタ、スレーブプリンタがレンダリングしたページ数はそれぞれ全ページ数Pmaxの半分であることになる。また、実施形態では、マスタ、スレーブプリンタのそれぞれプリンタ部は同じ印刷速度としている。従って、マスタ、スレーブプリンタは実質的に同じ時間で印刷が完了することが約束されることになる。そのため、処理はステップS16に進み、HDD2004に格納されたレンダリング結果のうち、ページ1、2、…の順にビットマップイメージデータを読み込み、ページ1、2、…の順に印刷処理を行ない、一連のクラスタプリント処理を終了する。
また、ステップS12にて「No」と判断された場合、処理はステップS13に進む。ここでは、マスタプリンタでレンダリングしたページ数(変数iの値)が、全ページ数の半分を超えているか否かを判断する。
ステップS13にて、マスタプリンタのレンダリングしたページ数が全ページ数の半分を超えていると判断した場合、処理はステップS14に進み、全ページ数の半分を超えたページ数分のレンダリング結果をスレーブプリンタに転送する。転送対象は、マスタプリンタが保持する最終ページから先頭ページに向かうレンダリングデータである。例えば、Pmax=100であり、マスタプリンタがページ番号「55」までレンダリングした場合には、ページ番号51、52、53、54、55のレンダリング結果をスレーブプリンタに転送する。
また、ステップS13の判断がNoの場合、マスタプリンタのレンダリングしたページ数が全ページ数の半分に満たないことになる。そこで、ステップS15にて、マスタプリンタ内のレンダリングしたページ数が、全ぺージ数の半分とすため、不足分をスレーブプリンタから受信し、HDD2004に格納する。受信するのは、スレーブプリンタが保持する先頭ページから最終ページに向かうレンダリングデータである。例えば、Pmax=100であり、マスタプリンタがページ番号「45」までレンダリングした場合には、ページ番号46、47、48、49、50のレンダリングデータをスレーブプリンタから受信する。
ステップS14、或いは、ステップS15の処理の結果、マスタプリンタのHDD2004には、少なくとも、先頭ページから全ページの半分の位置にあるページ数までのレンダリングデータが存在することになる。そこで、ステップS16にて、全ページの前半の印刷処理を行ない、一連のクラスタプリント処理を終了する。
なお、全ページ数Pmaxが奇数の場合について補足説明する。全ページ数が奇数の場合、マスタ、スレーブプリンタのいずれか一方は、他方よりも1ページ分だけ多く印刷せざるをえない。
従って、ステップS12では、全ページ数を示すPmaxが奇数の場合では、マスタ、スレーブプリンタそれぞれのレンダリングしたページ数の差が“1”以下であるかを判断すればよい。マスタプリンタでレンダリングしたページ数は変数iで示され、スレーブプリンタでレンダリングしたページ数は「Pmax−K+1」で示されるので、ステップS12は、実際には、
条件:|i−(Pmax−K+1)|≦1
であるか否かを判断すれば良いことになる(|x|はxの絶対値を意味する)。
また、ステップS14或いはS15での、レンダリングデータの送信データ量は少ないことが望ましい。
例えば、Pmax=101であり、マスタプリンタがページ番号「55」までレンダリングした場合には、ステップS14では、ページ番号52、53、54、55のレンダリング結果をスレーブプリンタに転送する。
また、Pmax=101であり、マスタプリンタがページ番号「45」までレンダリングした場合には、ステップS15ではページ番号46、47、48、49、50のレンダリングデータをスレーブプリンタから受信する。
要するに、全ページ数Pmaxが奇数の場合、半分を超えるページ数をレンダリングしたプリンタが、他方のプリンタより1ページ分多く印刷するものとした。
さて、実施形態における画像形成装置200は、スレーブプリンタとしても機能することは既に説明した。このスレーブプリンタとしての処理は、マスタとなる他の画像形成装置からディスプレイリストデータとスレーブとして機能する指示情報を記述したジョブチケットを受信した場合となる。すなわち、図7においてステップS1でNoと判断されて図9のステップS20に進み、そのステップS20にてYesと判断された場合になる。なお、ステップS20でもNoと判断した場合には、通常の単独の印刷処理になるので、ステップS21に進んで、該当する処理を行なうことになる。
画像形成装置200のスレーブプリンタとしての処理は、ステップS20でYesと判断された後のステップS22以降の処理となる。
先に説明したように、各画像形成装置200、220、230それぞれは同じ機能を持つものとしている。また、これまでの図7、図8の説明は、画像形成装置200がマスタプリンタとして機能する場合を説明しているから、ステップS22以降の処理は画像形成装置200以外の画像形成装置の処理として説明すると技術的に分かりやすいであろう。それ故、ステップS22以降の処理は、スレーブプリンタとして指示された画像形成装置220(勿論、画像形成装置230でも構わない)が行なうものとして説明することとする。
先ず、ステップS22にて、スレーブプリンタはマスタプリンタ(画像形成装置200)より全ページのディスプレイリストデータを受信し、それをHDDに格納する。そして、レンダリングするページ番号を示す変数KにPmaxを設定する。すなわち、最初にレンダリングする対象を最終ページとして設定する。
次いで、ステップS24にて、K番目のページをレンダリングすることをマスタプリンタに通知する。そしてステップS25にて、K番目のページのレンダリングを行ない、ステップS26にて、ページ番号KのビットマップデータとしてHDDに格納する。そして、ステップS27にて、マスタプリンタの現在レンダリング中のページ番号iを取得する。マスタプリンタからのページ番号の受信、並びに、更新処理は別タスクとする点は既に説明した。
次いで、ステップS28に進んで、「K>i+1」を満たすか否かを判断する。要するに、マスタプリンタが次にレンダリングしようとするページが、スレーブプリンタ側で既にレンダリングが完了しているか否かを判断していることに他ならない。また、スレーブプリンタが次にレンダリングしようとするページが、マスタプリンタにてレンダリングを開始している、或いは、マスタプリンタで既にレンダリングが完了しているか否かを判断すると言い換えても良い。
さて、ステップS28の判断が“Yes”になるのは、スレーブプリンタが次にレンダリングすべきページは、少なくともマスタプリンタ側ではレンダリングが未着手状態であることを意味する。そこで、ステップS29に進み、変数Kと“1”との関係が「K>1」であるか否か、すなわち、先頭ページのレンダリングが完了したか否かを判断する。「K>1」であると判断した場合には、ステップS30に進んで、変数Kを“1”だけディクリメントし、ステップS24以降の処理を繰り返す。
一方、ステップS28において「No」、すなわち、スレーブプリンタ側で次にレンダリングすべきページが、マスタプリンタ側で既にレンダリング処理中、或いは、レンダリングが完了していると判断した場合には、図10のステップS31に処理を進める。また、ステップS29でNoと判断された場合も処理をステップS31に進める。
ステップS31では、マスタプリンタによってレンダリングしたページ数が、スレーブプリンタによってレンダリングしたページ数と実質的に等しいか否かを判断する。この判定は、先に説明したステップS12の処理を同じである。
等しいと判断した場合には、マスタ、スレーブプリンタがレンダリングしたページ数はそれぞれ全ページ数Pmaxの半分であることになる。従って、処理はステップS35に進み、HDDに格納されたレンダリング結果のうち、全ページの後半のページを昇順に印刷する。
例えば、Pmaxが=100(偶数)の場合であり、且つ、ステップS31からステップS35に進んだ場合には、HDDに格納されたページ番号51、52、…の順にレンダリングデータを読出し、ページ番号51、52、…の順に印刷を行なう。
また、Pmax=101、K=51の場合には、ページ番号51、52、…101の順に印刷する(印刷ページ数は「51」)。また、Pmax=101で、K=52の場合には、ページ番号、ページ番号52、53、…、101の順に印刷する(総ページ数は「50」)。
また、ステップS31にて「No」と判断された場合、処理はステップS33に進む。ここでは、スレーブプリンタでレンダリングしたページ数(Pmax−K+1)が、全ページ数の半分を超えているか否かを判断する。
ステップS31にて、スレーブプリンタのレンダリングしたページ数が全ページ数の半分を超えていると判断した場合、処理はステップS34に進み、全ページ数の半分を超えたページ数分のレンダリング結果をマスタプリンタに転送する。転送対象は、スレーブタプリンタが保持する先頭ページから最終ページに向かうレンダリングデータである。例えば、Pmax=100であり、スレーブプリンタがページ番号「45」までレンダリングした場合には、ページ番号45、46、47、48、49、50のレンダリング結果をマスタプリンタに転送する。
また、Pmax=101であり、スレーブプリンタがページ番号「45」までレンダリングした場合にも、ページ番号45、46、47、48、49、50のレンダリング結果をマスタプリンタに転送する。ページ番号「51」のレンダリング結果を転送しないのは、転送データ量を減らすためである。
また、ステップS33の判断がNoの場合、スレーブプリンタのレンダリングしたページ数が全ページ数の半分に満たないことになる。そこで、ステップS34にて、スレーブプリンタ内のレンダリングしたページ数が、全ぺージ数の半分とすため、不足分をマスタプリンタから受信し、HDDに格納する。受信するのは、マスタプリンタが保持する最終ページから先頭ページに向かうレンダリングデータである。
例えば、Pmax=100であり、スレーブプリンタがページ番号「55」までレンダリングした場合には、ページ番号51、52、53、54のレンダリングデータをマスタプリンタから受信する。
また、Pmax=101であり、スレーブプリンタがページ番号「55」までレンダリングした場合には、ページ番号52、53、54のレンダリング結果をマスタプリンタに転送する。ページ番号「51」のレンダリング結果を受信しないのは転送データ量を減らすためである。
ステップS33、或いは、ステップS34の処理の結果、スレーブプリンタのHDDには、少なくとも、全ページの後半部分のページ数のレンダリングデータが存在することになる。そこで、ステップS35にて、全ページの前半の印刷処理を行ない、一連のクラスタプリント処理を終了する。
以上であるが、図12は、図7乃至図11で説明したクラスタプリントを実行した際のマスタ、スレーブプリンタのタイミングシーケンスである。
この例では、6ページ中の1ページ目と2ページ目のRIP処理が重たいため、マスタープリンタで先頭の2ページのRIP処理を行い、スレーブプリンタで後の4ページのRIP処理を行った例を示している。これに伴い、スレーブプリンタは3ページ目のRIP済みイメージをマスタープリンタへ転送することにより、印刷ページ数をマスタープリンタ、スレーブプリンタで同じにしている。その結果、マスタ、スレーブプリンタそれぞれの印刷完了タイミングはほぼ同じにすることが可能になる。
なお、図12では、印刷ジョブが6ページの例を示しているが、数百、数千ページのプリンタデータではさらに大きな効果がもたらされることが明らかである。また、印刷ジョブが奇数ページの場合には、2つのプリンタの印刷完了するタイミングの差は最大でも1ページ印刷時間とすることが可能になる。
また、実施形態ではPostScriptを例にして説明したが、他のページ記述言語でもも構わない。レンダリング処理(或いはRIP処理)する際に適合した中間データ(ディスプレイリストデータ)にまで変換できれば良いからである。
また、実施形態では、マスタプリンタのレンダリング順序を昇順、スレーブプリンタのそれを降順とする例を説明したが、逆でも構わない。
また、一方のプリンタから他方のプリンタにレンダリングデータを転送する場合には、その転送前に圧縮符号化処理を行なうようにしても良い。この場合の圧縮符号化は当然可逆符号化が望ましい。
以上説明したように、本実施形態によれば、クラスタプリントを行なう場合、各プリンタに割り当てられたページ数の印刷が完了するタイミングの差を最小限にすることが可能になる。
なお、上記実施形態では、各画像形成装置200、220、230のプリンタ部の単位時間当たりの印刷枚数(印刷速度)は同じであるものとして説明した。しかし、マスタの印刷速度を“1”としたとき、スレーブプリンタのそれが“2”の場合には、マスタプリンタで印刷するページ数と、スレーブプリンタで印刷するページ数の比を1:2となるようにすればよい。すなわち、全ページ数をPmaxとしたとき、マスタプリンタはPmax/3のページ数分のレンダリングデータを持ち、スレーブプリンタはPmax×2/3のページ数分のレンダリングデータを持つように処理すればよい。これを実現するには、ジョブチケットに、マスタプリンタとスレーブプリンタのプリンタ部の速度比、或いは、それぞれのプリンタで印刷すべきページ数を記述する。スレーブプリンタもこの速度比や配分数を知る必要がある。このためには、マスタプリンタからスレーブプリンタにディスプレイリストデータを転送する際に、その速度比や配分数に関する情報を記述すれば良いであろう。
<第2の実施形態>
上記実施形態(第1の実施形態)による印刷システムでは、生成した全ページ分のディスプレイリストデータをマスタープリンタからスレーブプリンタに転送することによりRIPの負荷分散を実行した。しかし、ディスプレイリストデータをページ毎に転送する方法によりRIPの負荷分散を図ることも可能である。この例を第2の実施形態として説明する。
詳細は、第1の実施形態で説明しているので、ここでは、マスタ、スレーブそれぞれの処理手順の概要を図12、図13のフローチャートに従って説明する。
先ず、本第2の実施形態におけるマスタープリンタの処理手順を図12のフローチャートに従って説明する。同図のフローチャートに示されるプログラムは図5のJob Manager 1520とPrint Manager1526によって実行されるものである。また、第1の実施形態で説明したように、クラスタプリントを行うか否かの指示、及びクラスタプリントを行う場合の従プリンタの指定はJob Ticketにより行われる。Job Ticket Parser1531で解釈された結果がControl API 1519を介してJob Manager1520に通知される。
まず、ステップS51乃至S53のループ処理を実行する。このループ処理では、PostScriptインタプリタを起動し1ページ分のページ解釈を行い、生成されたディスプレイリストデータをスレーブプリンタに転送する処理を、先頭ページから最終ページまで繰り返す。なお転送したディスプレイリストデータは破棄せずにマスタープリンタ上のHDDにスプールする。また、ステップS53迄はJob Manager1520によって実行される。
次にステップS54乃至S58のループ処理を行なう。ここでは、1ページ分のディスプレイリストからレンダリングの処理と、レンダリング中のページ番号のスレーブプリンタへの通知処理を、最終ページから先頭ページに向かって繰り返し行なう。また、レンダリング処理中に、次にレンダリングすべきページがスレーブプリンタでレンダリング処理中であるか否かを判断し、次ページがスレーブプリンタで処理中であると判断したら、このループから抜ける。
なお、スレーブプリンタでレンダリングが開始されているかどうかの確認は第1の実施形態と同様、スレーブプリンタとのネットワークを介したメッセージ通信により行われる。
さて、ステップS59に処理が進むと、マスタプリンタとスレーブプリンタのレンダリングしたページ数が実質的に等しいか否かを判断する。この判定は、第1の実施形態のステップS12、S31と同様である。等しいと判断した場合には、ステップS63に進んで、HDDに格納されたレンダリング済みのデータに基づき、その先頭のページから印刷処理を行なう。より詳しくは、印刷ジョブの全100ページの場合、HDDにはページ51以降のレンダリング済みデータが格納されているので、ページ51、52、…の順に印刷することになる。
ステップS59で、マスタ、スレーブプリンタそれぞれのレンダリングしたページ数が異なると判断した場合には、ステップS60に進む。このステップS60では、マスタープリンタでレンダリングしたページ数が全ページの半分を超えるかどうか判断する。この判断がYesの場合には、ステップS61に進み、NoであればステップS62に進む。
ステップS61に処理が進んだ場合には、印刷ジョブの全ページの半分を超えたページ分のレンダリング済みのイメージデータをスレーブプリンタに転送する。第2の実施形態におけるマスタプリンタの各ページのレンダリング順序は、降順である。従って、印刷ジョブのページ数が100ページであり、マスタプリンタで45ページ目までレンダリングしている場合は、ページ45、46、47、48、49、50のレンダリング結果をスレーブプリンタに送信する。
また、ステップS62に進んだ場合には、印刷ジョブの全ページの半分となるための不足分のレンダリング済みのイメージデータがスレーブプリンタより送られてくるので、それを受信する。印刷ジョブのページ数が100ページであり、マスタプリンタで55ページ目までレンダリングしている場合は、ページ51、52、53、54のレンダリング結果をスレーブプリンタから受信し、HDDに格納する。
このステップS61、S62の処理の結果、少なくともマスタプリンタのHDDには、印刷ジョブで示される全ページ中の後半部分のページのレンダリングデータが格納されていることになる。従って、ステップS63に進み、後半のページを昇順に印刷する。
なお、ステップS54からステップS63の処理はPrint Manager1526によって実行されるものである。また、ステップS59ではマスタ、スレーブプリンタのレンダリングしたページ数が等しいか否か、ステップS60ではレンダリング済みのページ数が半分に達したか否かを調べるものであった。これは、マスタープリンタとスレーブプリンタのプリンタエンジンの出力速度が同速である場合を仮定しているためである。マスタープリンタとスレーブプリンタのエンジン速度が異なる場合には、それら2つのプリンタのエンジン速度比に応じてレンダリングページ数を変更すれば良い。
次に図14を用いて、本第2の実施形態におけるスレーブプリンタの処理手順を説明する。同図のフローチャートに示されるプログラムは図5のPrint Manager1526によって実行されるものである。また、クラスタプリントのスレーブプリンタとしての動作指示はJob Ticketにより行われ、Job Ticket Parser1531で解釈された結果がControl API1519を介してJob Manager1520、PrintManager1526と通知される。
先ず、ステップS71乃至S75のループ処理では、マスタプリンタより受信したディスプレイリストデータに従ったレンダリング処理、レンダリング中のページ番号のマスタプリンタへの通知処理を繰り返す。マスタプリンタからは、先頭ページから後方に向かってディスプレイリストデータが転送されてくるので、レンダリング順序はページ1、2、…と昇順となる。また、このループ処理では、スレーブプリンタが次にレンダリングしようとしているページが、マスタプリンタにてレンダリングを開始しているか否かを判断する処理も行なう。次にレンダリングしようとしているページがマスタプリンタでレンダリングを開始していると判断した場合、或いは、最終ページまでレンダリングを行なった場合にはこのループ処理から抜ける。
なお、マスタープリンタでレンダリングが開始されているかどうかの確認はマスタープリンタとのネットワークを介したメッセージ通信により行われる。
ステップS71乃至S75のループ処理を抜けると、処理はステップS76に進む。ここでは、マスタプリンタとスレーブプリンタのレンダリングしたページ数が実質的に等しいか否かを判断する。この判定は、第1の実施形態のステップS12、S31と同様である。等しいと判断した場合には、ステップS80に進んで、HDDに格納されたレンダリング済みのデータに基づき、その先頭のページから印刷処理を行なう。より詳しくは、印刷ジョブの全100ページの場合、HDDにはページ1、2…50のレンダリング済みデータが格納されているので、ページ1、2、…の順に印刷することになる。
また、ステップS76で、マスタ、スレーブプリンタそれぞれのレンダリングしたページ数が異なると判断した場合には、ステップS77に進む。このステップS77では、スレーブプリンタでレンダリングしたページ数が全ページの半分を超えるかどうか判断する。この判断がNoの場合には、ステップS78に進み、YesであればステップS79に進む。
ステップS78に処理は進んだ場合には、スレーブプリンタが有するレンダリング結果が、印刷ジョブの全ページの半分に満たないことを意味する。その不足分のレンダリング済みのイメージデータがマスタプリンタより送られてくるので、それを受信する。印刷ジョブのページ数が100ページであり、スレーブプリンタが45ページ目までレンダリングしている場合は、ページ46、47、48、49、50のレンダリング結果をマスタプリンタから受信し、HDDに格納する。
ステップS79に処理が進んだ場合には、印刷ジョブの全ページの半分を超えたページ分のレンダリング済みのイメージデータをマスタプリンタに転送する。第2の実施形態におけるマスタプリンタの各ページのレンダリング順序は、降順である。従って、印刷ジョブのページ数が100ページであり、マスタプリンタで55ページ目までレンダリングしている場合は、ページ51、52、53、54のレンダリング結果をマスタプリンタに送信する。
このステップS78、S79の処理の結果、少なくともスレーブプリンタのHDDには、印刷ジョブで示される全ページ中の前半部分のページのレンダリングデータが格納されていることになる。従って、ステップS80に進み、前半のページを昇順に印刷する。
このように、マスタープリンタで解釈を実行し生成されたディスプレイリストデータをページ毎にスレーブプリンタに転送しレンダリングを行うことにより、マスタープリンタとスレーブプリンタによるパイプライン処理が可能となる。また、マスタープリンタでページ解釈が終了した後にはマスタープリンタも最終ページからレンダリングを開始する。従って、2つのプリンタでレンダリングするページ番号が連続したろことで、それぞれのレンダリング処理が終了することによりさらに効率的にRIPの負荷分散が行える。また、さらにRIP済みのイメージデータの配分を調整することにより、印刷の負荷分散も効率的に行うことができる。
図15は図13および図14のフローチャートにより説明したクラスタプリントを実行した際のシーケンス例である。この例では、マスタープリンタのページ解釈処理とスレーブプリンタのレンダリング処理が並列実行する状態となる。図示では、6ページ中の5ページ目までをスレーブプリンタでRIP処理を行っている。最後の6ページ目に関してはマスタープリンタでRIP処理を行い、4ページ目と5ページ目のRIP済みイメージをスレーブプリンタからマスタープリンタへ転送している。これにより印刷ページ数をマスタープリンタ、スレーブプリンタともに3ページに揃え印刷の負荷分散を実行している。説明の都合上、数ページのプリンタデータを例に説明しているが、数千ページのプリンタデータではさらに大きな効果がもたらされることが明らかである。
<第3の実施形態>
第1の実施形態による印刷システムでは、生成した全ページ分のディスプレイリストデータをマスタープリンタからスレーブプリンタに転送することによりRIPの負荷分散を実行した。ページ独立なPDL(ページ記述言語)であれば、そのPDLデータを転送する方法によりRIPの負荷分散を図ることも可能である。これを第3の実施形態として説明する。なお、第3の実施形態では、ページ独立なPDLデータの代表としてPDFを例にして説明する。
図16を用いて、本第3の実施形態におけるマスタープリンタの処理手順を説明する。同図のフローチャートに示されるプログラムは図5のJob Manager 1520とPrint Manager1526によって実行されるものである。また、クラスタプリントを行うか否かの指示、及びクラスタプリントを行う場合の従プリンタの指定はJob Ticketにより行われ、Job Ticket Parser1531で解釈された結果がControl API 1519を介してJob Manager1520に通知される。
まず、ステップS91では、受信したPDFデータをスレーブプリンタに転送する。転送したPDFデータはマスタープリンタのHDD上から削除されずに、そのまま残る。
次いでステップS92乃至S96のループ処理を実行する。このループ処理では、PDFインタプリタによる1ページ分の解釈してディスプレイリストデータの生成と、レンダリングを連続して実行する。この処理を先頭ページから後方ページに向かって順次行なう。また、このループ処理中、解釈及びレンダリング中のページ番号のスレーブプリンタへの通知処理を行なう。更に、レンダリング処理中に、次にレンダリングすべきページがスレーブプリンタでレンダリング処理中であるか否かを判断し、次ページがスレーブプリンタで処理中であると判断したら、このループから抜ける。また、マスタプリンタでのレンダリング処理したページが最終ページであった場合も、この処理を抜ける。
なお、PDFインタプリンタの処理に関しては、図6を用いて説明したPostScriptインタプリタの処理と言語処理部の処理が異なる程度でそれほど大きな違いは無いため、その説明は省略する。
ステップS92乃至S96のループを抜けると、処理はステップS97に進む。ここでは、マスタプリンタとスレーブプリンタのレンダリングしたページ数が実質的に等しいか否かを判断する。この判定は、第1の実施形態のステップS12、S31と同様である。等しいと判断した場合には、ステップS101に進んで、HDDに格納されたレンダリング済みのデータに基づき、その先頭のページから印刷処理を行なう。より詳しくは、印刷ジョブの全100ページの場合、HDDにはページ1、2…50のレンダリング済みデータが格納されているので、ページ1、2、…の順に印刷することになる。
また、ステップS97で、マスタ、スレーブプリンタそれぞれのレンダリングしたページ数が異なると判断した場合には、ステップS98に進む。このステップS98では、マスタプリンタでレンダリングしたページ数が全ページの半分を超えるかどうか判断する。この判断がNoの場合には、ステップS99に進み、YesであればステップS100に進む。
ステップS99に処理は進んだ場合には、マスタプリンタが有するレンダリング結果が、印刷ジョブの全ページの半分に満たないことを意味する。その不足分のレンダリング済みのイメージデータがスレーブプリンタより送られてくるので、それを受信する。印刷ジョブのページ数が100ページであり、スレーブプリンタが45ページ目までレンダリングしている場合は、ページ46、47、48、49、50のレンダリング結果をスレーブプリンタから受信し、HDDに格納する。
また、ステップS100に処理が進んだ場合には、印刷ジョブの全ページの半分を超えたページ分のレンダリング済みのイメージデータをスレーブプリンタに転送する。スレーブプリンタの各ページのレンダリング順序は、降順である。従って、印刷ジョブのページ数が100ページであり、マスタプリンタが55ページ目までレンダリングしている場合は、ページ51、52、53、54のレンダリング結果をスレーブプリンタに送信する。
このステップS99、100の処理の結果、少なくともマスタプリンタのHDDには、印刷ジョブで示される全ページ中の前半部分のページのレンダリングデータが格納されていることになる。従って、ステップS101進み、前半のページを昇順に印刷する。
なお、ステップS97はマスタ、スレーブプリンタのレンダリングしたページ数が等しいか否か、ステップS98はレンダリング済みのページ数が半分に達したか否かを調べるものであった。これは、マスタープリンタとスレーブプリンタのプリンタエンジンの出力速度が同速である場合を仮定しているためである。マスタープリンタとスレーブプリンタのエンジン速度が異なる場合には、それら2つのプリンタのエンジン速度比に応じてレンダリングページ数を変更すれば良い。
次に図17を用いて、本第3の実施形態におけるスレーブプリンタの処理手順を説明する。同図のフローチャートに示されるプログラムは図5のJob Manager 1520とPrint Manager1526によって実行されるものである。また、クラスタプリントのスレーブプリンタとしての動作指示はJob Ticketにより行われる。Job Ticket Parser1531で解釈された結果がControl API 1519を介してJob Manager1520、PrintManager1526と通知される。
先ず、ステップS111乃至S115のループ処理では、マスタプリンタより受信したPDFデータに従ったページ解釈、及び、レンダリング処理をページ単位に行なう。このときの処理順序は、最終ページから先頭ページに向かう降順である。また、レンダリング中のページ番号のマスタプリンタへの通知処理もこのループで行なう。また、マスタプリンタからは、スレーブプリンタが次にレンダリングしようとしているページが、マスタプリンタにてレンダリングを開始しているか否かを判断する処理も行なう。次にレンダリングしようとしているページがマスタプリンタでレンダリングを開始していると判断した場合、或いは、先頭ページまでレンダリングを行なった場合にはこのループ処理から抜ける。
ステップS111乃至S115の処理を抜けると、ステップS116の処理を実行する。このステップS116では、マスタプリンタとスレーブプリンタのレンダリングしたページ数が実質的に等しいか否かを判断する。この判定は、第1の実施形態のステップS12、S31と同様である。等しいと判断した場合には、ステップS120に進んで、HDDに格納されたレンダリング済みのデータに基づき、その先頭のページから印刷処理を行なう。より詳しくは、印刷ジョブの全100ページの場合、HDDにはページ51、52…100のレンダリング済みデータが格納されているので、ページ51、52、…の順に印刷することになる。
また、ステップS116において、マスタ、スレーブプリンタそれぞれのレンダリングしたページ数が異なると判断した場合には、ステップS117に進む。このステップS117では、スレーブプリンタでレンダリングしたページ数が全ページの半分を超えるかどうか判断する。この判断がNoの場合には、ステップS118に進み、YesであればステップS119に進む。
ステップS118に処理は進んだ場合には、スレーブプリンタが有するレンダリング結果が、印刷ジョブの全ページの半分に満たないことを意味する。その不足分のレンダリング済みのイメージデータがマスタプリンタより送られてくるので、それを受信する。印刷ジョブのページ数が100ページであり、スレーブプリンタが55ページ目までレンダリングしている場合は、ページ51、52、53、54のレンダリング結果をマスタプリンタから受信し、HDDに格納する。
また、ステップS119に処理が進んだ場合には、印刷ジョブの全ページの半分を超えたページ分のレンダリング済みのイメージデータをマスタプリンタに転送する。マスタプリンタの各ページのレンダリング順序は、昇順である。従って、印刷ジョブのページ数が100ページであり、マスタプリンタが45ページ目までレンダリングしている場合は、ページ46、47、48、49、50のレンダリング結果をマスタプリンタに送信する。
このステップS118、119の処理の結果、少なくともスレーブプリンタのHDDには、印刷ジョブで示される全ページ中の後半部分のページのレンダリングデータが格納されていることになる。従って、ステップS120進み、後半のページを昇順に印刷する。
以上説明したように本第3の実施形態によれば、ページ毎に独立したPDLデータの場合には、レンダリングのみならず、ページ解釈処理についても負荷を2つのプリンタに分担させることが可能になり、効率的なクラスタプリントを行なうことが可能になる。
図18は、図16および図17のフローチャートにより説明したクラスタプリントを実行した際のシーケンスの例である。この例では、6ページ中の1ページ目と2ページ目のRIP処理が重たいため、マスタープリンタで前2ページのRIP処理を行い、スレーブプリンタで残りの4ページのRIP処理を行うことによりRIPの負荷分散を実行している。また、3ページ目のRIP済みイメージをスレーブプリンタからマスタープリンタへ転送することにより、印刷ページ数をマスタープリンタ、スレーブプリンタともに3ページに揃え印刷の負荷分散を実行している。説明の都合上、数ページのプリンタデータを例に説明しているが、数千ページのプリンタデータではさらに大きな効果がもたらされる。ページ解釈処理もマスタープリンタとスレーブプリンタで分散することができるため、第1の実施形態よりも効率的なRIPの負荷分散が可能である。また、第2の実施形態に比べて転送するイメージの数も少なくなる傾向があるので、最も効率的な負荷分散印刷が可能となる。
なお、第1、第2の実施形態ではページ記述言語としてPostScriptを例にしたが、他のページ記述言語でも構わない。なぜなら、これらの実施形態では、ページ記述言語とは独立した中間データ(ディスプレイリストデータ)に変換した結果を2つのプリンタが共有し、レンダリングを行なえば良いからである。また、第3の実施形態では、ページ独立言語としてPDFを例にしたが、ページ単位に独立している言語であれば良いので、PDFに限定されない。
<第4の実施形態>
上記第1乃至第3の実施形態では、2台の画像形成装置によりクラスタプリントを行なう例を説明したが、3台、或いはそれ以上でクラスタプリントを行なうようにしても構わない。説明を簡単にするため、第1の実施形態を適用し、3台のプリンタでクラスタプリントを行なうものとする。また、3台の画像形成装置が搭載しているプリンタ部の印刷能力(単位時間当たりの印刷枚数)が同じであるとする。
また、ホストコンピュータ2100は、ジョブチケットにスレーブプリンタA、Bとなる画像形成装置のネットワークアドレスを記述したジョブチケットをマスタとなる画像形成装置に出力するものとする。ここで、主従関係はマスタ、スレーブA、スレーブBの順番とする。つまり、スレーブプリンタAはマスタプリンタスのスレーブプリンタとして機能すると共に、スレーブプリンタBに対するマスタプリンタとして機能する。
マスタプリンタは、印刷ジョブのディスプレイリストデータを生成した際、スレーブプリンタB、Cにそれを転送する。以下はこの転送が完了した場合の各プリンタの動作である。
今、印刷ジョブによる全ページ数が99ページであるものとして説明する。
マスタプリンタは、図19に示すように、ページ1、2、3の順番(昇順)にレンダリングを行なう。そして、次にレンダリングするページ番号が、スレーブプリンタAでのレンダリングしているページ番号と一致するまで繰り返す。
スレーブプリンタBは、図19に示すように、ページ番号99、98、97、…の順番(降順)にレンダリングを行なう。そして、次にレンダリングするページ番号が、スレーブプリンタAでのレンダリングしているページ番号と一致するまで繰り返す。
マスタ、スレーブプリンタBとの中間に位置するスレーブプリンタAは、図19に示すように処理を行なう。具体的には次の通りである。
先ず、印刷ジョブの全ページの中央のページ番号「49」(=99/2の整数)を最初にレンダリングするとして決定する。そして、原則として次のような順番でレンダリングを行なう。
ページ49、50、48、51、47、52…
つまり、レンダリングするページ番号を、初期値「49」から始め、昇順と降順に交互に切り替えて行なう(昇順レンダリング用の変数iと、降順レンダリング用の変数Kを持つ)。降順レンダリングの工程で、次にレンダリングしようとするページ番号が、マスタプリンタがレンダリング中のページ番号と同じになったら、降順のレンダリングを終了する。また、昇順レンダリング工程で、次にレンダリングしようとするページ番号がスレーブプリンタBがレンダリング中のページ番号と同じになったら、昇順のレンダだリングを終了する。
以上の結果、3台のプリンタによって全ページのレンダリングが完了すると、[マスタ:スレーブプリンタA]間、及び、[スレーブプリンタA、B]間でのレンダリング結果の送受信を行なう。すなわち、マスタプリンタはページ番号1乃至33のレンダリング結果を保持し、スレーブプリンタAはページ番号34乃至66のレンダリング結果を保持し、スレーブプリンタはページ番号67乃至99のレンダリング結果を保持する。
この後の処理は、各プリンタでは、自身に割り当てられたページを昇順に印刷すればよい。
なお、上記の処理だけでは、3台のプリンタのレンダリングが同時に終了するとは限らない。例えば、マスタプリンタとスレーブプリンタAとの間で前半の50ページ分のレンダリングが完了したとき、スレーブプリンタAとB間での後半の50ページのレンダリングが未完の場合もあり得る。そこで、中間に位置するスレーブプリンタAは次のように処理を行なう。
スレーブプリンタAは、マスタ、スレーブプリンタBから、それぞれのレンダリングしているページの番号の通知を受けている。つまり、どちらのプリンタの進捗が遅いかを検出することができる。そこで、進捗の遅い方に併せて、レンダリングするページ番号を決定する。
具体的には、マスタプリンタとスレーブプリンタAとの間での未レンダリングページ数(NP1という)と、スレーブプリンタAとBとの間での未レンダリングページ数(NP2という)との差を求める。そして、その差の絶対値(=|NP1−NP2|)が、予め定められた閾値以下の場合、上記のように、昇順、降順のレンダリング処理を繰り返す。
一方、|NP1−NP2|が閾値を超える場合、進捗の遅い方を優先的にレンダリングを行なう。
例えば、NP1=10、NP2=20で、閾値が“3”とするなら、スレーブプリンタAは、昇順のレンダリング処理を優先する。そして、この判断処理とレンダリング順序を決定する処理、1ページのレンダリングを行なう毎に行なう。
以上の結果、各プリンタは実質的に同じタイミングでレンダリングを完了することになる。
この後は、マスタプリンタとスレーブプリンタAとの間では、2:1の割合でレンダリング結果を保持するように、互いに不足分のレンダリング結果を補う。一方、スレーブプリンタAとBとの間では、1:2の割合でレンダリング結果を保持するように、互いに不足分のレンダリング結果を補う。
以上説明したように本第4の実施形態によれば、3台でのプリンタでクラスタプリントを行なうことが可能になる。なお、4台以上のプリンタでクラスタプリントを行なう場合、すなわち、マスタ、スレーブA,B,Cで印刷を行なう場合、各プリンタで印刷されるページ数が全ページ数の1/4となる。また、スレーブプリンタA,Bが中間に位置するプリンタとして機能するだけであるので、説明するまでもないであろう。
なお、第4の実施形態では、第1の実施形態に適用する例を説明したが、第2、第3の実施形態に適用しても構わないのは、上記説明から容易に理解できよう。
以上本発明に係る実施形態を説明した。上記実施形態では、レンダリング結果を受けて印刷する場合、各プリンタでは、自身に割り当てられたページ範囲の先頭から印刷するものとして説明した。しかし、これによって本発明が限定されるものではない。画像形成装置に接続されたフィニッシャ装置がフェースダウン排出機能を持たない場合、各プリンタでは、自身に割り当てられたページ範囲の最終ページから降順に排出することが望ましい。