(57)【要約】      （修正有）【課題】複数部数の印刷を行うに際し、二部目以降の処理を効率よく行えるようにする。【解決手段】一部目の印刷処理時に、利用可能な記憶容量を元に、ページ単位で、プリントコマンド２０７を保存するページの間隔が可能な限り均等になるようにプリントコマンド２０７を保存する。そして、二部目の印刷処理時に、記憶してあるプリントコマンド２０７については、それを再利用してプリンタに転送し、記憶していないプリントコマンド２０７については、再度生成する。このとき、プリントコマンド２０７の転送と生成とを並列して行うようにする。【選択図】図３
2010033284.tif 000002
【特許請求の範囲】
【請求項１】
記憶領域を有し、複数のページ及び複数部を指定する印刷要求に基づくプリンタでの印刷に用いるプリントコマンドを供給する印刷システムにおける印刷制御方法であって、
前記印刷要求に基づきプリントコマンドを生成する生成工程と、
前記プリンタにおけるページ単位の目安の印刷時間である想定印刷時間を取得する取得工程と、
前記生成工程におけるページ単位のプリントコマンドの生成時間を測定する測定工程と、
前記取得工程で取得した想定印刷時間と、前記測定工程で測定した生成時間とを用いて前記記憶領域に記憶すべき前記プリントコマンドをページ単位で決定する第１の決定工程と、
前記第１の決定工程で決定されたページのプリントコマンドとは異なるページのプリントコマンドを、前記記憶領域に記憶すべきページのプリントコマンドとして決定する第２の決定工程と、
前記第１の決定工程及び前記第２の決定工程で決定したページのプリントコマンドを前記記憶領域に記憶する記憶工程と、
前記プリントコマンドを前記プリンタに対して供給する供給工程とを有し、
前記生成工程におけるプリントコマンドの生成と、前記供給工程におけるプリントコマンドのプリンタに対する供給を並行に処理し、
二部目のプリンタに対するプリントコマンドの供給において、前記記憶工程で記憶したページのプリントコマンドが存在する場合には前記生成工程における当該ページのプリントコマンドの生成を行わず、前記供給工程において当該記憶されたプリントコマンドをプリンタに対して供給することを特徴とする印刷制御方法。
【請求項２】
前記記憶工程で記憶されるプリントコマンドのサイズの合計が、前記記憶領域においてプリントコマンドを記憶するための記憶容量以内に調整する調整工程を有することを特徴とする請求項１に記載の印刷制御方法。
【請求項３】
前記調整工程においては、前記第１の決定工程及び前記第２の決定工程で決定されたページのプリントコマンドのサイズの合計が、前記記憶領域においてプリントコマンドを記憶するための記憶容量を越えた場合に、前記第１の決定工程で決定されたページのプリントコマンドを優先的に前記記憶領域に記憶されるように調整することを特徴とする請求項２に記載の印刷制御方法。
【請求項４】
前記取得工程においては、プリンタでの印刷モードに基づき処理時間を返却するようなルックアップテーブルを参照して前記想定印刷時間を取得することを特徴とする請求項１乃至３のいずれか１項に記載の印刷制御方法。
【請求項５】
前記取得工程においては、更にプリンタでの印刷における用紙サイズに基づき前記ルックアップテーブルを参照して前記想定印刷時間を取得することを特徴とする請求項４に記載の印刷制御方法。
【請求項６】
前記取得工程においては、プリンタに対するプリントコマンドの供給の状況を元に前記想定印刷時間を取得することを特徴とする請求項１乃至３のいずれか１項に記載の印刷制御方法。
【請求項７】
前記取得工程においては、プリンタから取得した情報を元に前記想定印刷時間を計算することを特徴とする請求項１乃至３のいずれか１項に記載の印刷制御方法。
【請求項８】
前記第１の決定工程は、各ページに対する前記プリントコマンドの生成時間と前記想定印刷時間とに基づき、前記生成工程でのプリントコマンドの生成が間に合わずに前記供給工程におけるプリントコマンドの供給が行なわれないと判断されるページのプリントコマンドを記憶すべきとして決定することを特徴とする請求項１乃至７のいずれか１項に記載の印刷制御方法。
【請求項９】
前記第２の決定工程は、前記第１の決定工程で決定されたページのプリントコマンドのサイズの合計が、前記記憶領域においてプリントコマンドを記憶するための記憶容量に満たなかった場合に、前記第１の決定工程で決定されたページのプリントコマンドとは異なるページのプリントコマンドを記憶すべきとして決定することを特徴とする請求項１に記載の印刷制御方法。
【請求項１０】
前記第２の決定工程は、前記第１の決定工程で決定されたページ以外のページのプリントコマンドを、予め定められたページ間隔で記憶すべきとして決定することを特徴とする請求項１に記載の印刷制御方法。
【請求項１１】
記憶領域を有し、複数のページ及び複数部を指定する印刷要求に基づくプリンタでの印刷に用いるプリントコマンドを供給する印刷システムにおける印刷制御方法であって、
前記印刷要求に基づきプリントコマンドを生成する生成工程と、
前記プリントコマンドを前記プリンタに対して供給する供給工程と、
前記生成工程におけるプリントコマンドの生成と前記供給工程におけるプリントコマンドのプリンタに対する供給とを並行に処理を行う際に、前記生成工程でのプリントコマンドの生成が間に合わずに前記供給工程におけるプリントコマンドの供給が行なわれないと判断されるページのプリントコマンドを記憶すべきとして決定する第１の決定工程と、
前記第１の決定工程で決定された記憶すべき前記プリントコマンドとは異なるページのプリントコマンドを、前記記憶領域に記憶すべきページのプリントコマンドとして決定する第２の決定工程と、
前記第１の決定工程及び前記第２の決定工程で決定したページのプリントコマンドを前記記憶領域に記憶する記憶工程とを有し、
二部目のプリンタに対するプリントコマンドの供給において、前記記憶工程で記憶したページのプリントコマンドが存在する場合には前記生成工程における当該ページのプリントコマンドの生成を行わず、前記供給工程において当該記憶されたプリントコマンドをプリンタに対して供給することを特徴とする印刷制御方法。
【請求項１２】
請求項１乃至１１のいずれか１項に記載の印刷制御方法をコンピュータに実行させることを特徴とするコンピュータプログラム。
【請求項１３】
記憶領域を有し、複数のページ及び複数部を指定する印刷要求に基づくプリンタでの印刷に用いるプリントコマンドを供給する印刷制御装置であって、
前記印刷要求に基づきプリントコマンドを生成する生成手段と、
前記プリンタにおけるページ単位の目安の印刷時間である想定印刷時間を取得する取得手段と、
前記生成手段によるページ単位のプリントコマンドの生成時間を測定する測定手段と、
前記取得手段により取得した想定印刷時間と、前記測定手段により測定した生成時間とを用いて前記記憶領域に記憶すべき前記プリントコマンドをページ単位で決定する第１の決定手段と、
前記第１の決定手段により決定されたページのプリントコマンドとは異なるページのプリントコマンドを、前記記憶領域に記憶すべきページのプリントコマンドとして決定する第２の決定手段と、
前記第１の決定手段及び前記第２の決定手段により決定したページのプリントコマンドを前記記憶領域に記憶する記憶手段と、
前記プリントコマンドを前記プリンタに対して供給する供給手段とを有し、
前記生成手段によるプリントコマンドの生成と、前記供給手段によるプリントコマンドのプリンタに対する供給を並行に処理し、
二部目のプリンタに対するプリントコマンドの供給において、前記記憶手段により記憶したページのプリントコマンドが存在する場合には前記生成手段による当該ページのプリントコマンドの生成を行わず、前記供給手段が当該記憶されたプリントコマンドをプリンタに対して供給することを特徴とする印刷制御装置。
【請求項１４】
前記記憶手段により記憶されるプリントコマンドのサイズの合計が、前記記憶領域においてプリントコマンドを記憶するための記憶容量以内に調整する調整手段を有することを特徴とする請求項１３に記載の印刷制御装置。
【請求項１５】
前記調整手段は、前記第１の決定手段及び前記第２の決定手段により決定されたページのプリントコマンドのサイズの合計が、前記記憶領域においてプリントコマンドを記憶するための記憶容量を越えた場合に、前記第１の決定手段により決定されたページのプリントコマンドを優先的に前記記憶領域に記憶されるように調整することを特徴とする請求項１４に記載の印刷制御装置。
【請求項１６】
前記取得手段は、プリンタでの印刷モードに基づき処理時間を返却するようなルックアップテーブルを参照して前記想定印刷時間を取得することを特徴とする請求項１３乃至１５のいずれか１項に記載の印刷制御装置。
【請求項１７】
前記取得手段は、更にプリンタでの印刷における用紙サイズに基づき前記ルックアップテーブルを参照して前記想定印刷時間を取得することを特徴とする請求項１６に記載の印刷制御装置。
【請求項１８】
前記取得手段は、プリンタに対するプリントコマンドの供給の状況を元に前記想定印刷時間を取得することを特徴とする請求項１３乃至１５のいずれか１項に記載の印刷制御装置。
【請求項１９】
前記取得手段は、プリンタから取得した情報を元に前記想定印刷時間を計算することを特徴とする請求項１３乃至１５のいずれか１項に記載の印刷制御装置。
【請求項２０】
前記第１の決定手段は、各ページに対する前記プリントコマンドの生成時間と前記想定印刷時間とに基づき、前記生成手段でのプリントコマンドの生成が間に合わずに前記供給手段によるプリントコマンドの供給が行なわれないと判断されるページのプリントコマンドを記憶すべきとして決定することを特徴とする請求項１３乃至１９のいずれか１項に記載の印刷制御装置。
【請求項２１】
前記第２の決定手段は、前記第１の決定手段により決定されたページのプリントコマンドのサイズの合計が、前記記憶領域においてプリントコマンドを記憶するための記憶容量に満たなかった場合に、前記第１の決定手段により決定されたページのプリントコマンドとは異なるページのプリントコマンドを記憶すべきとして決定することを特徴とする請求項１３に記載の印刷制御装置。
【請求項２２】
前記第２の決定手段は、前記第１の決定手段により決定されたページ以外のページのプリントコマンドを、予め定められたページ間隔で記憶すべきとして決定することを特徴とする請求項１３に記載の印刷制御装置。
【請求項２３】
記憶領域を有し、複数のページ及び複数部を指定する印刷要求に基づくプリンタでの印刷に用いるプリントコマンドを供給する印刷制御装置であって、
前記印刷要求に基づきプリントコマンドを生成する生成手段と、
前記プリントコマンドを前記プリンタに対して供給する供給手段と、
前記生成手段によるプリントコマンドの生成と前記供給手段によるプリントコマンドのプリンタに対する供給とを並行に処理を行う際に、前記生成手段でのプリントコマンドの生成が間に合わずに前記供給手段によるプリントコマンドの供給が行なわれないと判断されるページのプリントコマンドを記憶すべきとして決定する第１の決定手段と、
前記第１の決定手段により決定された記憶すべき前記プリントコマンドとは異なるページのプリントコマンドを、前記記憶領域に記憶すべきページのプリントコマンドとして決定する第２の決定手段と、
前記第１の決定手段及び前記第２の決定手段で決定したページのプリントコマンドを前記記憶領域に記憶する記憶手段とを有し、
二部目のプリンタに対するプリントコマンドの供給において、前記記憶手段で記憶したページのプリントコマンドが存在する場合には前記生成手段における当該ページのプリントコマンドの生成を行わず、前記供給手段において当該記憶されたプリントコマンドをプリンタに対して供給することを特徴とする印刷制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷制御装置、印刷制御方法、及びコンピュータプログラムに関し、特に、複数部数の印刷を行うために用いて好適なものである。
【背景技術】
【０００２】
従来から、同一ページを複数部印刷することが指定された印刷要求が生じた場合、プリンタが解釈可能な印刷データを生成し、生成した印刷データをハードディスク等の記憶領域に保存しておき、二部目以降では生成済みの印刷データを参照する技術が知られる。これにより、同一ページを印刷する場合には、印刷データを再度生成する処理を行う必要が無く、二部目以降の処理を高速に行える。一般的に、複数部の印刷を行う方法として、各ページを連続して複数部出力する方法と、ジョブ中のページ全体を部単位で複数部出力する方法が知られる。各ページを連続して複数部出力する方法では、例えば３ページを２部印刷する場合、１，１，２，２，３，３の順で各ページの印刷を行う。一方、ジョブ中のページ全体を部単位で複数部出力する方法では、例えば３ページを２部印刷する場合、１，２，３，１，２，３の順で各ページの印刷を行う。
【０００３】
前者の複数部印刷を行う場合、同一ページの印刷は必ず連続する。このため、印刷データを保存して参照する前記手法を適用する場合、保存すべき印刷データは最大で１ページ分である。一方、後者の複数部印刷を行う場合、二部目以降の印刷で、生成済みの印刷データを活用するためには、ジョブ中のページ数分の印刷データを保存する必要がある。よって、ジョブ中のページ数が多い場合、ホストコンピュータやプリンタの内部の記憶領域に、印刷データを全て格納しきれない場合がある。そのため、現在のページの印刷データを、記憶領域に保存可能であると判定した場合にのみ保存する技術が知られている（特許文献１を参照）。
【０００４】
【特許文献１】特開平６−２０２８２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、前述した従来の技術では、記憶領域に格納しきれなかった印刷データを二部目以降の処理で再度生成することと、記憶領域に格納した印刷データを転送することとを同一のプロセスで順次行うようにしていた。したがって、二部目以降の処理を効率よく行うことができなかった。
また、前述した従来の技術では、記憶領域に保存可能なだけ印刷データを保存した場合、ジョブの前半部分の印刷データを偏って保存することになり、必ずしも印刷データを効率的に保存できるわけではない。例えばジョブの後半部分に複雑なページがあり、当該ジョブの後半部分の印刷データを生成するための負荷が重い場合、当該ジョブの後半部分の印刷データを保存しておいた方が、二部目以降の処理の高速化、簡略化という観点から有効である。
本発明は、このような問題点に鑑みてなされたものであり、複数部数の印刷を行うに際し、二部目以降の処理を従来よりも効率よく行えるようにすることを目的とする。
【課題を解決するための手段】
【０００６】
本発明の印刷制御方法は、記憶領域を有し、複数のページ及び複数部を指定する印刷要求に基づくプリンタでの印刷に用いるプリントコマンドを供給する印刷システムにおける印刷制御方法であって、前記印刷要求に基づきプリントコマンドを生成する生成工程と、前記プリンタにおけるページ単位の目安の印刷時間である想定印刷時間を取得する取得工程と、前記生成工程におけるページ単位のプリントコマンドの生成時間を測定する測定工程と、前記取得工程で取得した想定印刷時間と、前記測定工程で測定した生成時間とを用いて前記記憶領域に記憶すべき前記プリントコマンドをページ単位で決定する第１の決定工程と、前記第１の決定工程で決定されたページのプリントコマンドとは異なるページのプリントコマンドを、前記記憶領域に記憶すべきページのプリントコマンドとして決定する第２の決定工程と、前記第１の決定工程及び前記第２の決定工程で決定したページのプリントコマンドを前記記憶領域に記憶する記憶工程と、前記プリントコマンドを前記プリンタに対して供給する供給工程とを有し、前記生成工程におけるプリントコマンドの生成と、前記供給工程におけるプリントコマンドのプリンタに対する供給を並行に処理し、二部目のプリンタに対するプリントコマンドの供給において、前記記憶工程で記憶したページのプリントコマンドが存在する場合には前記生成工程における当該ページのプリントコマンドの生成を行わず、前記供給工程において当該記憶されたプリントコマンドをプリンタに対して供給することを特徴とする。
また、本発明の印刷制御方法の他の態様では、記憶領域を有し、複数のページ及び複数部を指定する印刷要求に基づくプリンタでの印刷に用いるプリントコマンドを供給する印刷システムにおける印刷制御方法であって、前記印刷要求に基づきプリントコマンドを生成する生成工程と、前記プリントコマンドを前記プリンタに対して供給する供給工程と、前記生成工程におけるプリントコマンドの生成と前記供給工程におけるプリントコマンドのプリンタに対する供給とを並行に処理を行う際に、前記生成工程でのプリントコマンドの生成が間に合わずに前記供給工程におけるプリントコマンドの供給が行なわれないと判断されるページのプリントコマンドを記憶すべきとして決定する第１の決定工程と、前記第１の決定工程で決定された記憶すべき前記プリントコマンドとは異なるページのプリントコマンドを、前記記憶領域に記憶すべきページのプリントコマンドとして決定する第２の決定工程と、前記第１の決定工程及び前記第２の決定工程で決定したページのプリントコマンドを前記記憶領域に記憶する記憶工程とを有し、二部目のプリンタに対するプリントコマンドの供給において、前記記憶工程で記憶したページのプリントコマンドが存在する場合には前記生成工程における当該ページのプリントコマンドの生成を行わず、前記供給工程において当該記憶されたプリントコマンドをプリンタに対して供給することを特徴とする。
【０００７】
本発明の印刷制御装置は、記憶領域を有し、複数のページ及び複数部を指定する印刷要求に基づくプリンタでの印刷に用いるプリントコマンドを供給する印刷制御装置であって、前記印刷要求に基づきプリントコマンドを生成する生成手段と、前記プリンタにおけるページ単位の目安の印刷時間である想定印刷時間を取得する取得手段と、前記生成手段によるページ単位のプリントコマンドの生成時間を測定する測定手段と、前記取得手段により取得した想定印刷時間と、前記測定手段により測定した生成時間とを用いて前記記憶領域に記憶すべき前記プリントコマンドをページ単位で決定する第１の決定手段と、前記第１の決定手段により決定されたページのプリントコマンドとは異なるページのプリントコマンドを、前記記憶領域に記憶すべきページのプリントコマンドとして決定する第２の決定手段と、前記第１の決定手段及び前記第２の決定手段により決定したページのプリントコマンドを前記記憶領域に記憶する記憶手段と、前記プリントコマンドを前記プリンタに対して供給する供給手段とを有し、前記生成手段によるプリントコマンドの生成と、前記供給手段によるプリントコマンドのプリンタに対する供給を並行に処理し、二部目のプリンタに対するプリントコマンドの供給において、前記記憶手段により記憶したページのプリントコマンドが存在する場合には前記生成手段による当該ページのプリントコマンドの生成を行わず、前記供給手段が当該記憶されたプリントコマンドをプリンタに対して供給することを特徴とする。
また、本発明の印刷制御装置の他の態様では、記憶領域を有し、複数のページ及び複数部を指定する印刷要求に基づくプリンタでの印刷に用いるプリントコマンドを供給する印刷制御装置であって、前記印刷要求に基づきプリントコマンドを生成する生成手段と、前記プリントコマンドを前記プリンタに対して供給する供給手段と、前記生成手段によるプリントコマンドの生成と前記供給手段によるプリントコマンドのプリンタに対する供給とを並行に処理を行う際に、前記生成手段でのプリントコマンドの生成が間に合わずに前記供給手段によるプリントコマンドの供給が行なわれないと判断されるページのプリントコマンドを記憶すべきとして決定する第１の決定手段と、前記第１の決定手段により決定された記憶すべき前記プリントコマンドとは異なるページのプリントコマンドを、前記記憶領域に記憶すべきページのプリントコマンドとして決定する第２の決定手段と、前記第１の決定手段及び前記第２の決定手段で決定したページのプリントコマンドを前記記憶領域に記憶する記憶手段とを有し、二部目のプリンタに対するプリントコマンドの供給において、前記記憶手段で記憶したページのプリントコマンドが存在する場合には前記生成手段における当該ページのプリントコマンドの生成を行わず、前記供給手段において当該記憶されたプリントコマンドをプリンタに対して供給することを特徴とする。
【０００８】
本発明のコンピュータプログラムは、印刷制御方法をコンピュータに実行させることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、二部目以降の処理を従来よりも効率よく行うことができる。
【発明を実施するための最良の形態】
【００１０】
以下、図面を参照して本発明の好適な実施の形態を詳しく説明する。尚、以下の各実施形態は特許請求の範囲に記載の本発明を限定するものでなく、また、以下の各実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
＜第１の実施形態＞
図１は、印刷システムのハードウェア構成の一例を示すブロック図である。
図１において、ＣＲＴ表示装置１０１は、プリンタドライバが提供する印刷設定ダイアログやプリンタステータス情報等を表示する。ＣＲＴＣ１０２は、表示装置用のコントローラである。ＫＢ１０３は、キーボード等のデータ入力装置であり、ＫＢＣ１０４は、キーボードコントローラである。ＰＤ１０５は、ポインティングデバイス等の座標入力装置であり、ＰＤＣ１０６は、ポインティングデバイスコントローラである。ＣＰＵ１０７は、ホストコンピュータ装置１００全体の制御を司る。
【００１１】
ＲＯＭ１０８は、ブートプログラム等を記憶している。ＲＡＭ１０９は、ＯＳ、各アプリケーションプログラム、プリンタドライバプログラム等を格納したり、ワークエリアとしても利用されたりする。ＨＤＤ１１０は、ＯＳ、各アプリケーションプログラム、プリンタドライバプログラム、フォントデータ等を記憶している。更にＨＤＤ１１０は、スプールファイル等を一時的に記憶する。ＨＤＣ１１１は、ハードディスクコントローラである。ＦＤＤ１１２は、可搬性の記憶媒体の駆動装置であるフレキシブルディスクドライブであり、ＦＤＣ１１３は、フレキシブルディスクコントローラである。Ｉ／Ｆ１１４は、インターフェースであり、インターフェースケーブルを介してインクジェットプリンタ等のプリンタ（ＰＲ）１１５に接続される。バス１１６は、各デバイスを相互に接続するためのものである。
【００１２】
ホストコンピュータ装置１００に電源が投入されると、ＣＰＵ１０７は、ＲＯＭ１０８に格納されているブートプログラムに従って起動する。そうすると、ＣＰＵ１０７は、ＨＤＤ１１０からＯＳをロードし、ユーザの操作待ち状態になる。そして、ＫＢ１０３又はＰＤ１０５からアプリケーションを介して、ユーザからの指示（印刷指示やプリンタドライバの印刷設定変更指示）を受けた場合、ＨＤＤ１１０に格納されているプリンタドライバプログラムがＲＡＭ１０９にロードされ実行される。また、プリンタプログラムが自動的に起動するように設定されている場合には、ユーザからの指示によらずに、ＨＤＤ１１０に格納されているプリンタドライバプログラムがＲＡＭ１０９にロードされ実行される。
【００１３】
図２は、印刷システムの機能的な構成の一例を示す図である。図２では、ＯＳの印刷サポート機能とプリンタドライバとを中心に、印刷システムの機能の一例を概念的に示している。尚、以下では、Ｍｉｃｒｏｓｏｆｔ社が開発したオープン規格の電子文書フォーマットの一つであるＸＭＬ  Ｐａｐｅｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎをスプールファイルとする印刷システムを例に挙げて説明する。また、以下の説明では、ＸＭＬ  Ｐａｐｅｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎを、必要に応じてＸＰＳと称し、ＸＰＳをスプールファイルとするようなプリンタドライバを、必要に応じてＸＰＳＤｒｖと称する。
図２において、フィルターパイプライン２０４は、各ページのＸＰＳデータをレイアウト処理する機能を含むレイアウトフィルター２０５と、ＸＰＳデータをプリンタ１１５が解釈可能なプリントコマンドに変換する機能を含むレンダーフィルター２０６を有する。ＸＰＳＤｒｖにおいては、スプールファイルは９６ｄｐｉ単位で描画が記載されるＸＰＳ文書となる。
ここでフィルターとは、一般的に、入力されたデータをもとに、加工、変換、無変換、生成等の工程を行って、何らかのデータを出力する機能を有するプログラムのことを称する。
【００１４】
図２における印刷システムでは、アプリケーション２００が作成した文書の各ページの印刷データは、ＯＳの印刷サポート機能（ＭＸＤＷ）２０１を通じてＸＰＳスプールファイル２０３として一時的に蓄えられる。プリンタドライバのフィルターパイプライン２０４は、ＸＰＳスプールファイル２０３として一時的に蓄えられた印刷データを、プリンタ１１５で解釈可能なプリントコマンドに変換してプリンタ１１５に供給する。プリンタ１１５は、供給されたプリンタコマンドを使って印刷する。
【００１５】
ユーザインタフェースモジュール２０２は、一般に、印刷に使用する用紙サイズや印刷方向、その他の属性を印刷設定項目として設定する機能を提供する。ユーザインタフェースモジュール２０２は、複数の印刷設定項目の設定値が格納された印刷設定情報（ＤＥＶＭＯＤＥ）をアプリケーション２００に返却する。
アプリケーション２００は、文書を作成するものである。アプリケーション２００は、作成した任意の文書の印刷にあたり、ＭＸＤＷ２０１に対して、印刷開始や印刷終了を通知する。また、アプリケーション２００は、ＭＸＤＷ２０１に対して、印刷設定を行うためにユーザインタフェースモジュール２０２から返却された印刷設定情報を通知したり、文書の各ページの描画開始や描画終了を通知したりする。ＭＸＤＷ２０１は、アプリケーション２００が描画した内容や印刷設定情報をＸＰＳスプールファイル２０３に変換し、格納する。
尚、アプリケーション２００の構成によっては、ＭＸＤＷ２０１を介さずに、ＸＰＳスプールファイル２０３を直接生成することも可能である。
【００１６】
フィルターパイプライン２０４は、任意の個数のフィルターで構成されている。フィルターパイプライン２０４は、印刷設定情報と印刷データ（ＸＰＳデータ）を、ＸＰＳスプールファイル２０３から印刷時に読み出す。そして、フィルターパイプライン２０４は、読み出した情報を、プリンタ１１５が解釈可能なプリントコマンドに変換してプリンタ１１５に供給し、印刷の実行を指示する。
フィルターパイプライン２０４に含まれる各フィルターは、スプールされた印刷ジョブをデスプールする際に、フィルターパイプライン２０４から呼び出される。スプールされたＸＰＳデータは、そのままフィルターパイプライン２０４の各フィルターを通過して、その内容が編集されたり、プリンタドライバ独自のデータ形式に変換されたりして、最終的にプリンタ１１５が解釈可能なプリントコマンドに変換される。
印刷ジョブのＸＰＳデータを全て処理し終えた場合、又は、印刷ジョブがキャンセルされた場合、フィルターパイプライン２０４の各フィルターは動作を終了する。
【００１７】
前述したように本実施形態におけるフィルターパイプライン２０４は、レイアウト処理部であるレイアウトフィルター２０５と、プリントコマンド変換部であるレンダーフィルター２０６とを有する。
レイアウトフィルター２０５は、ＸＰＳスプールファイル２０３として格納されたＸＰＳデータを入力し、印刷設定情報に基づいて、入力したＸＰＳデータ（ページ）のレイアウト処理を行う。そして、レイアウトフィルター２０５は、レイアウト済みのＸＰＳデータを出力する。
レンダーフィルター２０６は、レイアウトフィルター２０５から出力されたＸＰＳデータを入力し、印刷設定情報に従い、入力したＸＰＳデータをプリンタ１１５が解釈可能なプリントコマンドに変換して出力する。本実施形態においては、レンダーフィルター２０６は、プリントコマンドを生成する際に、入力したＸＰＳデータを一度イメージデータに変換する。レンダーフィルター２０６は、色空間の変換や二値化等の画像処理が行われたイメージデータを、プリンタ１１５が解釈可能なプリントコマンドに変換する。ページプリンタに代表される高機能なプリンタでは、当該プリンタが解釈できるプリントコマンドの種類にＸＰＳが含まれていることがある。このようなプリンタを用いる場合には、レンダーフィルター２０６の代わりに、入力したＸＰＳデータを編集し、編集したＸＰＳデータを出力するようなフィルターを持つ構成となる。また、ＸＰＳデータを編集する必要がなければ、そのようなフィルター自体が不要となる。
出力デバイスであるプリンタ１１５は、フィルターパイプライン２０４で生成されたプリントコマンドを解釈し、可視画像を印刷用紙に対して形成する。
【００１８】
図２に示したＸＰＳＤｒｖでは、ＸＰＳスプールファイル２０３が生成されるまではアプリケーション２００のプロセスで処理が実行される。フィルターパイプライン２０４により実行される各フィルターの処理は、フィルターパイプライン２０４のプロセスで実行される。レンダーフィルター２０６がＯＳのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を用いて転送処理したプリントコマンド２０７は、フィルターパイプライン２０４のプロセス上では一旦外部ファイルに保存される。その後、フィルターパイプライン２０４のプロセス上の異なるスレッドから転送依頼されたプリントコマンド２０７は、印刷システムのスプーラーのプロセスからプリンタ１１５に送信される。
このように、ＸＰＳＤｒｖにおける印刷システムでは、プリントコマンド２０７の生成と、プリンタ１１５への転送とが異なるプロセスで動作する。すなわち、プリントコマンド２０７の生成と転送は並列で（並行して）動作することが可能である。例えばレンダーフィルター２０６は、プリンタ１１５が特定のページを印刷中であっても、そのページのプリントコマンド２０７の生成が完了していれば、次ページのプリントコマンド２０７の生成処理を開始することができる。
【００１９】
また、ＸＰＳＤｒｖ以外の印刷システムでは、プリントコマンド２０７の転送処理が、プリントコマンド２０７生成処理と異なるスレッドやプロセスで行われないようなケースが存在する。そのような印刷システムの一例として、Ｍｉｃｒｏｓｏｆｔ社の描画モジュールであるグラフィックデバイス・インターフェース（ＧＤＩ（Ｇｒａｐｈｉｃｓ  Ｄｅｖｉｃｅ  Ｉｎｔｅｒｆａｃｅ））を用いるような印刷システムが挙げられる。そのような印刷システムでは、プリンタドライバ内に、データの生成と転送とを別々のスレッドで行うような仕組みを明示的に設けることにより、プリントコマンド２０７の生成と転送とを並列に行うような構成を実現することが可能である。以後、図２のようなＸＰＳＤｒｖの印刷システムを前提とした実施形態を説明するが、それ以外の印刷システムでも、プリントコマンド２０７の生成と転送とを並列に行うことができれば、以後の動作を適用することができる。
【００２０】
次に、プリントコマンド２０７の生成と転送とを並列に行う場合の基本動作の具体例を説明する。ここでは、一例として、プリンタ１１５の１ページの印刷時間が１０秒、プリンタドライバによる１ページのプリントコマンド２０７の生成時間が１５秒であるとする。また、１ページ目のプリントコマンド２０７が生成済みであるとする。
プリントコマンド２０７の生成と転送とが並列に動作せず、ページ単位で動作する場合、１ページ目の印刷中に２ページ目の生成処理を行うことができない。その結果、２ページ目の印刷開始と共に２ページ目のプリントコマンド２０７を生成することになる。そのため、２ページ目のプリントコマンド２０７の生成時間が、プリンタ１１５の２ページ目の印刷時間に対し５秒間足りなくなる。一方、プリントコマンド２０７の生成と転送とが並列に動作する場合、１ページ目の印刷中に２ページ目のプリントコマンド２０７を生成することが可能である。したがって、２ページ目の印刷処理が半分終了した段階で３ページ目のプリントコマンド２０７の生成を開始すれば、３ページ目の印刷の終了と共に３ページ目のプリントコマンド２０７の生成も完了する計算となる。このように、プリントコマンド２０７の生成と転送とが並列で動作しない場合、全てのページのプリントコマンド２０７が保存済みであって初めてプリンタ１１５は全てのページを夫々１０秒で印刷することが可能である。それに対し、プリントコマンド２０７の生成と転送とが並列に動作する場合、３ページに１ページの割合でプリントコマンド２０７が生成済みであれば、プリンタ１１５は全てのページを夫々１０秒で印刷することが可能である。このように、一部のページのプリントコマンド２０７が生成済みで、それを利用して高速に印刷処理を行うことを考えた場合、プリントコマンド２０７の生成と転送とを並列に動作させることで、全体として高速な処理を行うことが可能になる。
【００２１】
プリントコマンド２０７の生成と転送とを並列に動作させる場合、生成済みのプリントコマンド２０７を一時的に記憶しておくＨＤＤ１１０等の記憶領域が必要である。生成と転送とを並列に動作させるプリントコマンド２０７のサイズが小さい場合、ＲＡＭ１０９を一時的な記憶領域として用いてもよい。前述した例で、更に全体でページ数が３０ページのジョブであったとする。前述した通り、プリンタ１１５の最高速度で全ページを印刷するためには、３ページに１ページの割合でプリントコマンド２０７を事前に生成しておく必要がある。ここで、ジョブ全体に対して均等になるようにプリントコマンド２０７を事前に生成する場合、事前に生成するページは１、４、７・・・となる。この場合、前述した通り、２ページ目の印刷が半分終了した段階で３ページ目のプリントコマンド２０７を作り始める。これらの動作から、生成と転送とを並列に動作させるために必要な記憶領域の容量は、プリントコマンド２０７の１ページ分のサイズとなる。一方、プリントコマンド２０７をジョブ全体に対して均等に事前に生成せず、先頭から１０ページ（１，２，３・・・）のプリントコマンド２０７を事前に生成したとする。この場合、１０ページ目の印刷が終了するタイミング（印刷開始から１００秒後）に、７ページ分のプリントコマンド２０７が略生成済みとなる。したがって、プリントコマンド２０７の生成と転送とを並列に行って、高速に処理を行うためには、最大で７ページ分のプリントコマンド２０７を格納可能な記憶領域が必要となる。
以上のように、ジョブ全体に対してできるだけ均等にプリントコマンド２０７を事前に生成することにより、プリントコマンド２０７の生成と転送との並列動作時に必要な記憶領域を小さくすることができる。
【００２２】
次に、複数部印刷の一例の概要について説明する。一般的に、複数部印刷には、各ページを連続して複数部出力する方法と、ジョブ中のページ全体を部単位で複数部出力する方法とが知られる。以下の説明では、これらのうち後者の複数部印刷方法を、必要に応じて、部単位の複数部印刷と称する。
図３は、部単位の複数部印刷時におけるレイアウトフィルター２０５及びレンダーフィルター２０６の動作の概要の一例を説明する図である。
フィルターパイプライン２０４から呼び出される各フィルターは、少なくとも、ＸＰＳスプールファイル２０３を入力し、プリンタ１１５が解釈可能なプリントコマンド２０７を出力することは前述した通りである。ここで、アプリケーション２００から、３ページのジョブを二部印刷することが指定された場合を例に挙げて説明する。
図３に示す通り、レイアウトフィルター２０５では、ＸＰＳデータの各ページを複製し、各ページのＸＰＳデータを複数回レンダーフィルター２０６に渡す。レンダーフィルター２０６では、複製された各ページのＸＰＳデータを受信部３００で受信する。プリントコマンド生成部３０１は、受信部３００で受信されたＸＰＳデータの各ページを参照して、プリントコマンド２０７を生成する。プリントコマンド転送部３０４は、プリントコマンド生成部３０１で生成されたプリントコマンド２０７を、ＯＳのＡＰＩを用いて出力する。前述した通り、プリントコマンド転送部３０４から出力されたプリントコマンド２０７は、記憶領域に外部ファイルとして保存され、プリントコマンド２０７を生成するプロセスとは異なるプロセスからプリンタ１１５へ送信される。これにより、プリントコマンド転送部３０４の処理は、プリンタ１１５の処理状況に関わらず通常瞬時に完了し、次ページ以降のプリントコマンド２０７を生成する処理を開始することが可能である。
【００２３】
このようにレイアウトフィルター２０５で複製された各ページのＸＰＳデータを、レンダーフィルター２０６で逐次プリントコマンド２０７に変換することで複数部数の印刷を行うことができる。しかしながら、この構成では、同じプリントコマンド２０７を、指定された部数分繰り返して生成することになる。そこで、本実施形態では、プリントコマンド生成部３０１で一度生成したプリントコマンド２０７を効率的に保存し、保存したプリントコマンド２０７を、同じページを印刷する場合に再利用するようにしている。
【００２４】
プリントコマンド２０７は、ＨＤＤ１１０等の記憶領域に外部ファイルの形で保存される。しかしながら、ＨＤＤ１１０で保存可能な領域には限度がある上、空き容量が無くなる寸前までＨＤＤ１１０を使用した場合、ＯＳや他のアプリケーションの一時記憶領域がなくなり動作が不安定になる可能性がある。部単位でない複数部印刷の場合、同じページは必ず連続するため、二部目以降で活用するために保存しておくべきプリントコマンド２０７の容量は１ページ分の容量である。一方、部単位の複数部印刷の場合には、ジョブの全ページのプリントコマンド２０７をＨＤＤ１１０に保存する必要がある。プリンタ１１５への印刷要求は数百枚に及ぶ場合もあり、常に全ページのプリントコマンド２０７をＨＤＤ１１０の記憶領域に保存可能であるとは限らない。
【００２５】
そこで、以下の各実施形態では、レンダーフィルター２０６内のプリントコマンド保存判定部３０２で、特定ページのプリントコマンド２０７を保存するか否かを判定する。そして、保存すると判定した場合のみ、プリントコマンド２０７をプリントコマンド保存部３０３に保存する。第１の決定、第２の決定を行うプリントコマンド保存判定部３０２を中心とする処理の一例の詳細については後述する。二部目以降を印刷する際に、該当するプリントコマンド２０７がプリントコマンド保存部３０３に保存されている場合、プリントコマンド２０７の生成を省略し、プリントコマンド転送部３０４は、保存されているプリントコマンド２０７をそのまま転送する。
尚、図３における各フィルターの処理は、主に、部単位の複数部印刷を行う際に必要な処理に限定しているが、各フィルターは、それ以外の処理も行う。例えばレイアウトフィルター２０５は、印刷要求に従い、ページの割り付け配置等のレイアウト処理も行う。また、図３の構成と異なり、レイアウトフィルター２０５ではＸＰＳデータの各ページの複製を作成せずに、レンダーフィルター２０６でプリントコマンド２０７を保存しなかったページのみ、ＸＰＳデータを作成するといった構成にすることも可能である。
【００２６】
図４は、部単位の複数部印刷を行う際のレンダーフィルター２０６における一部目の処理の一例を説明するフローチャートである。
まず、レンダーフィルター２０６は、Ｐ（現在のページ数）、Ｐａｌｌ（ジョブの総ページ数）、Ｌ（プリントコマンド２０７を保存するページ間隔）を０に初期化する（ステップＳ４００）。これらのパラメータは、例えばＲＡＭ１０９に記憶される。
次に、受信部３００は、（Ｐ＋１）ページのＸＰＳデータを受信した後、現在のページ数であるＰに１を加算する（ステップＳ４０１）。
次に、プリントコマンド保存判定部３０２は、プリントコマンド２０７を保存するページ間隔Ｌが０であるか否かを判定する（ステップＳ４０２）。この判定の結果、プリントコマンド２０７を保存するページ間隔Ｌが０であった場合、プリントコマンド生成部３０１は、現在のページのプリントコマンド２０７を生成しながら、プリントコマンド保存部３０３に保存して記憶制御を行う（ステップＳ４０３）。また、これと同時に、プリントコマンド転送部３０４は、生成したプリントコマンド２０７のプリンタ１１５への転送を、ＯＳのＡＰＩを用いて依頼する（ステップＳ４０３）。プリントコマンド２０７の保存に際して、プリントコマンド生成部３０１は、二部目以降の処理で参照できるように、ジョブ毎にランダムに定められたＩＤとページ番号とを元にファイル名称を決定する。ただし、ファイル名称を決定する方法は、このような方法に限定されない。例えば、ランダムに定めた名前をファイル名称とし、そのファイル名称とページ番号とを対応付けるルックアップテーブルを別途作成してもよい。
【００２７】
次に、プリントコマンド保存判定部３０２は、ジョブの総ページ数Ｐａｌｌをレイアウトフィルター２０５に問い合わせる（ステップＳ４０４）。レイアウトフィルター２０５は、割り付け印刷等のページ数に影響するようなレイアウト処理も担う。このため、プリントコマンド保存判定部３０２は、最終的に印刷される物理ページ数（ジョブの総ページ数Ｐａｌｌ）をレイアウトフィルター２０５に問い合わせる必要がある。このとき、ＸＰＳＤｒｖの印刷システムでは、ＰｒｏｐｅｒｔｙＢａｇと呼ばれる“ＯＳが提供するフィルター間通信の手法”を利用することが一般的である。このような方法により、レンダーフィルター２０６は、現在までに確定しているジョブの総ページ数Ｐａｌｌをレイアウトフィルター２０５に問い合わせて取得する。
次に、プリントコマンド保存判定部３０２は、プリントコマンド２０７を保存するページ間隔Ｌを決定する（ステップＳ４０５）。本実施形態では、プリントコマンド２０７を保存するページ間隔Ｌを、以下の（１）式に従う計算で決定する。
Ｌ＝（Ｐａｌｌ−Ｐ）／（記憶領域の利用可能容量／現在のページのプリントコマンドサイズ）  ・・・（１）
【００２８】
ここで、（１）式の記憶領域の利用可能容量は、プリントコマンド保存部３０３に保存可能な“プリントコマンド２０７のサイズ”を示す。例えばＨＤＤ１１０のシステムドライブに存在する仮想領域にプリントコマンド２０７を保存する場合には、システムドライブの空き容量により、記憶領域の利用可能容量を決定する。ただし、空き容量を全て使うと、ＯＳや他のアプリケーションの仮想記憶領域が無くなり、動作が不安定になる可能性がある。そのため、例えば、空き容量に対して利用可能な割合を掛け合わせることで、記憶領域の利用可能容量を決定するのが好ましい（例えば、記憶領域の利用可能容量を空き容量の半分にすることができる）。
【００２９】
また、本実施形態では、前述した通り、二部目以降の印刷処理で、プリントコマンド２０７の生成と転送とを並列に行う。そのためには、生成済みのプリントコマンド２０７を一時的に保存しておく記憶領域が必要である。このプリントコマンド２０７は、一部目の印刷処理中に保存するプリントコマンド２０７とは異なり、転送後に削除される。このように、二部目以降の印刷処理では、生成と転送とを並列に行うページ数のプリントコマンド２０７を保存可能なサイズの記憶領域が必要になるので、そのサイズ分の記憶領域を空けておく必要がある。尚、ＸＰＳＤｒｖの印刷システムでは、前述した通り、プリントコマンド２０７の生成と転送との夫々が異なるプロセスで動作するために自動的に並列化される。そのため、生成と転送との並列化に必要なデータ（プリントコマンド２０７）はＯＳ側で管理される。
【００３０】
（１）式において、プリントコマンド２０７を保存するページ間隔Ｌを求める演算式の分母は、現在のページと同じサイズのプリントコマンド２０７を何ページ分保存可能であるかを示す。一方、分子は、ジョブ全体のページ数から現在処理中のページ数を引いたものであるため、残りページ数を示す。以上により、プリントコマンド２０７を保存するページ間隔Ｌは、現在のページのプリントコマンド２０７を残りページに対し、均等なページ間隔で保存するとした場合のページ間隔となる。ここで、（１）式で計算された“プリントコマンド２０７を保存するページ間隔Ｌ”が１よりも小さい値である場合には、その値を切り捨てて、プリントコマンド２０７を保存するページ間隔Ｌを０にする。プリントコマンド２０７を保存するページ間隔Ｌが０であることは、記憶領域に充分な空き容量があるため、全ページのプリントコマンド２０７をプリントコマンド保存部３０３に保存することが可能であることを示す。一方、プリントコマンド２０７を保存するページ間隔Ｌが１よりも大きい値である場合には、その値を切り上げて、プリントコマンド２０７を保存する間隔を大きくしておく。
【００３１】
図４のステップＳ４０５に示すように、プリントコマンド保存判定部３０２は、プリントコマンド２０７を保存するページ間隔Ｌが０になり、プリントコマンド２０７を保存するたびに、プリントコマンド２０７を保存するページ間隔Ｌを再計算する。これは以下２つの理由によるものである。１つ目は、特定のページを処理中に、アプリケーション２００から全ページの印刷データが送信済みである保証は無く、ジョブ総ページ数Ｐａｌｌが未確定である可能性があるためである。２つ目は、プリントコマンド２０７を保存するページ間隔Ｌを、処理中のページのプリントコマンド２０７のサイズを元に計算しているため、実際にはＸＰＳデータの各ページの内容によって誤差が発生する可能性があるためである。
【００３２】
ステップＳ４０２の判定の結果、プリントコマンド２０７を保存するページ間隔Ｌが０でない場合には、次の処理が行われる。すなわち、プリントコマンド生成部３０１は、現在のページのプリントコマンド２０７を生成し、プリントコマンド転送部３０４は、生成されたプリントコマンド２０７をプリンタ１１５へ転送する（ステップＳ４０６）。ステップＳ４０６では、ステップＳ４０３と異なり、プリントコマンド保存部３０３へのプリントコマンド２０７の保存は行われない。
このようにしてプリントコマンド転送部３０４でプリントコマンド２０７を転送した後、プリントコマンド保存判定部３０２は、プリントコマンド２０７を保存するページ間隔Ｌから１を減算する（ステップＳ４０７）。このようにしてプリントコマンド２０７を保存するページ間隔Ｌを減算していき、プリントコマンド２０７を保存するページ間隔Ｌが０になると、ステップＳ４０３以降のプリントコマンド２０７を保存するフローに入る。
以上のような処理を繰り返し、残りページがなくなると、レンダーフィルター２０６の処理は、一部目の処理を終了する（ステップＳ４０８）。
図３に示した通り、一部目の印刷時に、プリントコマンド２０７を均等なページ間隔で保存し、保存したプリントコマンド２０７を二部目以降の印刷時に参照することで、二部目以降の印刷処理の軽量化及び高速化を図るのが本実施形態の目的の一つである。
【００３３】
図５は、部単位の複数部印刷を行う際のレンダーフィルター２０６における二部目以降の処理の一例を説明するフローチャートである。
まず、レンダーフィルター２０６は、図４のフローチャートと同様に、現在のページ数Ｐを処理中のページ番号として管理するため、現在のページ数Ｐを０に初期化する（ステップＳ５００）。
次に、受信部３００は、レイアウトフィルター２０５により複製された“（Ｐ＋１）ページのＸＰＳデータ”を受信した後、現在のページ数Ｐに１を加算する（ステップＳ５０１）。
次に、受信部３００は、Ｐページ目のプリントコマンド２０７がプリントコマンド保存部３０３に存在するか否かを判定する（ステップＳ５０２）。ステップ５０２では、例えば、ステップＳ４０３において、現在のページＰの値を元に決定されるファイル名称でプリントコマンド２０７が保存されている場合、現在のページＰを元に決定されるファイル名称の外部ファイルが存在するか否かを判定すればよい。また、現在のページＰの値を元に外部ファイルのファイル名称を参照することが可能なルックアップテーブルをステップＳ４０３で保存している場合には、それを参照することによってステップＳ５０２の判定を行えばよい。
【００３４】
以上のようなステップＳ５０２の判定の結果、Ｐページ目のプリントコマンド２０７がプリントコマンド保存部３０３に存在する場合、プリントコマンド転送部３０４は、プリントコマンド保存部３０３に保存済みのプリントコマンド２０７を読み出す。そして、プリントコマンド転送部３０４は、読み出したプリントコマンド２０７をプリンタ１１５に転送する指示を行う（ステップＳ５０４）。
一方、プリントコマンド保存部３０３にＰページ目のプリントコマンド２０７が存在しない場合、プリントコマンド生成部３０１は、Ｐページ目のプリントコマンド２０７を生成する。そして、プリントコマンド転送部３０４は、生成されたプリントコマンド２０７をプリンタ１１５に転送する指示を行う（ステップＳ５０３）。Ｐページ目のＸＰＳデータは、レイアウトフィルター２０５により部数分複製されている。このため、プリントコマンド生成部３０１は、ステップＳ５０１で受信部３００が取得した“Ｐページ目のＸＰＳデータ”を元に、プリントコマンド２０７を生成する。
【００３５】
前述した通り、ＸＰＳＤｒｖでは、実際のプリントコマンド２０７の転送処理は、プリントコマンド２０７の生成処理と異なるプロセスで並列に実行される。よって、フィルターからのプリントコマンド２０７の転送依頼では、プリントコマンド２０７が外部ファイルに保存されるに過ぎない。つまり、ステップＳ５０４で実行される“プリントコマンド転送部３０４による転送処理”では、プリントコマンド保存部３０３に保存済みのプリントコマンド２０７が再びＯＳによって外部ファイルとして保存されるに過ぎず、その処理は通常一瞬で完了する。従って、レンダーフィルター２０６は、プリンタ１１５があるページの印刷処理を行っている最中に、次のページのプリントコマンド２０７が保存済みでない場合、ステップＳ５０３のプリントコマンド２０７の生成処理を開始することができる。本実施形態ではこのようにして、プリントコマンド２０７の生成処理と転送処理とを並列に行うようにしている。
【００３６】
Ｐページ目のプリントコマンド２０７の処理が終わると、受信部３００は、処理をしていない残りのページがあるか否かを判定する（ステップＳ５０５）。この判定の結果、処理をしていない残りのページがある場合には、ステップＳ５０１に戻り、全てのページを処理するまで、ステップＳ５０１〜Ｓ５０４の処理を繰り返す。そして、残りのページがなくなると、受信部３００は、処理をしていない残りの部があるか否かを判定する（ステップＳ５０６）。この判定の結果、処理をしていない残りの部がある場合には、ステップＳ５００に戻り、全ての部を処理するまで、ステップＳ５００〜Ｓ５０５の処理を繰り返す。そして、処理していない残り部がなくなった時点で、受信部３００は、ステップＳ４０３でプリントコマンド保存部３０３に保存した一部目のプリントコマンド２０７を全て削除する（ステップＳ５０７）。そして、図５のフローチャートによる処理を終了する。
【００３７】
以上のように本実施形態では、一部目の印刷処理時に、利用可能な記憶容量を元に、ページ単位で、プリントコマンド２０７を保存するページの間隔が可能な限り均等になるように利用可能な記憶容量以内でプリントコマンド２０７を保存する。そして、二部目の印刷処理時に、記憶してあるプリントコマンド２０７については、それを再利用してプリンタ１１５に転送し、記憶していないプリントコマンド２０７については、再度生成する。このとき、プリントコマンド２０７の転送と生成とを並列して行うようにする。
【００３８】
図６は、本実施形態における印刷システムの動作の概略の具体例を説明する図である。
図６に示す例では、印刷ジョブは１５ページのジョブであり、記憶領域に保存可能なプリントコマンド２０７のページ数は５ページであるとする。プリンタ１１５は、全ページを均一に時間ｔ1（図６の小さな矩形の幅が時間ｔ1に相当し、この値を１とする）で処理できるとする。また、プリントコマンド２０７は、５ページから９ページまでを時間ｔ2（＝２×ｔ1）で、それ以外のページを時間ｔ1で生成することが可能であるとする。また、図６では、図に向かって左から右に向かって時間が経過するものとする。更に、図６の矩形の中の番号はページを示す。
【００３９】
前述した通り、５ページから９ページまでのプリントコマンド２０７の生成負荷が高いため、一部目の印刷処理時間は、図６に示すように、プリンタ１１５の最高（最短）印刷時間よりも長くなる。ここで、５ページ目のプリントコマンド２０７を保存することが可能であるとする。この場合、本実施形態では、記憶するページ間隔をできるだけ均等に保存するため、１、４、７、１０、１３ページ目のプリントコマンド２０７を保存する。
二部目以降の印刷処理では、保存済みのページのプリントコマンド２０７の生成が不要であるため、そのページ以外のページのプリントコマンド２０７を生成する。その結果、二部目以降のプリントコマンド２０７の生成処理時間は、プリンタ１１５の最高印刷時間よりも短くなり、且つ全てのページにおいて印刷完了までにプリントコマンド２０７の生成が完了している。結果的に、二部目以降の印刷処理では、プリンタ１１５の最高速度で印刷することが可能である。
【００４０】
各ページのプリントコマンド２０７の生成処理時間と、プリンタ１１５の印刷処理時間とが均一である場合、本実施形態の構成は、最も無駄が少ない構成である。本実施形態では、二部目以降の印刷処理時に、プリントコマンド２０７を生成する負荷をジョブ全体に分散している。このため、ＣＰＵ１０７の負荷が一部に偏らないことに加えて、二部目以降の印刷処理で、プリントコマンド２０７の生成と転送とを並列に処理するための一時記憶領域が最も小さくて済む。このように、プリントコマンド２０７を保存するページの間隔が均等になるようにプリントコマンド２０７を保存するというシンプルな構成ながら、通常の印刷ジョブにおいては効果的な結果を得ることができるのが本実施形態の特徴の一つである。
【００４１】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。前述したように第１の実施形態では、各ページのプリントコマンド２０７の生成処理時間と、プリンタ１１５の印刷処理時間とが均一である場合に、二部目以降の印刷処理を効率よく処理することができる。ただし、第１の実施形態では、ジョブ中の特定ページが複雑であり、その特定ページのプリントコマンドを生成するのに多大な時間を要する場合であっても、その特定ページのプリントコマンド２０７を保存するとは限らないため、効率的であるとは言えない。すなわち、特定ページのプリントコマンド２０７を生成する負荷が極めて重い場合、そのプリントコマンド２０７については、一部目の印刷処理時に保存しておくことが好ましいが、第１の実施形態では、そのプリントコマンド２０７が保存されるとは限らない。このように、第１の実施形態では、ジョブ中の各ページの処理負荷に偏りがある場合に効率的に処理可能であるとは言いがたい。
【００４２】
そこで、本実施形態では、一部目の印刷処理時に、プリントコマンド２０７の生成に要した時間と、プリンタ１１５の印刷時間とを元に、二部目の印刷処理時においてプリントコマンド２０７の生成がプリンタ１１５の印刷に間に合うかどうかを判断する。そして、プリントコマンド２０７の生成がプリンタ１１５の印刷に間に合わないと判断されたページのプリントコマンド２０７を保存する。以上のように本実施形態と前述した第１の実施形態とは、一部目の印刷処理時におけるプリントコマンド２０７の保存処理の一部が主として異なる。したがって、本実施形態の説明において、第１の実施形態と同一の部分については、図１〜図６に付した符号と同一の符号を付すこと等により、詳細な説明を省略する。
【００４３】
図７は、部単位の複数部印刷を行う際のレンダーフィルター２０６における一部目の処理の一例を説明するフローチャートである。尚、レンダーフィルター２０６のプリントコマンド保存判定部３０２以外の処理については、特に言及の無い限り、第１の実施形態と同じ構成をとる。
まず、レンダーフィルター２０６は、Ｐ（現在のページ数）、Ｔ（プリントコマンド２０７の生成がどの程度先行しているかを時間単位で示す値）、Ｐｓａｖｅ（プリントコマンド２０７を保存したページ数）を０に初期化する（ステップＳ７００）。これらのパラメータは、例えばＲＡＭ１０９等に記憶されている。尚、以下の説明では、プリントコマンド２０７の生成がどの程度先行しているかを時間単位で示す値Ｔを、必要に応じて、プリントコマンドの生成先行時間Ｔと称する。
【００４４】
次に、受信部３００は、（Ｐ＋１）ページのＸＰＳデータを受信した後、現在のページ数であるＰに１を加算する（ステップＳ７０１）。
次に、プリントコマンド生成部３０１は、現在のページのプリントコマンド２０７を生成する（ステップＳ７０２）。本実施形態では、プリントコマンド保存判定部３０２における保存判定に、プリントコマンド２０７の生成に要した時間を用いる。そのため、プリントコマンド保存判定部３０２の判定時に、プリントコマンド生成部３０１は既にプリントコマンド２０７を生成済みということになる。プリントコマンド保存判定部３０２で保存すると判定してから、プリントコマンド生成部３０１でプリントコマンド２０７を再度生成するのは無駄がある。このため、ステップＳ７０２でプリントコマンド保存部３０３に一旦全てのプリントコマンド２０７を保存して記憶制御する。また、これと同時に、プリントコマンド転送部３０４は、生成したプリントコマンド２０７のプリンタ１１５への転送を、ＯＳのＡＰＩを用いて依頼する（ステップＳ７０２）。
【００４５】
このようにしてプリントコマンド２０７のプリンタ１１５への転送を依頼した後、プリントコマンド保存判定部３０２は、ページ単位で時間Ｔｎｏｗを計算する（ステップＳ７０３）。時間Ｔｎｏｗは、以下の（２）式に従う計算で算出される。
Ｔｎｏｗ＝（想定印刷時間−Ｐページ目のプリントコマンド生成時間）  ・・・（２）
プリントコマンド生成時間は、ステップＳ７０２でプリントコマンド２０７の生成を行った時間を測定することによって求めることができる。想定印刷時間は、プリンタ１１５が、該当するプリントコマンド２０７を途切れることなく受信できた場合に、そのプリントコマンド２０７を印刷するのに要する時間を示す。換言するならば、想定印刷時間は、該当するページのプリントコマンド２０７に対する、プリンタ１１５の最高（最短）印刷時間を想定したものである。
【００４６】
プリンタ１１５の構成上、ページ単体の印刷時間が、印刷用紙のサイズや印刷モードによって実質的に一意に決定される場合、必要な構成要素をもつルックアップテーブルを保持し、このルックアップテーブルを用いることによって想定印刷時間を求められる。一方、インクジェットプリンタのように、印刷する領域にプリントヘッドを移動し、インク滴を吐出することで印刷を行うような構成のプリンタの場合、様々な要因で印刷時間は変わる。すなわち、印刷する領域が存在しない場合は用紙を排出する時間しかかからない。印刷する領域が同じでも、使っている色が異なると一度に吐出することが可能なインク滴の量が変わり、印刷時間が変わる場合がある。そこで、完全とはいかないが、本実施形態では、プリンタ１１５の想定印刷時間を求めるために、以下３つの方法の何れかを採用する場合を例に挙げて説明する。
【００４７】
プリンタ１１５の印刷時間を概算する１つ目の方法は、印刷用紙のサイズや、印刷モード（品位の設定等）の条件を元に参照可能なルックアップテーブルであって、印刷時間の目安を示すルックアップテーブルを参照する方法である。
図８は、ルックアップテーブルの一例を示す図である。
図８では、用紙種、印刷品位、及びグレイスケールの設定の組み合わせで、プリンタ１１５の印刷時間の目安が求められるようになっている。この印刷時間の目安は、プリンタ１１５で予め測定され算出された値である。用紙種、印刷品位、及びグレイスケールに、用紙サイズを更に組み合わせて、プリンタ１１５の印刷時間の目安が求められるようにしてもよい。図８に示すルックアップテーブルに示す印刷時間は、プリンタ１１５がサポートする最大の用紙サイズの印刷時間の目安を示す。従って、それよりも小さい用紙サイズの印刷時間を参照したい場合、その用紙サイズと、プリンタ１１５がサポートする最大の用紙サイズとの面積比に従って印刷時間を再計算することで目安の印刷時間を求めることができる。
【００４８】
また、インクジェットプリンタでは、１ページ分の全てのプリントコマンド２０７を格納するだけの容量を有するＲＡＭをプリンタ１１５内に保持しないのが一般的である。そのため、プリンタドライバからは、用紙の給紙方向を基準に、印刷する順番に帯状にプリントコマンド２０７をプリンタ１１５に送信する処理を行う。この帯状の処理単位は、一般的にバンドと呼ばれる。レンダーフィルター２０６では、バンドという単位でプリントコマンド２０７の生成処理を行う。この際、描画命令が１つも存在しなかったバンドの数をカウントしておくことで、用紙全体のどのくらいの割合に印刷領域が存在するかを概算することができる。このようにして求めた印刷領域の割合を、ルックアップテーブルで参照した印刷時間に掛け合わせることで、印刷時間の目安をより正確に算出することが可能である。
【００４９】
プリンタ１１５の印刷時間を概算する２つ目の方法は、ランゲージモニターやポートモニターでの送信状況を監視する方法である。図２の構成においては、ランゲージモニターは、プリントコマンド２０７とプリンタ１１５との間に存在するモジュールであり、プリントコマンド２０７をパース（ｐａｒｓｅ）し、プリンタ１１５に送信する役割を担う。ポートモニターは、ランゲージモニターの下位層に存在し、ポート種別に従い、適切な方法で送信処理を行う。
前述した通り、インクジェットプリンタでは、ページ全体のプリントコマンド２０７を保存しておく容量を有するＲＡＭを持たないことが一般的である。プリンタ１１５のＲＡＭの容量が一杯であり、追加のプリントコマンド２０７を受信することが不可能な場合、ランゲージモニターから送信されたプリントコマンド２０７は直ぐに受理されず、プリンタ１１５のＲＡＭの空き容量ができるまで待たされる。このようにして生じた待ち時間の合計を求めることで、プリンタ１１５がプリントコマンド２０７の生成時間に対し、どの程度遅れていたかを概算することができる。ただし、この方法では、プリントコマンド２０７の生成の方がプリンタ１１５の印刷動作よりも遅れている場合に、その遅延の度合いを知る術がない。よって、ページ全体で、プリントコマンド２０７の送信に遅延が略発生しなかった場合は、プリンタ１１５の印刷時間は、プリントコマンド２０７の生成時間に対し、一定時間高速であるとすること等により、プリンタ１１５の印刷時間を決定する。
【００５０】
プリンタ１１５の印刷時間を概算する３つ目の方法は、プリンタ１１５に問い合わせることである。プリンタ１１５は、受信したプリントコマンド２０７を記憶するＲＡＭが空であった時間や、データが途切れた回数等をカウントしておく。プリンタドライバは、プリンタ１１５にそれらの値を問い合わせ、プリントコマンド２０７の生成時間と、それらの値とを元にプリンタ１１５の印刷時間を概算する。
【００５１】
前述した方法のうち、１つ目の方法は、プリンタ１１５の特性に応じてルックアップテーブルを作成する必要があるが、特別な仕組みを要することなく、プリンタ１１５の印刷時間を概算することができる。２つ目の方法は、プリンタ１１５の印刷処理が高速である場合に正確に印刷時間を概算できない場合があるが、ルックアップテーブルも作成する必要がない。３つ目の方法は、プリントコマンド２０７や印刷が間に合わなかった度合いをプリンタ１１５に問い合わせるため確実であるが、プリンタ１１５に特別な仕組みが必要となる。
また、２つ目及び３つ目の方法は、基本的にページ単位でプリントコマンド２０７の送信を見届ける必要がある。ステップＳ７０２で行うプリントコマンド２０７の転送処理は、実際にはＯＳのＡＰＩにより外部ファイルに一旦格納されるものであり、実際の転送処理は、これとは別のプロセスで実行される。ランゲージモニターを用いた場合や、プリントコマンド２０７の送信状況をプリンタ１１５に問い合わせる場合には、プリントコマンド２０７の実際の転送処理が完了している必要がある。このため、ステップＳ７０３で時間Ｔｎｏｗを求める前に、そのページのプリントコマンド２０７の実際の転送処理の完了を待つ。
【００５２】
以上の何れかの方法で想定印刷時間を求めることができる。前述したように、プリントコマンド保存判定部３０２は、以上の何れかの方法で求めた想定印刷時間と、プリンタコマンド生成時間とを元に時間Ｔｎｏｗの値を計算する。プリントコマンド２０７の生成が充分に高速である場合、時間Ｔｎｏｗは正の値になるし、プリントコマンド２０７の生成がプリンタ１１５の印刷速度に対し間に合っていない場合、時間Ｔｎｏｗは負の値となる。このようにして、プリントコマンド保存判定部３０２は、プリントコマンド２０７の生成が間に合っているかどうかと、その生成が間に合っていない場合に、その間に合っていない度合いがどの程度であるかをページ単位で計算する。
【００５３】
次に、プリントコマンド保存判定部３０２は、これまでに計算した時間Ｔｎｏｗの合計値であるプリントコマンドの生成先行時間Ｔに、ステップＳ７０３で計算した時間Ｔｎｏｗを加えた値が、負の値になるか否かを判定する。プリントコマンドの生成先行時間Ｔは、各ページで求めた時間Ｔｎｏｗを足し合わせたものであり、プリンタドライバのプリントコマンド生成処理が、プリンタ１１５の印刷処理に対して先行している「貯金」時間と言える。二部目以降の印刷処理で、プリントコマンドの生成先行時間Ｔが正の値であるタイミングでは、プリントコマンドの生成先行時間Ｔが示す時間だけプリンタドライバがプリンタ１１５よりも先行して処理していることを示す。逆に、プリントコマンドの生成先行時間Ｔが負の値になったタイミングでは、プリントコマンド２０７の生成処理は、プリンタ１１５の印刷処理に対し遅れている、つまりプリンタ１１５を待たせていることを示す。よって、ステップＳ７０４の判定の結果、プリントコマンドの生成先行時間Ｔの現在値に、時間Ｔｎｏｗを加えた値（＝Ｔ＋Ｔｎｏｗ）が負の値になった場合、現在のページのプリントコマンド２０７を保存する処理を行う（ステップＳ７０７、Ｓ７０８）。
【００５４】
プリントコマンド２０７を保存した場合、二部目以降の印刷処理では、保存済みのプリントコマンド２０７を参照すればよいので、そのページのプリントコマンド生成時間は実質０である。従って、プリントコマンド保存判定部３０２は、プリントコマンドの生成先行時間Ｔに対して、負の値である現在のページに対する時間Ｔｎｏｗを加えずに次の処理を行う。すなわち、プリントコマンド保存判定部３０２は、プリントコマンドの生成先行時間Ｔに、プリントコマンド２０７を保存したことによってプリンタドライバが活用可能になった時間（プリンタ１１５の想定印刷時間）を加算する（ステップＳ７０７）。
次に、プリントコマンド保存判定部３０２は、後で参照可能なように、プリントコマンド２０７を保存したページ数Ｐｓａｖｅに１を加算する（ステップＳ７０８）。
【００５５】
一方、ステップＳ７０４の判定の結果、プリントコマンドの生成先行時間Ｔの現在値に、時間Ｔｎｏｗを加算した値（＝Ｔ＋Ｔｎｏｗ）が正の値であった場合には、現在のページのプリントコマンド２０７を生成しても印刷に間に合う。従って、プリントコマンド保存判定部３０２は、ステップＳ７０２で保存した“現在のページのプリントコマンド２０７”を削除して記憶制御を行う（ステップＳ７０５）。そして、このページについては、二部目以降も一部目と同じプリントコマンド２０７の生成処理が再度動作することになる。このため、プリントコマンド保存判定部３０２は、プリントコマンドの生成先行時間Ｔに、現在のページにおける時間Ｔｎｏｗを加算する（ステップＳ７０６）。
以上のステップＳ７０６、Ｓ７０８の処理が終了すると、受信部３００は、処理をしていない残りのページがあるか否かを判定する（ステップＳ７０９）。この判定の結果、処理をしていない残りのページがある場合には、ステップＳ７０１に戻り、全てのページを処理するまで、ステップＳ７０１〜Ｓ７０８の処理を繰り返す。そして、残りのページがなくなると、一部目のレンダーフィルター２０６の処理が終了する。
【００５６】
尚、図７のフローチャートで説明したプリントコマンド生成先行時間Ｔの値の最大値は、二部目以降の印刷処理で並列処理が可能な最大ページ数に影響を受ける。例えば、想定印刷時間が１０秒である場合に、プリントコマンドの生成先行時間Ｔが４０秒であるというのは、４ページ分のプリントコマンド２０７の生成処理が、プリンタ１１５の印刷処理よりも先行しているということを示す。そこで、二部目以降の印刷処理で並列処理が可能な最大ページ数と、想定印刷時間とを元に、プリントコマンドの生成先行時間Ｔの最大値を予め決定し、ステップＳ７０６、Ｓ７０７で計算したプリントコマンドの生成先行時間Ｔが、その最大値を越えないようにする。
このように特定ページのプリントコマンド２０７を保存したことによりプリンタドライバが活用可能な時間をプリントコマンドの生成先行時間Ｔとして伝播させることが本実施形態の特徴の一つである。このプリントコマンドの生成先行時間Ｔが伝播するという概念は、前述の通り、プリントコマンド２０７の生成と転送とが並列に動作することで、はじめて有効なものとなる。
【００５７】
以上のようにして一部目で一部のページが保存された場合の二部目以降のレンダーフィルター２０６の処理は、図５に示す通り、プリントコマンド２０７が存在すればそれを読み出して転送し、存在しなければ再度生成して転送するのが基本構成となる。プリンタ１１５が最高速度で印刷するのに必要なプリントコマンド２０７は、全て一部目の印刷処理時に保存されているはずである。したがって、二部目以降の印刷処理では、図５に示した処理さえ行えば、計算上は、プリンタ１１５の最高速度で印刷することが可能なはずである。しかしながら、例えば印刷要求が１０部の印刷であった場合、プリントコマンド保存部３０３の記憶領域の空き容量を有効活用して二部目の印刷処理時に更にプリントコマンド２０７を保存しておくことで、三部目以降の印刷処理をより軽量に行うことが可能である。
【００５８】
図９は、部単位の複数部印刷を行う際のレンダーフィルター２０６における二部目の処理の一例を説明するフローチャートである。前述したように、二部目の印刷処理を図５に示したようにして行ってもよいが、ここでは、プリントコマンド保存部３０３の記憶領域の空き容量を有効に活用して二部目の印刷処理時にもプリントコマンド２０７を保存する場合を例に挙げて説明する。尚、ここでは一例として、プリントコマンド２０７を保存するページの間隔が均等になるように、一部目の印刷処理時にプリントコマンド２０７を保存する場合を例に挙げて説明する。プリントコマンド２０７を保存する基本的な処理自体は、第１の実施形態で説明した“プリントコマンド２０７を保存するページの決定手法”と同等である（図４を参照）。
【００５９】
まず、レンダーフィルター２０６は、Ｐｒｅｓｔ（一部目の印刷処理で保存していないページ数）、Ｌ（プリントコマンド２０７を保存するページ間隔）を０に初期化する（ステップＳ９００）。これらのパラメータは、例えばＲＡＭ１０９に記憶される。
次に、受信部３００は、現在のページのＸＰＳデータを受信する（ステップＳ９１０）。
次に、受信部３００は、一部目の印刷処理で、現在のページのプリントコマンド２０７を、プリントコマンド保存部３０３の記憶領域に保存済みであるか否かを判定する（ステップＳ９０１）。この判定の結果、プリントコマンド２０７が存在した場合には、次の処理が行われる。すなわち、プリントコマンド転送部３０４は、生成済みのプリントコマンド２０７をプリントコマンド保存部３０３から読み出し、読み出したプリントコマンド２０７をプリンタ１１５に転送する指示を行う（ステップＳ９０２）。そして、後述するステップＳ９０９に進む。
【００６０】
一方、プリントコマンド２０７が存在しない場合、プリントコマンド保存判定部３０２は、プリントコマンド２０７を保存するページ間隔Ｌが０であるかどうかを判定する（ステップＳ９０３）。この判定の結果、プリントコマンド２０７を保存するページ間隔Ｌが０であった場合、プリントコマンド生成部３０１は、次の処理を行う。すなわち、プリントコマンド生成部３０１は、受信部３００で受信した“現在のページのＸＰＳデータ”を元に、現在のページのプリントコマンド２０７を生成しながら、プリントコマンド保存部３０３に保存して記憶制御を行う（ステップＳ９０４）。また、これと同時に、プリントコマンド転送部３０４は、生成したプリントコマンド２０７のプリンタ１１５への転送を依頼する（ステップＳ９０４）。
【００６１】
次に、プリントコマンド保存判定部３０２は、プリントコマンド２０７を保存するページ間隔Ｌを、以下の（３）式に従う計算で決定する（ステップＳ９０５）。
Ｌ＝（Ｐａｌｌ−Ｐｓａｖｅ−Ｐｒｅｓｔ）／（記憶領域の利用可能容量／現在のページのプリントコマンドサイズ）  ・・・（３）
（３）式において、Ｐａｌｌは、ジョブの総ページ数を示し、一部目の印刷処理の時点で既知である。Ｐｓａｖｅは、一部目の印刷処理（ステップＳ７０２）で保存済みのプリントコマンド２０７のページ数を示す。Ｐｒｅｓｔは、一部目の印刷処理でプリントコマンド２０７を保存していないページの処理数を示す。よって、（３）式の分子（＝Ｐａｌｌ−Ｐｓａｖｅ−Ｐｒｅｓｔ）は、一部目の印刷処理でプリントコマンド２０７を保存済みのページを除いた残りのページ数を示す。一方、分母は、プリントコマンド保存部３０３の記憶領域の利用可能容量を、現在のページのプリントコマンド２０７のサイズで割った値であり、保存可能なプリントコマンド２０７のページ数を示す。したがって、（３）式のＬは、一部目の印刷処理で保存していないプリントコマンド２０７のうち、保存可能なプリントコマンド２０７を、ページ間隔が均等になるように保存する場合のページ間隔となる。以上のようにしてプリントコマンド２０７を保存するページ間隔Ｌを算出すると、後述するステップＳ９０８に進む。
【００６２】
前述したステップＳ９０３の判定の結果、プリントコマンド２０７を保存するページ間隔Ｌが０でない場合には、次の処理が行われる。すなわち、プリントコマンド生成部３０１は、現在のページのプリントコマンド２０７を生成し、プリントコマンド転送部３０４は、生成されたプリントコマンド２０７をプリンタ１１５へ転送する（ステップＳ９０６）。ステップＳ９０６では、ステップＳ９０４と異なり、現在のページのプリントコマンド２０７は、プリントコマンド保存部３０３に保存されない。
次に、プリントコマンド保存判定部３０２は、プリントコマンド２０７を保存するページ間隔Ｌから１を減算する（ステップＳ９０７）。そして、ステップＳ９０８に進む。
以上のステップＳ９０５、Ｓ９０７の処理が行われた後、レンダーフィルター２０６は一部目の印刷処理で保存していないページ数Ｐｒｅｓｔに１を加算する（ステップＳ９０８）。そして、ステップＳ９０９に進む。
【００６３】
以上のステップＳ９０２、Ｓ９０８の処理が行われた後、受信部３００は、処理をしていない残りのページがあるか否かを判定する（ステップＳ９０９）。この判定の結果、処理をしていない残りのページがある場合には、ステップＳ９１０に戻り、全てのページを処理するまで、ステップＳ９１０〜Ｓ９０８の処理を繰り返す。そして、残りのページがなくなると、レンダーフィルター２０６における二部目の処理を終了する。
このように二部目の印刷処理でプリントコマンド２０７を追加で保存した場合の三部目以降の印刷処理は、図５に示す処理と同等である。
【００６４】
図１０は、本実施形態における印刷システムの動作の概略の具体例を説明する図である。
図６に示したものと同様に、図１０に示す例でも、印刷ジョブは１５ページのジョブであり、プリントコマンド保存部３０３の記憶領域に保存可能なプリントコマンド２０７のページ数は５ページとする。プリンタ１１５は、全ページを均一に時間ｔ1（図１０の小さな矩形の幅が時間ｔ1に相当し、この値を１とする）で処理できるとする。また、プリントコマンド２０７は、５ページから９ページまでを時間ｔ2（＝２×ｔ1）で、そのページ以外のページを時間ｔ1で生成することが可能であるとする。また、図１０では、図に向かって左から右に向かって時間が経過するものとする。更に、図１０の矩形の中の番号はページを示す。
【００６５】
図１０において、４ページ目までは、プリンタ１１５の印刷時間とプリントコマンド２０７の生成時間とが一致しているため、プリントコマンドの生成先行時間Ｔは０になる。５ページ目の段階で時間Ｔｎｏｗは、−１（＝１−２）となり、負の値になる（ステップＳ７０３）。よって、５ページ目のプリントコマンド２０７は保存対象となる（ステップＳ７０４）。５ページ目のプリントコマンド２０７を保存したことにより、プリントコマンドの生成先行時間Ｔには、５ページ目の印刷処理時間（想定印刷時間）である１が加算され、１になる（ステップＳ７０７）。
６ページ目における時間Ｔｎｏｗは５ページ目と同様に−１であるが、プリントコマンドの生成先行時間Ｔが１であるため、これらの加算値（＝Ｔ＋Ｔｎｏｗ）は０となる。したがって、６ページ目のプリントコマンド２０７は保存対象外となる（ステップＳ７０４）。このように５ページ目から９ページ目では、１ページずつ間隔を開けてプリントコマンド２０７が保存される。すなわち、５、７、９ページのプリントコマンド２０７が保存される。
【００６６】
５、７、９ページを除くページのプリントコマンド２０７の生成時間の合計が、二部目のプリントコマンド２０７の生成時間になる。図１０に示すように、二部目におけるプリントコマンド２０７の生成処理時間は、プリンタ１１５の最高印刷時間よりも短くなり、且つ全てのページにおいて印刷完了までにプリントコマンド２０７の生成が完了している。結果的に、二部目の印刷処理では、全ページをプリンタ１１５の最高（最短）印刷時間内で印刷することが可能である。この時点で３ページのプリントコマンド２０７を保存済みであるので、更に２ページのプリントコマンド２０７を保存することが可能である。従って、図９に示すフローチャートに従い、更に２ページのプリントコマンド２０７を保存する。これにより、二部目の印刷処理が完了した段階で、１、５、７、９、１５ページ目のプリントコマンド２０７が保存される。三部目以降の印刷処理では、それらのページを除くページのプリントコマンド２０７のみを生成することになり、プリンタ１１５の最高速度で印刷できることに加え、ＣＰＵによる処理負荷をより軽減させることが可能である。
【００６７】
以上のように本実施形態では、二部目以降をプリンタ１１５の最高速度で印刷するために最低限必要なプリントコマンド２０７の保存を一部目の印刷処理時に行う。そして、二部目の印刷処理時に、プリントコマンド保存部３０３の記憶領域に空き容量があった場合は、それを有効に活用し、新たに保存するプリントコマンド２０７のページ間隔が均等になるように、プリントコマンド２０７を更に保存する。三部目以降の印刷処理では、プリンタ１１５の最高速度での印刷が可能になることを保証しながら、プリントコマンド保存部３０３の記憶領域の空き容量を活かして、ＣＰＵによる処理負荷をより軽減させることができる。
尚、二部目の印刷処理時にプリントコマンド２０７を保存する処理（図９のフローチャートによる処理）を、第１の実施形態に適用するようにしてもよい。
【００６８】
＜第３の実施形態＞
次に、本発明の第３の実施形態について説明する。本実施形態では、一部目の印刷処理時に、第２の実施形態で説明した２つのプリントコマンド保存方法を同時に実行する。すなわち、プリントコマンド２０７の生成が印刷に間に合わないページを優先的に保存する手法と、保存可能なページ数のプリントコマンド２０７をページ間隔が均等になるように保存する手法とを同時に実行する。このように本実施形態と前述した第１、第２の実施形態とは、一部目の印刷処理の一部が主として異なる。したがって、本実施形態の説明において、第１、第２の実施形態と同一の部分については、図１〜図１０に付した符号と同一の符号を付すこと等により、詳細な説明を省略する。
【００６９】
図１１は、部単位の複数部印刷を行う際のレンダーフィルター２０６における一部目の処理の一例を説明するフローチャートである。尚、レンダーフィルター２０６のプリントコマンド保存判定部３０２以外の処理については、特に言及の無い限り、第１、第２の実施形態と同じ構成をとる。
まず、レンダーフィルター２０６は、各種パラメータを初期化する（ステップＳ１１００）。各種パラメータは、Ｐ（現在のページ数）、Ｐｓａｖｅ（プリントコマンド２０７を保存したページ数）、Ｔ（プリントコマンドの生成先行時間）、Ｓ（プリントコマンド２０７を保存するペースを調整するためのパラメータ）である。具体的に、現在のページ数Ｐ、プリントコマンド２０７を保存したページ数Ｐｓａｖｅ、プリントコマンドの生成先行時間Ｔについては０に初期化し、プリントコマンド２０７を保存するペースを調整するためのパラメータＳについては１に初期化する。尚、以下の説明では、プリントコマンド２０７を保存するペースを調整するためのパラメータＳを、必要に応じて、保存ペース調整パラメータＳと称する。また、これらのパラメータは、例えば、ＲＡＭ１０９に記憶される。
【００７０】
次に、受信部３００は、（Ｐ＋１）ページのＸＰＳデータを受信した後、現在のページ数であるＰに１を加算する（ステップＳ１１０１）。
次に、プリントコマンド生成部３０１は、現在のページのプリントコマンド２０７を生成しながらプリントコマンド保存部３０３に保存して記憶制御を行う（ステップＳ１１０２）。また、これと同時に、プリントコマンド転送部３０４は、生成したプリントコマンド２０７のプリンタ１１５への転送を、ＯＳのＡＰＩを用いて依頼する（ステップＳ１１０２）。
次に、プリントコマンド保存判定部３０２は、以下の（４）式に従って時間Ｔｎｏｗを計算（導出）する（ステップＳ１１０３）。
Ｔｎｏｗ＝（Ｓ×想定印刷時間−Ｐページ目のプリントコマンド生成時間）  ・・・（４）
【００７１】
想定印刷時間の定義及び算出方法は、第２の実施形態で説明した通りである。Ｐページ目（現在のページ）のプリントコマンド生成時間も、第２の実施形態と同様に、プリントコマンド生成部３０１におけるプリントコマンド２０７の生成時間を実際に測定することによって得る。保存ペース調整パラメータＳは、前述した通り、プリントコマンド２０７を保存するペースを調整するためのパラメータであり、その値は通常１である。このステップＳ１１０３で求める時間Ｔｎｏｗは、基本的にステップＳ７０３で求められる時間Ｔｎｏｗと同じ意味を持つ。ただし、本実施形態の時間Ｔｎｏｗでは、保存ペース調整パラメータＳの概念を加えており、この点が第２の実施形態の時間Ｔｎｏｗと異なる。
【００７２】
次に、プリントコマンド保存判定部３０２は、これまでに計算した時間Ｔｎｏｗの合計値であるプリントコマンドの生成先行時間Ｔに、ステップＳ７０３で計算した時間Ｔｎｏｗを加えた値が、負の値になるか否かを判定する（ステップＳ１１０４）。この判定の結果、プリントコマンドの生成先行時間Ｔの現在値に、時間Ｔｎｏｗを加えた値（＝Ｔ＋Ｔｎｏｗ）が正の値であった場合には、現在のページのプリントコマンド２０７を生成しても印刷に間に合う。従って、プリントコマンド保存判定部３０２は、ステップＳ１１０２で保存した“現在のページのプリントコマンド２０７”を削除して記憶制御を行う（ステップＳ１１０５）。
次に、プリントコマンド保存判定部３０２は、プリントコマンドの生成先行時間Ｔに、ステップＳ１１０３で計算済みの“現在のページにおける時間Ｔｎｏｗ”を加算する（ステップＳ１１０６）。そして、後述するステップＳ１１０９に進む。
【００７３】
ステップＳ１１０４の判定の結果、プリントコマンドの生成先行時間Ｔの現在値に、時間Ｔｎｏｗを加えた値（＝Ｔ＋Ｔｎｏｗ）が負の値であった場合、ステップＳ１１０２で保存した“現在のページのプリントコマンド２０７”を削除せずに保存する処理を行う。すなわち、プリントコマンド保存判定部３０２は、プリントコマンドの生成先行時間Ｔに対し、時間Ｔｎｏｗではなく、プリントコマンド２０７を保存することによって生じた空き時間である想定印刷時間を加算する（ステップＳ１１０７）。
次に、プリントコマンド保存判定部３０２は、後で参照可能なように、プリントコマンド２０７を保存したページ数Ｐｓａｖｅに１を加算する（ステップＳ１１０８）。そして、ステップＳ１１０９に進む。
【００７４】
以上のようにしてステップＳ１１０６、Ｓ１１０８の処理が終了すると、プリントコマンド保存判定部３０２は、以下の（５）式に従う計算を行って、記憶可能ページ数Ｐｓａｖｅａｌｌを算出する（ステップＳ１１０９）。
Ｐｓａｖｅａｌｌ＝記憶領域の利用可能容量／現在のページのプリントコマンドサイズ＋Ｐｓａｖｅ  ・・・（５）
（５）式の（記憶領域の利用可能容量／現在ページのプリントコマンドサイズ）は、現在のページのプリントコマンド２０７と同じサイズのプリントコマンド２０７をあと何ページ分保存可能であるかを表す。このようにして求めた“保存可能な残りプリントコマンドページ数”に、今までに保存したプリントコマンド２０７のページ数Ｐｓａｖｅを加算して、記憶可能ページ数Ｐｓａｖｅａｌｌを求める。記憶可能ページ数Ｐｓａｖｅａｌｌは、プリントコマンド保存部３０３の利用可能な容量で生成可能なプリントコマンド２０７の総ページ数になる。記憶可能ページ数Ｐｓａｖｅａｌｌは、現在のページのプリントコマンド２０７のサイズを元に概算した値である。実際には、プリントコマンド２０７のサイズはページ毎に異なるため、記憶可能ページ数Ｐｓａｖｅａｌｌをページ毎に計算し直す構成をとる。
【００７５】
次に、プリントコマンド保存判定部３０２は、ジョブの総ページ数Ｐａｌｌをレイアウトフィルター２０５に問い合わせる（ステップＳ１１１０）。ジョブの総ページ数Ｐａｌｌについても、最初に問い合わせたタイミングで確定している保証は無いため、毎ページ問い合わせる構成をとる。
次に、プリントコマンド保存判定部３０２は、以下の（６）式を満たすか否かを判定する。
Ｐｓａｖｅ＞Ｐ×（Ｐｓａｖｅａｌｌ／Ｐａｌｌ）  ・・・（６）
（６）式において、（Ｐｓａｖｅａｌｌ／Ｐａｌｌ）は、ジョブ全体に対する、プリントコマンド２０７の均等な保存間隔を示す割合である。この値に現在のページ数Ｐを乗算することで、プリントコマンド２０７を均等なページ間隔で保存する場合に、現在のページ数の段階で保存できるページ数が得られる。プリントコマンド２０７を保存したページ数Ｐｓａｖｅは、現在のページ数Ｐまでのページのうち、プリントコマンド２０７を実際に保存したページを示す。つまり、ステップＳ１１１１では、ジョブ全体でページ間隔が均等になるようにプリントコマンド２０７を保存するとしたときに、プリントコマンド２０７を保存しているページ数の現在値が過多であるか、それとも不足であるかを判別している。
【００７６】
以上のようなステップＳ１１１１の判定の結果、（６）式を満たす場合、保存しているページ数が多いことを示す。そこで、プリントコマンド保存判定部３０２は、一例として、保存ペース調整パラメータＳに０．９を乗算して、保存ペース調整パラメータＳを小さな値とする（ステップＳ１１１２）。
保存ペース調整パラメータＳは、ステップＳ１１０３で参照され、プリントコマンド生成時間に掛け合わせることで、プリントコマンド生成時間を偽るためのパラメータである。保存ペース調整パラメータＳを小さな値とすることで、プリントコマンド生成時間が小さいものとして時間Ｔｎｏｗが計算され、結果的に時間Ｔｎｏｗが正の値になりやすいように調整する。この結果、プリントコマンド２０７の保存を押さえることができる。
【００７７】
一方、ステップＳ１１１１の判定の結果、（６）式を満たさない場合、保存しているページ数が不足していることを示す。そこで、プリントコマンド保存判定部３０２は、一例として、保存ペース調整パラメータＳに１．１を乗算して、保存ペース調整パラメータＳを大きな値とする（ステップＳ１１１３）。これにより、プリントコマンド生成時間が長いと偽ることになり、結果的にプリントコマンド２０７の保存を促すことができる。
ここで、プリントコマンド保存判定部３０２は、保存ペース調整パラメータＳに１．１又は０．９を乗算する場合を例に挙げて示しているが、乗算する値は、これ以外の異なる値であってもよい。また、保存ペース調整パラメータＳは、ページ間隔が均等になるようにプリントコマンド２０７を保存するとして現時点で保存しているはずのページ数と、実際に現在までに保存しているページ数との差の大きさに合わせて変化するようなパラメータであってもよい。
【００７８】
以上のステップＳ１１１２、Ｓ１１１３の処理が終了すると、受信部３００は、処理をしていない残りのページがあるか否かを判定する（ステップＳ１１１４）。この判定の結果、処理をしていない残りのページがある場合には、ステップＳ１１０１に戻り、全てのページを処理するまで、ステップＳ１１０１〜Ｓ１１１３の処理を繰り返す。そして、残りのページがなくなると、一部目のレンダーフィルター２０６の処理が終了する。
【００７９】
本実施形態では、一部目の印刷処理が終了した段階で、既にプリントコマンド保存部３０３の利用可能な容量を略使い切る形でプリントコマンド２０７を保存する形となる。よって、レンダーフィルター２０６の二部目以降の処理は、図５に示した処理と同じ処理になる。すなわち、プリントコマンド２０７が保存済みのページでは、そのプリントコマンド２０７を再利用してプリンタ１１５に送信し、プリントコマンド２０７が保存済みでないページでは、プリントコマンド２０７を再度生成してプリンタ１１５に送信する。
本実施形態では、プリントコマンド２０７の生成が印刷に間に合わないページを優先的に保存する処理と、保存可能なページ数のプリントコマンド２０７をページ間隔が均等になるように保存する処理とを、一部目の印刷処理時に同時に実行する。第２の実施形態では、例えば、ジョブ中の全ページのプリントコマンド２０７の生成が極めて高負荷であり、且つプリントコマンド保存部３０３の空き容量がそれほど無い場合には正しく機能しない虞がある。ジョブの前半部分のプリントコマンド２０７の保存が偏重してしまうからである。これに対し、本実施形態では、たとえプリントコマンド２０７の生成が印刷に間に合わない場合でも、ジョブ全体に対してプリントコマンド２０７を保存するページの間隔がそれなりに均等になるようする。そのため、ジョブの前半部分にプリントコマンド２０７の生成が偏ってしまうといったことはない。このことは、ステップＳ１１１２で、保存ペース調整パラメータＳを小さめに調整する処理によって実現している。
【００８０】
これとは逆に、ステップＳ１１１３で、保存ペース調整パラメータＳを大きめに調整する処理は、プリントコマンド２０７の保存を促すための調整である。そこで、ステップＳ１１１３における調整を省略し、ステップＳ１１１２における調整のみを行いながら一部目の印刷処理時に保存するページを決定するようにしてもよい。このようにした場合には、二部目の印刷処理時に図９に示すフローチャートの処理を行い、（プリントコマンド保存部３０３に空き容量がある場合には）プリントコマンド２０７を更に保存してもよい。
【００８１】
また、本実施形態において、プリントコマンド２０７を生成したタイミングにおける保存ペース調整パラメータＳの値が小さいほど、そのプリントコマンド２０７の保存が重要であることを示す。保存ペース調整パラメータＳが極めて大きい状態で保存したプリントコマンド２０７は、プリンタ１１５の印刷動作に対してプリントコマンド２０７の生成処理が十分に間に合っているにも関わらず保存されたものである。逆に、保存ペース調整パラメータＳが極めて小さな値のときに保存したプリントコマンド２０７は、本来であれば毎ページでも保存しておきたいが、プリントコマンド保存部３０３の空き容量の問題で、敢えて間隔をあけて保存したものである。
そこで、この保存ペース調整パラメータＳを活用して、次のようにしてもよい。すなわち、プリントコマンド２０７を保存する際に、その時点での保存ペース調整パラメータＳの値を保存しておく。そして、保存ペース調整パラメータＳが閾値よりも小さな値になった場合に、閾値以上の大きな値の保存ペース調整パラメータＳに対応する、保存済みのプリントコマンド２０７を削除する。これにより、ジョブの後半で極端に処理負荷が高くなるようなデータに対しても、柔軟に対応することができる。
【００８２】
図１２は、本実施形態における印刷システムの動作の概略の具体例を説明する図である。
図６、図１０に示したものと同様に、図１２に示す例でも、印刷ジョブは１５ページのジョブであり、プリントコマンド保存部３０３の記憶領域に保存可能なプリントコマンド２０７のページ数は５ページとする。プリンタ１１５は、全ページを均一に時間ｔ1（図１２の小さな矩形の幅が時間ｔ1に相当し、この値を１とする）で処理できるとする。また、プリントコマンド２０７は、５ページから９ページまでを時間ｔ2（＝２×ｔ1）で、そのページ以外のページを時間ｔ1で生成することが可能であるとする。また、図１２では、図に向かって左から右に向かって時間が経過するものとする。更に、図１２の矩形の中の番号はページを示す。
【００８３】
本実施形態の基本構成では、一部目の印刷完了時に、５ページのプリントコマンド２０７の保存が完了する形となる。ステップＳ１１１２、Ｓ１１１３の調整値により変わるが、図１２に示す通り、プリントコマンド２０７の生成負荷が高い５〜９ページ目で多めに、そのページ以外のページで少なめに、プリントコマンド２０７を保存するページであると判断する。図１２に示す通り、二部目の印刷処理における“プリントコマンド２０７の生成処理時間”は、プリンタ１１５の最高（最短）印刷時間よりも短くなり、且つ全てのページにおいて印刷完了までにプリントコマンド２０７の生成が完了している。結果的に、二部目以降の印刷処理では、全ページをプリンタ１１５の最高印刷時間で印刷することが可能である。
【００８４】
＜第４の実施形態＞
次に、本発明の第４の実施形態について説明する。本実施形態では、第３の実施形態と同様に、一部目の印刷処理時に保存すべきプリントコマンド２０７を最適に決定することを目的とする。第１〜第３の実施形態では、プリントコマンド２０７をページ毎に保存していく構成であった。これに対し本実施形態では、全てのページのプリントコマンド２０７を保存していき、不要であると判断したページのみを削除していく構成をとる。このように本実施形態と前述した第１〜第３の実施形態では、プリントコマンド２０７を保存するが主として異なる。したがって、本実施形態の説明において、第１〜第３の実施形態と同一の部分については、図１〜図１２に付した符号と同一の符号を付すこと等により、詳細な説明を省略する。
【００８５】
図１３は、部単位の複数部印刷を行う際のレンダーフィルター２０６における一部目の処理の一例を説明するフローチャートである。尚、レンダーフィルター２０６のプリントコマンド保存判定部３０２以外の処理については、特に言及の無い限り、第１〜第３の実施形態と同じ構成をとる。
まず、レンダーフィルター２０６は、Ｐ（現在のページ数）、及びＰｓａｖｅ（プリントコマンド２０７を保存したページ数）を０に初期化する（ステップＳ１３００）。これらのパラメータは、例えばＲＡＭ１０９に記憶される。
次に、受信部３００は、（Ｐ＋１）ページのＸＰＳデータを受信した後、現在のページ数であるＰに１を加算する（ステップＳ１３０１）。
【００８６】
次に、プリントコマンド生成部３０１は、現在のページのプリントコマンド２０７を生成しながらプリントコマンド保存部３０３に保存して記憶制御を行う（ステップＳ１３０２）。また、これと同時に、プリントコマンド転送部３０４は、生成したプリントコマンド２０７のプリンタ１１５への転送を、ＯＳのＡＰＩを用いて依頼する（ステップＳ１３０２）。
次に、プリントコマンド保存判定部３０２は、パラメータＴｐを以下の（７）式に従う計算を行ってページ毎に求める（ステップＳ１３０３）。
Ｔｐ＝（現在のページの想定印刷時間−現在のページのプリントコマンド生成時間）  ・・・（７）
【００８７】
（７）式において、想定印刷時間は、現在のページを印刷した場合のプリンタ１１５の最高（最短）印刷時間の想定値であり、その算出方法は、第２、第３の実施形態で説明したのと同じである。現在のページのプリントコマンド２０７を生成したのに要した時間は、ステップＳ１３０１でＸＰＳデータを受信してから、ステップＳ１３０２でプリントコマンド２０７の生成が完了するまでの時間の実測値とする。これらの差によって求められるパラメータＴｐをページ単位で保存しておく。
【００８８】
本実施形態では、ステップＳ１３０２において、プリントコマンド生成部３０１は、プリントコマンド２０７を生成すると、そのプリントコマンド２０７をプリントコマンド保存部３０３に常に保存する。従って、プリントコマンド保存判定部３０２は、プリントコマンド２０７を保存したページ数Ｐｓａｖｅに１を加算する（ステップＳ１３０４）。
次に、受信部３００は、処理をしていない残りのページがあるか否かを判定する（ステップＳ１３０５）。この判定の結果、処理をしていない残りのページがない場合には、一部目のレンダーフィルター２０６の処理が終了する。
一方、処理をしていない残りのページがある場合、プリントコマンド保存判定部３０２は、次の処理を行う。すなわち、プリントコマンド保存判定部３０２は、プリントコマンド保存部３０３の空き容量に基づき、次のページのプリントコマンド２０７をプリントコマンド保存部３０３に保存できる否かを判定する（ステップＳ１３０６）。このステップＳ１３０６では、現在のページのプリントコマンド２０７のサイズ以上の空き容量があるか否かを判定したり、現在のページのプリントコマンド２０７のサイズよりも多少大きなサイズ以上の空き容量があるか否かを判定したりすることができる。
【００８９】
このようなステップＳ１３０６の判定の結果、次のページのプリントコマンド２０７をプリントコマンド保存部３０３に保存できる場合には、ステップＳ１３０１に戻り、次以降のページの処理を行う。
一方、次のページのプリントコマンド２０７をプリントコマンド保存部３０３に保存できない場合、プリントコマンド保存判定部３０２は、既に保存済みのプリントコマンド２０７のうち、不要なものを削除する処理を行った後、次以降のページの処理を行う。この不要なプリントコマンド２０７を削除する処理は、ステップＳ１３０７〜Ｓ１３１０で実行される。尚、この処理を、ステップＳ１３０２でプリントコマンド２０７の保存に失敗したタイミングで呼び出すようにしてもよい。
【００９０】
不要なプリントコマンド２０７を削除する処理として、まず、プリントコマンド保存判定部３０２は、保存済みプリントコマンドの２０７のうち、一番大きなパラメータＴｐに対応するページのプリントコマンド２０７を検索する（ステップＳ１３０７）。パラメータＴｐは、あるページを処理する場合に、プリンタ１１５の印刷処理に対し、プリントコマンド２０７の生成処理を先行して行うことが可能な時間を示す。従って、一番大きなパラメータＴｐに対応するページは、プリントコマンド２０７を生成するのに最も時間的な余裕があるページということになる。したがって、プリントコマンド保存判定部３０２は、検索したプリントコマンド２０７を削除して記憶制御を行う（ステップＳ１３０８）。
【００９１】
特定のページのプリントコマンド２０７を削除した場合、その前後のページのプリントコマンド２０７は、他のプリントコマンド２０７に比べ保存すべき優先度が高くなる。第１の実施形態で説明した通り、二部目以降の印刷処理では、プリントコマンド２０７の生成と転送とを並列して動作させる。したがって、出来るだけページ間隔が均等になるように、プリントコマンド２０７を保存したほうがよい。つまり、全ページのパラメータＴｐが等しい場合は、最終的にプリントコマンド２０７を保存するページ間隔は均等になっているのが好ましい。このため、プリントコマンド２０７を削除したページの前後のページでは、削除対象としての優先順位を下げる。
【００９２】
これを反映するため、プリントコマンド保存判定部３０２は、プリントコマンド２０７を削除したページの前後のページに対応するパラメータＴｐを修正する（ステップＳ１３０９）。パラメータＴｐを修正するページの範囲は、プリントコマンド２０７を削除したページの前後（Ｐａｌｌ／Ｐｓａｖｅ／２）ページとする。ここで、Ｐａｌｌは、ジョブの総ページ数を示す。Ｐｓａｖｅは、プリントコマンド２０７を保存したページ数であるが、この計算を行っている時点でプリントコマンド保存部３０３は一杯であるので、保存可能なページ数でもある。（Ｐａｌｌ／Ｐｓａｖｅ）ページ間隔でプリントコマンド２０７を保存した場合に、ページ間隔が均等になるようにプリントコマンド２０７を保存できるということになる。そこで、本実施形態では、プリントコマンド２０７を削除したページの前後（Ｐａｌｌ／Ｐｓａｖｅ／２）ページに対応するパラメータＴｐを調整することで、ページ間隔が出来るだけ均等になるようにプリントコマンド２０７を削除するようにする。
【００９３】
ここで、プリントコマンド保存判定部３０２は、該当するパラメータＴｐの値を一定値減らす等の方法で調整を行う。ただし、パラメータＴｐの値の減らし方は、このようなものに限定されない。例えば、プリントコマンド２０７を削除したページを中心とした正規分布のように、そのページから離れるほど小さくなるような値をパラメータＴｐから減算してもよい。
最後に、プリントコマンド保存判定部３０２は、プリントコマンド２０７を１ページ分削除したので、プリントコマンド２０７を保存したページ数Ｐｓａｖｅから１を減算する（ステップＳ１３１０）。
以上で、不要なプリントコマンド２０７を削除する処理は終了である。不要なプリントコマンド２０７を削除する処理（ステップＳ１３０６〜Ｓ１３１０）は、次のページのプリントコマンド２０７を保存することが可能になるまでを繰り返し行われる。
そして、残りのページが存在しなくなるまで、各ページのプリントコマンド２０７の保存と、不要なプリントコマンド２０７の削除とを繰り返す。最終的に削除されずに残ったページのプリントコマンド２０７が一部目の印刷処理で最終的に保存されるプリントコマンド２０７となる。
【００９４】
二部目以降の印刷処理は、図５に示す処理と同じようにして行うことができる。すなわち、プリントコマンド２０７が保存済みのページでは、そのプリントコマンド２０７を再利用してプリンタ１１５に送信し、プリントコマンド２０７が保存済みでないページでは、プリントコマンド２０７を再度生成してプリンタ１１５に送信する。
本実施形態では、第３の実施形態と同様に、一部目の印刷処理が終了した段階で、既にプリントコマンド保存部３０３の利用可能な容量を略使い切る形でプリントコマンド２０７を保存する形となる。そのため、本実施形態の基本動作の一例の概略は、第３の実施形態と同様に、図１２に示したようになる。
【００９５】
本実施形態では、一部目の印刷処理が完了した時に、５ページのプリントコマンド２０７の保存が完了する形となる。実際に保存すると判断するページは、ステップＳ１３０９の調整値により変わるが、図１２に示す通り、プリントコマンド２０７の生成負荷が高い５〜９ページ目で多めに、それ以外のページで少なめに、プリントコマンド２０７を保存するページであると判断する。図１２に示す通り、二部目の印刷処理における“プリントコマンド２０７の生成処理時間”は、プリンタ１１５の最高（最短）印刷時間よりも短くなり、且つ全てのページにおいて印刷完了までにプリントコマンド２０７の生成が完了している。結果的に、二部目以降の印刷処理では、全てのページをプリンタ１１５の最高印刷時間で印刷することが可能である。
また、本実施形態では、プリントコマンド保存部３０３の記憶領域に保存できないと判断するまで、プリントコマンド２０７を保存し続ける。これにより、どれだけプリントコマンド２０７の生成時間に余裕があろうとも、可能な範囲でプリントコマンド２０７を保存することができる点が特徴の一つである。
【００９６】
尚、前述した各実施形態では、一度生成したプリントコマンド２０７を記憶領域に保存しておき、同一ページの印刷要求の際にそれを再利用するようにした。ここで、プリントコマンド２０７は、通常、プリンタ１１５が理解可能な描画命令を示す。しかしながら、保存する際のサイズや負荷分散の観点から、プリントコマンド２０７を生成する過程のデータを記憶領域に保存するようにしてもよい。この場合、記憶領域からデータを読み出した後、残りの処理を完了してプリントコマンド２０７を生成し、生成したプリントコマンド２０７をプリンタ１１５に供給することになる。
【００９７】
（本発明の他の実施形態）
前述した本発明の実施形態における印刷制御装置を構成する各手段、並びに印刷制御方法の各ステップは、コンピュータのＲＡＭやＲＯＭなどに記憶されたプログラムが動作することによって実現できる。このプログラム及び前記プログラムを記録したコンピュータ読み取り可能な記録媒体は本発明に含まれる。
【００９８】
また、本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。
【００９９】
尚、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラム（実施形態では図４、図５、図７、図９、図１１、図１３に示すフローチャートに対応したプログラム）を、システムあるいは装置に直接、あるいは遠隔から供給するものを含む。そして、そのシステムあるいは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合も本発明に含まれる。
【０１００】
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【０１０１】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等の形態であってもよい。
【０１０２】
プログラムを供給するための記録媒体としては、例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷなどがある。また、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−Ｒ）などもある。
【０１０３】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
【０１０４】
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明に含まれるものである。
【０１０５】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【０１０６】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【０１０７】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
【０１０８】
尚、前述した各実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【図面の簡単な説明】
【０１０９】
【図１】本発明の第１の実施形態を示し、印刷システムのハードウェア構成の一例を示すブロック図である。
【図２】本発明の第１の実施形態を示し、印刷システムの機能的な構成の一例を示す図である。
【図３】本発明の第１の実施形態を示し、部単位の複数部印刷時におけるレイアウトフィルター及びレンダーフィルターの動作の概要の一例を説明する図である。
【図４】本発明の第１の実施形態を示し、部単位の複数部印刷を行う際のレンダーフィルターにおける一部目の処理の一例を説明するフローチャートである。
【図５】本発明の第１の実施形態を示し、部単位の複数部印刷を行う際のレンダーフィルターにおける二部目以降の処理の一例を説明するフローチャートである。
【図６】本発明の第１の実施形態を示し、印刷システムの動作の概略の具体例を説明する図である。
【図７】本発明の第２の実施形態を示し、部単位の複数部印刷を行う際のレンダーフィルターにおける一部目の処理の一例を説明するフローチャートである。
【図８】本発明の第２の実施形態を示し、ルックアップテーブルの一例を示す図である。
【図９】本発明の第２の実施形態を示し、部単位の複数部印刷を行う際のレンダーフィルターにおける二部目の処理の一例を説明するフローチャートである。
【図１０】本発明の第２の実施形態を示し、印刷システムの動作の概略の具体例を説明する図である。
【図１１】本発明の第３の実施形態を示し、部単位の複数部印刷を行う際のレンダーフィルターにおける一部目の処理の一例を説明するフローチャートである。
【図１２】本発明の第３の実施形態を示し、印刷システムの動作の概略の具体例を説明する図である。
【図１３】本発明の第４の実施形態を示し、部単位の複数部印刷を行う際のレンダーフィルターにおける一部目の処理の一例を説明するフローチャートである。
【符号の説明】
【０１１０】
２００  アプリケーション
２０３  ＸＰＳスプールファイル
２０４  フィルターパイプライン
２０５  レイアウトフィルター
２０６  レンダーフィルター
２０７  プリントコマンド
３００  受信部
３０１  プリントコマンド生成部
３０２  プリントコマンド保存判定部
３０３  プリントコマンド保存部
３０４  プリントコマンド転送部
【図１】
2010033284.tif 000003
【図２】
2010033284.tif 000004
【図３】
2010033284.tif 000005
【図４】
2010033284.tif 000006
【図５】
2010033284.tif 000007
【図６】
2010033284.tif 000008
【図７】
2010033284.tif 000009
【図８】
2010033284.tif 000010
【図９】
2010033284.tif 000011
【図１０】
2010033284.tif 000012
【図１１】
2010033284.tif 000013
【図１２】
2010033284.tif 000014
【図１３】
2010033284.tif 000015