(57)【特許請求の範囲】
【請求項１】
ＰＤＬデータを受信する受信手段と、
第１および第２のインタプリタと、
制御手段とを有する印刷装置であって、
前記第１のインタプリタは、前記受信手段で受信したＰＤＬデータの１ページ目を、当該第１のインタプリタによって描画される複数のページにおける最初のページとして解釈および描画し、
前記第２のインタプリタは、前記受信手段で受信したＰＤＬデータの２ページ目を、当該第２のインタプリタによって描画される複数のページにおける最初のページとして解釈および描画し、
前記第１のインタプリタは、当該第１のインタプリタにとっての前記最初のページの解釈において、全ページに対して特定の処理を適用することを指示する印刷設定コマンドを解釈した場合に、前記特定の処理が前記ＰＤＬデータに含まれる全ページに対して適用されるように、当該解釈した印刷設定コマンドを前記制御手段に通知するが、
前記第２のインタプリタは、当該第２のインタプリタにとっての前記最初のページの解釈において、全ページに対して特定の処理を適用することを指示する印刷設定コマンドを解釈しても、当該解釈した印刷設定コマンドを前記制御手段に通知しないことを特徴とする印刷装置。
【請求項２】
前記第１および第２のインタプリタは、前記制御手段によって異なるスレッドに割り当てられた同一のインタプリタであることを特徴とする請求項１に記載の印刷装置。
【請求項３】
前記第１のインタプリタは、前記１ページ目が無効ページである旨を検出した場合は特別に、当該第１のインタプリタにとっての前記最初のページにて解釈された全ページに対して特定の処理を適用することを指示する印刷設定コマンドを前記制御手段には通知せず、
前記第２のインタプリタは、前記１ページ目が無効ページである旨を検出した場合は特別に、当該第２のインタプリタにとっての前記最初のページにて解釈された全ページに対して特定の処理を適用することを指示する印刷設定コマンドを前記制御手段に通知することを特徴とする請求項１又は２に記載の印刷装置。
【請求項４】
印刷装置を、請求項１乃至３の何れか１項に記載の印刷装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷データの解釈を複数の解釈手段で行う技術に関する。
【背景技術】
【０００２】
従来から、複数のインタプリタ（解釈手段）を用いてページ単位で並列してＰＤＬデータを処理する印刷装置がある。特許文献１に開示される印刷装置では、複数のインタプリタが異なるページのＰＤＬデータを並列に解釈し、それらページの中間データを生成する。例えば第１のインタプリタが、１ページ目に含まれるＰＤＬコマンドの解釈とその中間データの生成を行い、第２のインタプリタが、２ページ目について、同様の処理を行う。そして、ラスタライザ−が中間データをラスタライズしてラスターイメージを生成し、全ページのラスタライズが終了する前に、ラスターイメージが生成されたページの印刷を適時開始することで、印刷完了を早める。
【０００３】
特許文献２に開示される印刷装置は、複数のインタプリタが、別々のページを解釈して中間データを生成する際に、それぞれのページに含まれる印刷設定コマンドを解釈してその解釈された印刷設定にしたがってそれぞれのページの中間データを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１４０３９号公報
【特許文献２】特開２０１０−１４９４２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＰＤＬコマンドには、全ページ（印刷ジョブ全体）に対して所定の処理を適用することを指示する印刷設定コマンド（ジョブ属性のＰＤＬ指定とも呼ばれる）がある。例えばステープル綴じ処理を全ページに対して適用することを指示するステープル綴じ指定のコマンドがジョブ属性のＰＤＬ指定の一例である。そのようなＰＤＬコマンドが含まれているＰＤＬデータを、従来の印刷装置のように、複数のインタプリタで並列して処理する場合を考えてみる。
【０００６】
例えば１ページ目にステープル綴じ指定のコマンドが含まれる場合、第１のインタプリタが１ページ目を解釈してステープル綴じ処理の設定を有効にする。このとき、第１のインタプリタによる１ページ目の処理が第２のインタプリタによる２ページ目よりも遅くても、印刷装置は、２ページ目を１ページ目よりも後に印刷するように制御するので、第２のインタプリタが処理する２ページ目にも綴じ処理を適用できる。つまり、１ページ目にステープル綴じ指定のコマンドが含まれていれば、２ページ目（以降）にもステープル綴じ処理を適用できる。
【０００７】
一方、２ページ目のみにステープル綴じ指定のコマンドが含まれる場合に次のようなことが起こり得る。第２のインタプリタがステープル綴じ指定のコマンドを解釈する前に、第１のインタプリタによる１ページ目の処理が完了して１ページ目が印刷されてしまう。そして第２のインタプリタが２ページ目に含まれる綴じ指定のコマンドを解釈して綴じ処理の設定を有効にしたとしても、１ページ目は既に印刷されてしまっているので、全ページに対してステープル綴じ処理を適用することができない。
【０００８】
つまり、複数の解釈手段で印刷データを並列解釈する印刷装置において、ジョブ全体に対する印刷設定コマンドが何ページ目に含まれているのかを考慮しないと、処理がジョブ全体に適用されたり、されなかったりと、動作に再現性がなくなってしまう。
【０００９】
そこで、本発明は、少なくとも上述のような不都合を防ぐ印刷装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の印刷装置は、ＰＤＬデータを受信する受信手段と、第１および第２のインタプリタと、制御手段とを有する印刷装置であって、前記第１のインタプリタは、前記受信手段で受信したＰＤＬデータの１ページ目を、当該第１のインタプリタによって描画される複数のページにおける最初のページとして解釈および描画し、前記第２のインタプリタは、前記受信手段で受信したＰＤＬデータの２ページ目を、当該第２のインタプリタによって描画される複数のページにおける最初のページとして解釈および描画し、前記第１のインタプリタは、当該第１のインタプリタにとっての前記最初のページの解釈において、全ページに対して特定の処理を適用することを指示する印刷設定コマンドを解釈した場合に、前記特定の処理が前記ＰＤＬデータに含まれる全ページに対して適用されるように、当該解釈した印刷設定コマンドを前記制御手段に通知するが、前記第２のインタプリタは、当該第２のインタプリタにとっての前記最初のページの解釈において、全ページに対して特定の処理を適用することを指示する印刷設定コマンドを解釈しても、当該解釈した印刷設定コマンドを前記制御手段に通知しないことを特徴とする。
【発明の効果】
【００１１】
ページ単位で並列に解釈処理を行う印刷装置において、ジョブ全体に所定の処理を適用するためのコマンドを含む印刷データを適切に扱うことができる。
【図面の簡単な説明】
【００１２】
【図１】画像形成装置のハードウェア構成図
【図２】画像形成装置のソフトウェア構成図
【図３】印刷データの記述例
【図４】シングルスレッドによるジョブ属性のＰＤＬ指定のシーケンス図
【図５】インタプリタの動作モードの説明図
【図６】ページ並列制御の基本的なシーケンス図
【図７】実施例１のページ並列制御のシーケンス図
【図８】実施例１のページ並列制御部のフローチャート
【図９】実施例１のＰＤＬ言語解釈部およびＤＬ生成部のフローチャート
【図１０】実施例２のページ並列制御のシーケンス図
【図１１】実施例２のページ並列制御部のフローチャート
【図１２】実施例２のＰＤＬ言語解釈部およびＤＬ生成部のフローチャート
【図１３】実施例３のページ並列制御のシーケンス図
【図１４】実施例３のＰＤＬ言語解釈部およびＤＬ生成部のフローチャート
【発明を実施するための形態】
【００１３】
以下、本発明の一つの実施形態について図面を用いて説明する。なお、本実施例ではＰＤＬデータの種類として、ＰｏｓｔＳｃｒｉｐｔ（ＰＳ）（登録商標）を例にして説明する。ＰＤＬデータは印刷データあるいは印刷ジョブとも呼ばれる。
【００１４】
ＰＳによる記述において指定可能な印刷属性は、各ページ単位で指定されるページ印刷属性（ページ属性）と、ジョブ単位で指定されるジョブ印刷属性（ジョブ属性）がある。
【００１５】
ページ印刷属性の印刷設定コマンド（ＰＤＬコマンド）は、ページ属性のＰＤＬ指定とも呼ばれ、全ページではなく、所定のページのみに特定の処理を適用するための印刷設定コマンドである。例えば、両面印刷の指定、画像シフトの指定、用紙色の指定などはページ単位で指定できるページ属性のＰＤＬ指定である。
【００１６】
またジョブ印刷属性の印刷設定コマンド（ＰＤＬコマンド）は、ジョブ属性のＰＤＬ指定とも呼ばれ、その印刷ジョブ全体（全ページ）に特定の処理を適用するための印刷設定コマンドである。例えば、パンチ処理やステープル綴じ処理などのフィニッシングの指定、製本印刷や集約印刷などのレイアウトの指定、画像シャープネスや出力解像度、カラーモードなどの描画品質の指定などはジョブ属性のＰＤＬ指定である。
【００１７】
なお、ＰＳでは、ページ属性およびジョブ属性のＰＤＬ指定は、ＰＤＬデータの任意のページの任意の場所にも記述することが許されている。また、そのＰＤＬ指定の解釈と、その解釈によってどのような処理を行うのかは、印刷装置が自由に制御可能になっている。
【００１８】
［実施例１］
＜画像形成装置のハードウェアブロック図＞
図１は本実施例の画像形成装置（印刷装置）の構成を説明するハードウェアブロック図である。図１において、１００はコントローラユニットで、画像信号やデバイス情報の入出力を制御する。
【００１９】
中央演算装置１０１は補助記憶装置１０３に記憶されたプログラムを主記憶装置１０２に読み出し、実行する。さらに、システムバス１０９に接続される各デバイスを中央演算装置１０１が統括的に制御する。中央演算装置１０１は並列処理を実現するために、ハードウェアとしてプロセッサを複数有するマルチコアＣＰＵを採用する。また、マイクロプロセッサとして、複数のプロセッサコアを備えているものでもよい。ハイパースレッディングのようなプロセッサ内のレジスタやパイプラインの空き時間を有効利用して１つのプロセッサをあたかも複数のプロセッサであるかのように見せる技術が利用出来るものを用いても良い。
【００２０】
主記憶装置１０２は、ＲＡＭであり、中央演算装置１０１の主メモリ、ワークメモリとして機能する。
【００２１】
補助記憶装置１０３は、ＨＤＤであり、大容量データを一時的あるいは長期的に保持する目的でも使用される。本発明の実施例においては、ページ単位で並列処理（以下、ページ並列）を実施する際にバッファ領域に中間データ（ＤｉｓｐｌａｙＬｉｓｔ、以下ＤＬ）を保存するが、この保存先が主記憶装置１０２または、補助記憶装置１０３となる。
【００２２】
ＮＩＣ（ネットワークインターフェースカード）１０４はネットワーク１０５に接続し、画像形成装置外部との印刷データやデバイス情報の入出力を担う。
【００２３】
ＲＩＰ（ラスターイメージプロセッサ）１０６は中間データであるＤＬをラスターイメージに変換する。この変換処理のことをラスタライズあるいはレンダリングと呼び、ＲＩＰのことをラスタライザ−とも呼ぶ。ＲＩＰ１０６は中央演算装置１０１により主記憶装置１０２および補助記憶装置１０３上に生成されたＤＬを高速かつ、中央演算装置１０１の実行と並列に、処理するものである。
【００２４】
デバイスＩ／Ｆ１０７は中央演算装置１０１の指示に基づき、ラスターイメージに基づく画像信号の送出、デバイス動作指示、デバイス情報の受信を行う。コントローラユニット１００はデバイスＩ／Ｆ１０７を介して、プリンタエンジン１０８に接続される。
【００２５】
プリンタエンジン１０８はコントローラユニット１００からの画像信号に基づく画像を印刷媒体（用紙）上に出力（印刷）する出力機であり、電子写真方式、インクジェット方式の何れでも構わない。
【００２６】
また不図示のフィニッシャーは、コントローラユニット１００に接続されており、制御信号をコントローラユニット１００から受信する。そしてその制御信号にしたがって、フィニッシャーは、プリンタエンジン１０８からの印刷物に対して、フィニッシング処理（ステープル綴じ処理やパンチ処理）を行う。なおこの制御信号は、後述のジョブ属性のＰＤＬ指定が有効にされたか否かに応じて、コントローラユニット１００によって出力される。例えば、後述のインタプリタが、全ページにステープル綴じ処理のＰＤＬ指定を有効ページの１ページ目（すなわち特定のページ）から解釈した場合に、コントローラユニット１００は、ステープル綴じ処理の実行を指示する制御信号をフィニッシャーに送る。なお、有効ページの２ページ目に含まれるステープル綴じ処理のＰＤＬ指定がイン他プリタによって解釈されたからと言って、それに起因して、ステープル綴じ処理の実行指示の制御信号をコントローラ１００がフィニッシャーに送ることは無い。
【００２７】
＜画像形成装置のソフトウェアモジュール図＞
図２は本実施例における画像形成装置のソフトウェアモジュール構成図である。図２に記載した各ソフトウェアモジュールは、プログラムとして補助記憶装置１０３に格納され、主記憶装置１０２にロードされ中央演算装置１０１により実行されるものである。なお以下のソフトウェアモジュールを実行する中央演算装置１０１は、主記憶装置１０２および補助記憶装置１０３にデータを一時的に記憶しながら、データを処理する。
【００２８】
ページ並列制御部２００は、ＰＳインタプリタ（以下、インタプリタ）２０１を複数スレッド立ち上げ、スレッド制御する。ページ並列制御部２００は、複数のページを並列処理するために、印刷データをページ単位に区切り、各スレッドへ処理対象とするページを割り当てる役割も担う。尚、本実施例ではスレッドを２つ立ち上げたものを想定しているため、インタプリタ２０１は２つ存在しているが、中央演算装置１０１のプロセッサコアが並列制御できる数だけスレッドを立ち上げ、インタプリタ２０１を割り当ててもよい。
【００２９】
インタプリタ２０１はＰＤＬ言語解釈部２０２と、ＤＬ生成部２０３からなり、印刷データを解釈して、中間データとしてＤＬを生成する。ＰＤＬ言語解釈部２０２は、ページ記述言語により記述されている印刷データの内容を解釈するデータ解釈部である。ＤＬ生成部２０３は、ＰＤＬ言語解釈部２０２により解釈された内容から、中間データ（ＤＬ）を生成する。
【００３０】
バッファ２０４は、複数のインタプリタ２０１によって生成されるＤＬをバッファリングする。ページ並列技術を採用すると、各スレッドが処理を完了する順番はページ順にはならず、ページ順において先のページ（例えば１ページ目）より後のページ（例えば２ページ目）の処理が先に完了する場合がある。しかし、印刷データはページ順に出力（印刷）する必要があるため、未処理のページが完了するまでのバッファリング領域として、このバッファ２０４を使用する。バッファ領域は主記憶装置１０２の一部を確保して使用するが、バッファリングできるほどの領域がない場合は、補助記憶装置１０３の一部を代替として用いても良い。
【００３１】
レンダリング部２０５は、バッファ２０４に格納されたＤＬを図１のＲＩＰ１０６に送る。ＲＩＰ１０６は、受け取ったＤＬを、ラスタライズする。
【００３２】
＜印刷データの記述例＞
図３は印刷データに記述される描画オブジェクトと印刷属性の記述例を示している。図３はＰＳコマンド（オペレーター）を用いた印刷データの記述例の一例である。Ｐａｇｅ１の部分では、ステープル指定、用紙サイズ指定、画像シャープネス（ＨＩＧＨ）指定を印刷属性としてＰＤＬ指定し、「Ｐａｇｅ：１」の文字列を定義している。Ｐａｇｅ２では、画像シャープネス（ＬＯＷ）指定を印刷属性としてＰＤＬ指定し、「Ｐａｇｅ：２」という文字列を定義している。Ｐａｇｅ３では、画像シャープネス（ＨＩＧＨ）指定を印刷属性としてＰＤＬ指定し、「Ｐａｇｅ：３」という文字列を定義している。Ｐａｇｅ４では、画像シャープネス（ＨＩＧＨ）指定を印刷属性としてＰＤＬ指定し、「Ｐａｇｅ：４」という文字列を定義している。ページの区切れ目には「ｓｈｏｗｐａｇｅ」オペレーターが用いられる。
【００３３】
＜ジョブ属性のＰＤＬ指定制御＞
図３の記述例で記述されている、ステープル、用紙サイズ、画像シャープネスに関する印刷属性は、本画像形成装置においては、ジョブ属性のＰＤＬ指定である。このジョブ属性のＰＤＬ指定は、ＰＤＬデータのどこに何度でも記述してよい仕様となっており、画像シャープネス指定は各ページに指定されている。印刷属性のＰＤＬ指定をジョブ属性とするか、ページ属性とするかは画像形成装置の構成に依存している。描画品質指定（本実施例では画像シャープネス指定）をページ単位切り替えるハード機構を持つ画像形成装置であれば、描画品質指定をページ属性として適用することができる。しかし、そのような画像ハード構成を持たない構成の画像形成装置の場合、描画品質指定はジョブ属性として扱う必要があり、そのＰＤＬ指定は１ページ目に記述されているものまでを有効とする。
【００３４】
図４はそのようなページ単位で描画品質指定を切り替えることができる機構を持たない画像形成装置における、シングルスレッドによるジョブ属性のＰＤＬ指定の制御のシーケンス図である。インタプリタ２０１は画像形成処理が開始されると、データの先頭から言語解釈処理を実行していく。１ページ目の言語解釈処理中に検知したジョブ属性のＰＤＬ指定は「最初のページ」で検知したジョブ単位のＰＤＬ指定であるため、全て制御部へ通知する。１ページ目の言語解釈処理が終了すると、続いて２ページ目以降も言語解釈処理を実行していくが、ジョブ属性のＰＤＬ指定を検知しても「最初のページ」で検知したジョブ単位のＰＤＬ指定では無いため、無効として制御部に通知しない。
【００３５】
これにより、１ページ目にＰＤＬ指定されたジョブ属性の印刷属性が全ページへ適用される。
【００３６】
＜ページ並列処理＞
本実施例は、印刷データのページ記述言語としてページ非独立（ページ依存）な記述が可能なＰＤＬ（具体的にはＰｏｓｔＳｃｒｉｐｔ）を採用した時のページ並列処理を対象としている。例えばＰｏｓｔＳｃｒｉｐｔは、別ページにも影響のある設定情報を、その別ページよりも前のページに記述できる。その為、ＰｏｓｔＳｃｒｉｐｔの印刷処理に対してページ並列技術を採用する場合、マルチスレッド処理する各スレッドのＰＤＬ言語解釈部２０２は、データの先頭ページからページ順に印刷データを言語解釈していく必要がある。
【００３７】
そのため本実施例では、図５に示す通り、インタプリタ２０１は２つの動作モードで処理を進める。１つ目はページスキップ処理であり、このときインタプリタ２０１はＰＤＬ言語解釈部２０２を用いた言語解釈処理を行うが、ＤＬ生成部２０３を用いたＤＬ生成を行わない。もう一つはページ描画処理であり、このときインタプリタ２０１はＰＤＬ言語解釈部２０２を用いた言語解釈処理と、ＤＬ生成部２０３を用いたＤＬ生成の両方を行う。ページスキップ処理は、ＤＬ生成処理を行わない分、処理を早く進めることができる。またページスキップ処理では、言語解釈処理を行っているので、ＤＬ生成の対象とするページ（生成ページと呼ぶ）の直前のページまでページスキップ処理を行っても、直前のページまでの設定情報を取得できる。そして、生成ページはページ描画処理で処理をすることで、直前のページまでに取得された設定情報および生成ページで取得された設定情報を反映したＤＬ生成を実行できる。言い換えれば、ページスキップ処理もページ描画処理も印刷データの先頭ページから各ページの言語解釈処理を行うため、生成ページに必要な情報が不足することはなく、正常に印刷処理をすることができる。
【００３８】
図６は、本実施例のページ並列処理の基本的なシーケンス図を示している。スレッドＡとして立ち上がっているページ並列制御部２００により、スレッドＢ１、スレッドＢ２が立ち上げられ、各スレッドにインタプリタ２０１が割り当てられる。処理が開始されると、インタプリタ２０１はページ並列制御部２００へ生成ページのページ番号を問い合わせる。
【００３９】
ページ並列制御部２００は、各スレッドの並列性を考慮して、それぞれのスレッドへ割り当てる生成ページのページ番号を通知する。図６の例では、スレッドＢ１にまず２ページ目を、スレッドＢ２に１ページ目を処理するように指示している。ページ並列制御部２００から生成ページが通知されると、インタプリタ２０１は生成ページまではページスキップ処理、生成ページはページ描画処理を行う。
【００４０】
スレッドＢ２は１ページ目が生成ページであるため、最初からページ描画処理を行う。スレッドＢ１は２ページ目が生成ページであるため、１ページ目はページスキップ処理、２ページ目はページ描画処理を行う。スレッドＢ２は１ページ目のページ描画処理が終わると、ページ並列制御部２００へＤＬ生成完了を通知した後、次の生成ページのページ番号を問い合わせる。ページ並列制御部２００は、図６の例では、このタイミングではまだ３ページ目の処理が指示できていないため、次の生成ページとして３ページ目をスレッドＢ２へ通知する。以下、同様にインタプリタ２０１はスレッドＢ１、Ｂ２のそれぞれにおいて、ページ並列制御部２００へ生成ページの問い合わせ、言語解釈処理、生成ページのＤＬ生成を繰り返す。
【００４１】
これにより、ページスキップ処理、ページ描画処理を切り替えながら最終ページになるまで処理を継続し、ページ並列処理を実現する。
【００４２】
図７は、実施例１における、マルチスレッドによるページ並列処理とジョブ属性のＰＤＬ指定の制御のシーケンス図である。ページ並列制御部２００は、各スレッドに割り当てるページ番号を管理、制御するページカウンタ値（ＯｕｔｐｕｔＰａｇｅ）をスレッド毎に保持している。図７の例では、スレッドＢ１にまず２ページ目を、スレッドＢ２に１ページ目を処理するように指示しているが、各スレッドのページカウンタ値ＯｕｔｐｕｔＰａｇｅＢ１に「２」、ＯｕｔｐｕｔＰａｇｅＢ２に「１」を格納する。ページ並列制御部２００から生成ページが通知されると、インタプリタ２０１は生成ページまではページスキップ処理、生成ページはページ描画処理を行う。
【００４３】
各スレッドは指示されたページのページ描画処理が終わると、ページ並列制御部２００へＤＬ生成完了を通知した後、次の生成ページのページ番号を問い合わせる。ページ並列制御部２００は、問い合わせのタイミングに応じて、次に処理すべき適切なページ番号を各スレッドへ通知し、各スレッドのページカウンタ値に指示したページ番号を格納していく。
【００４４】
ここで、スレッドＢ２は生成ページのページ番号として「１」が指示されており、１ページ目に対してページ描画処理を行う。このスレッドＢ２は、このページ描画処理時にジョブ属性のＰＤＬ指定を検知したとする。スレッドＢ２のインタプリタ２０１にとって、この１ページ目に対するページ描画処理は「初めて行うページ描画処理」であるので、スレッドＢ２は、検知したＰＤＬ指定の内容を、ページ並列制御部２００へ通知する。この時、ページ並列制御部２００は、各スレッドのページカウンタ値を参照し、ジョブ属性のＰＤＬ指定の通知が、どのページ番号のページについてページ描画処理を行っているスレッドからの通知かを判定する。このとき、通知しているスレッドがページ番号「１」のページのページ描画処理を行っているスレッドである場合は、ページ並列制御部２００は、通知されたジョブ属性のＰＤＬ指定を有効なものとして扱う。すなわち、この通知されたジョブ属性のＰＤＬ指定に基づいて、ジョブの印刷属性が決定される。たとえば、全てのページに対してステープル処理が行われる。
【００４５】
一方、スレッドＢ１は生成ページのページ番号として「２」が指示されており、１ページ目に対してページスキップ処理を行った後、２ページ目に対してページ描画処理を行う。このスレッドＢ１は、この２ページ目のページ描画処理時にジョブ属性のＰＤＬ指定を検知したとする。スレッドＢ１のインタプリタ２０１にとって、この２ページ目に対するページ描画処理は、「初めて行うページ描画処理」であるので、スレッドＢ１は、検知したＰＤＬ指定の内容を、ページ並列制御２００へ通知してしまう。この時も、ページ並列制御部２００は各スレッドのページカウンタ値を参照し、ジョブ属性のＰＤＬ指定の通知が、どのページ番号のページについてページ描画処理を行っているスレッドからの通知かを判定する。このときは、通知しているスレッドがページ番号「２」のページのページ描画処理を行っているスレッドであるため、ページ並列制御部２００は、通知されたジョブ属性のＰＤＬ指定を無効なものとして扱う。すなわち、２ページ目に画像シャープネスのジョブ属性のＰＤＬ指定があったとしても、このＰＤＬ指定はジョブ全体に反映されないので、１ページ目と２ページ目との画質が変わることを防げる。
【００４６】
以上のように、ページ単位の並列処理であっても、ページ並列制御部２００内で保持しているページカウンタ値を参照し、各スレッドから通知されるジョブ属性のＰＤＬ指定の有効、無効を切り替えることにより、ＰＤＬ指定の印刷属性を適切に扱える。本実施例では、マルチスレッドでページ並列処理を行う場合でも、複数ページのうちの１ページ目に記述されているジョブ属性のＰＤＬ指定だけを適切に有効にできる。
【００４７】
＜ページ並列制御部の制御フロー＞
次に図８を用いて、ページ並列制御部２００における、ページ並列処理のページ制御について説明する。ページ並列制御部２００では、ページ制御のための内部ページカウンタ値としてＯｕｔｐｕｔＰａｇｅとＴｏｔａｌＰａｇｅを持っている。ＯｕｔｐｕｔＰａｇｅは生成するインタプリタのスレッドの数だけ存在し、各スレッドがどのページ番号を処理しているかを管理するためのページカウンタ値である。ＴｏｔａｌＰａｇｅは現在どのページ番号までインタプリタへ指示がなされているかを管理するページカウンタ値であり、この値を用いて各スレッドへ生成ページのページ番号を通知する。印刷データがＮＩＣ１０４によって受信されると、中央演算処理装置１０１が補助記憶装置１０３に記憶されているプログラムを実行し、ページ並列制御部２００の実行スレッドＡを立ち上げることにより、本処理が開始される。なおＮＩＣ１０４によって受信された印刷データは、補助記憶装置１０３に格納される。
【００４８】
まず、Ｓ１０００において、ページ並列制御部２００は、印刷データを補助記憶装置１０３から取得する（読み出す）。
【００４９】
次に、Ｓ１００１において、ページ並列制御部２００は、後ほど説明する図９に示されるスレッドＢ１、Ｂ２を立ち上げ、インタプリタ２０１を割り当てる。すなわち、ページ並列制御部２００は、インタプリタ２０１の実行スレッドＢ１、Ｂ２を起動する。
【００５０】
次にＳ１００２において、ページ並列制御部２００は、初期化処理としてＴｏｔａｌＰａｇｅに０を設定する。
【００５１】
次にＳ１００３において、ページ並列制御部２００は、初期化処理としてＯｕｔｐｕｔＰａｇｅをＳ１００１で立ち上げたインタプリタスレッドの数だけ生成し、それぞれに０を設定する。
【００５２】
次にＳ１００４において、ページ並列制御部２００は、Ｓ１００１にて立ち上げたインタプリタ２０１からの通信を待つ。ここでは、インタプリタ２０１からの生成ページの問い合わせか、ジョブ属性のＰＤＬ指定か、ＤＬ生成完了通知のどれかの通信を待っている。このどれかの通信をインタプリタ２０１のスレッドから受信すると、Ｓ１００５へ処理を進める。
【００５３】
次にＳ１００５において、ページ並列制御部２００は、Ｓ１００４においてインタプリタ２０１から受信した通信が、生成ページの問い合わせだったかどうか判定する。生成ページの問い合わせだった場合は、Ｓ１００６へ処理を進める。生成ページの問い合わせではなかった場合は、Ｓ１００９へ処理を進める。
【００５４】
次にＳ１００６において、ページ並列制御部２００は、ＴｏｔａｌＰａｇｅに１を加算することで、インタプリタ２０１に通知する生成ページのページ番号を１ページ分進める。
【００５５】
次にＳ１００７において、ページ並列制御部２００は、問い合わせ元のインタプリタがどのスレッドで実行されているのかを判定し、そのスレッドに該当するＯｕｔｐｕｔＰａｇｅのカウンタ値にＴｏｔａｌＰａｇｅの値を代入する。
【００５６】
次にＳ１００８において、ページ並列制御部２００は、問合せ元のインタプリタ２０１のスレッドへ、ＴｏｔａｌＰａｇｅ（該当するＯｕｔｐｕｔＰａｇｅ）の値を通知する。例えばスレッドＢ１からの問合せであれば、ページ並列制御部２００は、スレッドＢ１のＯｕｔｐｕｔＰａｇｅの値を、スレッドＢ１に通知する。その後、Ｓ１００４へ処理を戻し、ページ並列制御部２００は、再度インタプリタ２０１からの通知を待つ。
【００５７】
次にＳ１００９において、ページ並列制御部２００は、Ｓ１００４においてインタプリタ２０１から受信した通信が、ジョブ属性のＰＤＬ指定の通知であったか判定し、そのスレッドに該当するＯｕｔｐｕｔＰａｇｅの値が「１」であるか判定する。つまり、印刷データの１ページ目に含まれるジョブ属性のＰＤＬ指定が通知されたかをページ並列制御部２００は判定している。ＯｕｔｐｕｔＰａｇｅの値が「１」であるジョブ属性のＰＤＬ指定の通知である場合はＳ１０１０へ進む。そうではない場合はＳ１０１１へ進む。
【００５８】
次にＳ１０１０において、ページ並列制御部２００は、Ｓ１００９において通知されたジョブ属性のＰＤＬ指定を有効として設定する。つまり、ページ並列制御部２００は、通知されたジョブ属性のＰＤＬ指定が、印刷データの１ページ目に含まれるものであれば、通知されたＰＤＬ指定をジョブ全体に適用する印刷属性として有効にする。
【００５９】
次にＳ１０１１において、ページ並列制御部２００は、Ｓ１００４においてインタプリタ２０１から受信した通信が、ＤＬ生成完了通知だったかどうか判定する。ＤＬ生成完了通知だった場合は、Ｓ１０１２へ処理をすすめる。ＤＬ生成完了通知でなかった場合、インタプリタ２０１からの通知は他の通知であったとしてＳ１００４へ戻り、処理を繰り返す。
【００６０】
次にＳ１０１２において、ページ並列制御部２００は、バッファ２０４によって管理されるバッファ領域へ、インタプリタ２０１によって生成されたＤＬをスプールする。
【００６１】
次に、Ｓ１０１３において、ページ並列制御部２００は、Ｓ１００４においてインタプリタ２０１から受信したＤＬ生成完了通知のページ番号までの全ＤＬ生成が完了しているか、判定する。例えばインタプリタ２０１によって生成されたＤＬがＮページ目のものである場合に、ページ並列制御部２００は、Ｎページ目よりも前のページまでのＤＬ（つまりＮ−１ページ目のＤＬ）の生成が完了しているかを判定する。全ＤＬ生成が完了している場合は、Ｓ１０１４へ処理を進める。全ＤＬ生成が完了していない場合は、Ｓ１００４へ戻り、処理を繰り返す。
【００６２】
次にＳ１０１４において、ページ並列制御部２００は、バッファ２０４に、バッファ領域にスプールされている全ＤＬを、ページ順に従ってレンダリング部２０５へ転送させる。バッファ２０４は、転送したＤＬをバッファ領域から削除して空き領域をつくる。
【００６３】
次にＳ１０１５において、ページ並列制御部２００は、印刷データに含まれる全ページ分のＤＬを転送したか判定する。この判定には、Ｓ１００１で立ち上げたスレッドＢ１、Ｂ２が停止しているか、で判定することが可能である。印刷データに含まれる全ページ分のＤＬを転送した場合は、Ｓ１０１６へ進む。印刷データに含まれる全ページ分のＤＬを転送できていない場合は、Ｓ１００４へ戻り、処理を繰り返す。
【００６４】
次にＳ１０１６において、ページ並列制御部２００は、自身のスレッドＡを停止し、本処理を終了する。
【００６５】
以上の処理により、ページ並列制御部２００による、ページ並列処理のページ制御が実施される。特にＳ１００９、Ｓ１０１０の処理によって、マルチスレッドによる複数のインタプリタでページ単位の並列処理を行う場合でも、印刷データに含まれる１ページ目のジョブ属性のＰＤＬ指定だけを適切に有効にすることができる。
【００６６】
＜インタプリタの並列ＤＬ生成制御のフロー＞
次に図９のフローチャートを用いて、インタプリタ２０１のスレッドＢ１、Ｂ２における並列ＤＬ生成制御のフローについて説明する。
【００６７】
図５のＳ１００２にて、ページ並列制御部２００からスレッドＢ１、Ｂ２が立ち上げられ、各スレッドへインタプリタ２０１の実行が割り当てられると、本処理が開始される。
【００６８】
まずＳ１１００において、インタプリタ２０１は、ページ並列制御部２００のＳ１００４へ生成ページのページ番号を問い合わせる。ページ並列制御部２００から、生成ページのページ番号が通知されると、Ｓ１１０１へ処理を進める。
【００６９】
次にＳ１１０１において、インタプリタ２０１は、ＰＤＬ言語解釈部２０２により、印刷データの言語解釈を、印刷属性のＰＤＬ指定か、ページ区切りコマンドか、印刷データのＥＯＦ（Ｅｎｄ  Ｏｆ  Ｆｉｌｅ）かを検知するまで実行する。解釈された結果（解釈済みのデータ）は、インタプリタ２０１によってＤＬ生成のために保持される。
【００７０】
次にＳ１１０２において、インタプリタ２０１は、言語解釈した結果、印刷データのＥＯＦを検知したか判定する。検知していない場合はＳ１１０３へ処理を進める。検知した場合は処理終了する。
【００７１】
次にＳ１１０３において、インタプリタ２０１は、言語解釈した結果、検知した印刷属性のＰＤＬ指定が、ページ属性のものか、ジョブ属性のものかを判定する。ジョブ属性のものである場合はＳ１１０４へ処理を進める。ページ属性のものである場合は、インタプリタ２０１は、そのページ属性のＰＤＬ指定に基づく印刷設定を行って、Ｓ１１０６へ処理を進める。すなわち、ページ属性のＰＤＬ指定は、後述するようにジョブ属性のＰＤＬ指定とは異なり、何ページ目に含まれていても、インタプリタ２０１に解釈されることによって、その設定による特定の処理が該当ページに適用できる。
【００７２】
次にＳ１１０４において、インタプリタ２０１は、現在処理しているページが、このインタプリタ２０１にとって「初めてページ描画処理を行うページ」であるかを判定する。現在処理しているページが、このインタプリタ２０１にとって「初めてページ描画処理を行うページ」である場合はＳ１１０５へ処理を進める。そうでない場合はＳ１１０６へ処理を進める。そしてＳ１１０５において、インタプリタ２０１は、検知したジョブ属性のＰＤＬ指定をページ並列制御部２００へ通知する。このようにＳ１１０４、Ｓ１１０５の処理フローによって、各インタプリタ２０１は、自身が「初めてページ描画処理を行うページ」に含まれるジョブ属性のＰＤＬ指定をページ並列制御部２００に通知することになる。そのため、印刷データの１ページ以外のページに含まれるジョブ属性のＰＤＬ指定が通知されてしまう可能性がある。しかし、図８のＳ１００９、Ｓ１０１０において、ページ並列制御部２００側で通知されるジョブ属性のＰＤＬ指定を有効とするか無効とするかを決定しているので、１ページ目以外のページに含まれるジョブ属性のＰＤＬ指定が有効となることは無い。
【００７３】
次にＳ１１０６において、インタプリタ２０１は、言語解釈した結果、生成ページのページ区切りコマンドを検知したか判定する。ページ区切りコマンドとは、ＰＳオペレーターでは「ｓｈｏｗｐａｇｅ」や「ｅｒａｓｅｐａｇｅ」、「ｃｏｐｙｐａｇｅ」などのオペレーターが該当する。ページ区切りコマンドを検知した場合、論理ページの１ページ分の言語解釈処理が完了したことを意味する。しかし、生成ページよりも前のページについてはページスキップ処理を行うため、生成ページよりも前のページのページ区切りコマンドを検知した場合には、処理をＳ１１０１に戻す。そうではなく、生成ページのページ区切りコマンドを検知した場合には、インタプリタ２０１は、Ｓ１１０７へ処理を進める。
【００７４】
次にＳ１１０７において、インタプリタ２０１は、ＤＬ生成部２０３により、Ｓ１１０１において保持しておいた解釈済みのデータから、生成ページのＤＬを生成する。
【００７５】
次にＳ１１０８において、インタプリタ２０１は、ページ並列制御部２００のＳ１００４へ生成ページのＤＬ生成が完了したことを通知する。
【００７６】
以上の処理により、インタプリタ２０１による、スレッドＢ１、Ｂ２における並列ＤＬ生成制御が実施される。
【００７７】
以上、これまで説明したように、本実施例におけるマルチコアＣＰＵを採用した中央演算処理装置１０１を備える画像形成装置は、ページ並列制御部２００が各スレッドに指示しているページ番号を管理するページカウンタ値を保持する。そのページカウンタ値参照して、各スレッドに割り当てられたインタプリタ２０１から通知されるジョブ属性のＰＤＬ指定の有効、無効を判定する。ページ並列制御部はページカウンタ値「１」を割り当てたスレッドからのジョブ属性のＰＤＬ指定のみを有効とする。これにより、ページ単位で並列処理することで生じうるジョブ属性のＰＤＬ指定の通知の不都合を防ぐことが可能となる。
【００７８】
［実施例２］
実施例１では、ページ並列制御部２００が、各スレッドに通知している生成ページのページ番号を保持するページカウンタ値（ＯｕｔｐｕｔＰａｇｅ）を持つ。そしてページ並列制御部２００は、その値に基づいてインタプリタ２０１から通知される、ジョブ属性のＰＤＬ指定の有効、無効を切り替えていた。実施例２では、インタプリタ２０１側で、ページ並列制御部２００から通知された生成ページのページ番号をページカウンタ値（後述のＴａｒｇｅｔＰａｇｅ）で管理する。そしてインタプリタ２０１は、その値を用いて、ジョブ属性のＰＤＬ指定をジョブ並列制御部２００に通知するか否かを決める。
【００７９】
＜ページ並列処理＞
図１０は実施例２における、マルチスレッドによるページ並列制御のシーケンス図である。実施例２においては、インタプリタ２０１は上述のページカウンタ値（ＴａｒｇｅｔＰａｇｅ）をスレッド毎に保持している。図７の例と同様、ページ並列制御部２００は、インタプリタ２０１のスレッドＢ１に２ページ目を、スレッドＢ２に１ページ目を、生成ページとして通知する。すると各インタプリタのスレッドＢ１、Ｂ２は、自身のページカウンタ値（ＴａｒｇｅｔＰａｇｅ）に、通知された生成ページのページ番号「２」、「１」を格納する。
【００８０】
各スレッドＢ１、Ｂ２は生成ページのページ描画処理が終わると、ページ並列制御部２００へＤＬ生成完了を通知した後、次の生成ページのページ番号を問い合わせる。インタプリタ２０１は、その問合せの応答として通知されたページ番号で各スレッドのページカウンタ値（ＴａｒｇｅｔＰａｇｅ）を更新する。
【００８１】
スレッドＢ２はページ番号「１」が通知されており、１ページ目のページ描画処理時にジョブ属性のＰＤＬ指定を検知したとする。その際に、現在の生成ページのページ番号が何なのか、ページカウンタ値（ＴａｒｇｅｔＰａｇｅ）を参照して、ページ並列制御部２００に、１ページ目の言語解釈によって検知したＰＤＬ指定を通知するか判定する。ページカウンタ値が「１」である場合、ページ並列制御部２００に、検知したＰＤＬ指定を通知する。そうでない場合は通知しない。図１０の例では、このタイミングではスレッドＢ２のページカウンタ値には「１」が格納されているため、ページ並列制御部２００へ、検知したＰＤＬ指定を通知する。
【００８２】
一方、スレッドＢ１はページ番号「２」が生成ページとして通知されており、１ページ目をページスキップ処理した後、２ページ目をページ描画処理する。スレッドＢ１は、この２ページ目のページ描画処理時にジョブ属性のＰＤＬ指定を検知するとする。この際、スレッドＢ１のページカウンタ値には「２」が格納されているため、検知したＰＤＬ指定をページ並列制御部２００に通知しない。
【００８３】
以上のように、ページ単位の並列処理時に、各インタプリタ２０１は、自身が保持しているページカウンタ値を参照し、各スレッドで検知したジョブ属性のＰＤＬ指定を通知するか否かを切り替える。これにより、ＰＤＬ指定の印刷属性の正しい制御を実現する。
【００８４】
＜ページ並列制御部の制御フロー＞
次に図１１を用いて、実施例２についてページ並列制御部２００における、ページ並列処理のページ制御について説明する。処理フローとしてはほぼ実施例１と同様であるが、ページ並列制御部２００は、実施例１と異なり、ページ制御のための内部ページカウンタ値ＯｕｔｐｕｔＰａｇｅを保持していない。また、インタプリタ２０１からジョブ属性のＰＤＬ指定の通知が来た場合、ページ番号を意識することなく、ジョブ属性の印刷属性として設定する。これは、インタプリタ側で有効なジョブ属性のＰＤＬ指定かどうかを判定して、無効なものは通知しないように制御しているため、ページ並列制御部２００では意識する必要がないためである。以下、図１１の説明については、実施例１の図８のページ並列制御部２００の処理フローの説明と重複するステップが多いので、適宜、図８の処理フローを参照する。
【００８５】
図１１の処理フローは、印刷データがＮＩＣ１０４によって受信されると、中央演算処理装置１０１が補助記憶装置１０３に記憶されているプログラムを実行し、ページ並列制御部２００の実行スレッドＡを立ち上げることにより、本処理が開始される。なおＮＩＣ１０４によって受信された印刷データは、補助記憶装置１０３に格納される。
【００８６】
Ｓ２０００〜Ｓ２００２、Ｓ２００３〜Ｓ２００５の処理は、図８のＳ１０００〜Ｓ１００２、Ｓ１００４〜Ｓ１００６と同様の処理である。
【００８７】
Ｓ２００７において、ページ並列制御部２００は、Ｓ２００３においてインタプリタ２０１から受信した通信が、ジョブ属性のＰＤＬ通知であったか判定する。ジョブ属性のＰＤＬ指定通知である場合はＳ２００８へ、そうではない場合はＳ２００９へ進む。
【００８８】
Ｓ２００８〜Ｓ２０１４の処理は、図８のＳ１０１０〜Ｓ１０１６と同様の処理である。
【００８９】
以上の処理により、実施例２についてページ並列制御部２００による、ページ並列処理のページ制御が実施される。
【００９０】
＜インタプリタの並列ＤＬ生成制御のフロー＞
次に図１２のフローチャートを用いて、実施例２のインタプリタ２０１のスレッドＢ１、Ｂ２における並列ＤＬ生成制御のフローについて説明する。実施例２において、各インタプリタ２０１は内部ページカウンタとして、ＴａｒｇｅｔＰａｇｅのカウンタ値を持っている。ＴａｒｇｅｔＰａｇｅは現在の生成ページのページ番号を示すページカウンタ値である。インタプリタ２０１はページ並列制御部２００から生成ページのページ番号を受け取ると、ＴａｒｇｅｔＰａｇｅに値を格納して、処理を開始する。ＴａｒｇｅｔＰａｇｅの言語解釈処理時にジョブ属性のＰＤＬ指定を検知した場合、ＴａｒｇｅｔＰａｇｅに格納されている値が「１」である場合の時のみ、ページ並列制御部２００へ通知する。図１２の説明においても、図９のインタプリタ２０１の並列ＤＬ生成制御のフローと重複するステップが多数あるため、異なるステップに限定して説明する。図１１のＳ２００１にて、ページ並列制御部２００からインタプリタ２０１のスレッドＢ１、Ｂ２が立ち上げられると、本処理が開始される。
【００９１】
まずＳ２１００において、インタプリタ２０１は、初期化処理として、内部ページカウンタ値のＴａｒｇｅｔＰａｇｅを０に設定する。
【００９２】
Ｓ２１０２において、インタプリタ２０１は、Ｓ２１０１にてページ並列制御部２００から通知された生成ページのページ番号を内部ページカウンタ値のＴａｒｇｅｔＰａｇｅに格納する。
【００９３】
Ｓ２１０３、Ｓ２１０４の処理は、図９のＳ１１０１、Ｓ１１０２と同様の処理である。
【００９４】
Ｓ２１０５において、インタプリタ２０１は、ＴａｒｇｅｔＰａｇｅで示されるページに含まれるジョブ属性のＰＤＬ指定を検知したか判定する。ＴａｒｇｅｔＰａｇｅで示されるページに含まれるジョブ属性のＰＤＬ指定を検知した場合はＳ２１０６へ進む。そうでない場合はＳ２１０８へ処理を進める。
【００９５】
次にＳ２１０６において、インタプリタ２０１は、ＴａｒｇｅｔＰａｇｅに格納されている値が「１」であるか判定する。つまりインタプリタ２０１は、検知されたＰＤＬ指定が印刷データの１ページ目に含まれるものであるかを判定する。「１」である場合はＳ２１０７へ進む。「１」でない場合はＳ２１０８へ処理を進める。
【００９６】
Ｓ２１０７の処理は、図９のＳ１１０５と同様の処理である。
【００９７】
次にＳ２１０８において、インタプリタ２０１は、ＴａｒｇｅｔＰａｇｅで示されるページの言語解釈処理が完了したか判定する。完了した場合はＳ２１０９へ処理を進める。完了していない場合はＳ２１０３へ戻り、処理を繰り返す。
【００９８】
Ｓ２１０９の処理は、図９のＳ１１０７と同様の処理である。
【００９９】
次にＳ２１１０において、インタプリタ２０１は、ページ並列制御部２００によって行われる処理Ｓ２００３へ、ＴａｒｇｅｔＰａｇｅで示されるページのＤＬ生成が完了したことを通知する。
【０１００】
以上の処理により、インタプリタ２０１による、スレッドＢ１、Ｂ２における並列ＤＬ生成制御が実施される。
【０１０１】
以上、これまで説明したように、本実施例におけるマルチコアシステムを採用した中央演算処理装置１０１を備える画像形成装置は、インタプリタ２０１側で現在の生成ページのページ番号をページカウンタ値で管理する。そして、その値を用いて、ページ制御部２００へのＰＤＬ指定の通知を制御することにより、ページ単位で並列処理することで生じうるジョブ属性のＰＤＬ指定の通知の不都合を防ぐことを可能とする。
【０１０２】
［実施例３］
ＰＤＬ指定の中には、ページ内に記述された描画内容をクリアし、そのページを出力（印刷）しないようにするＰＤＬコマンド（無効ページコマンド）が存在する。このようなコマンドにしたがって、出力（印刷）が行われないページのことを無効ページと呼ぶ。一方、無効ページ以外の出力（印刷）されるページのことを有効ページと呼ぶ。本実施例では、１ページ目が無効ページであった場合に、次の有効ページに記載されているジョブ属性のＰＤＬ指定による印刷設定を有効にする。つまり、本実施例では、ＰＤＬデータに含まれる有効ページのうちで最初のページに含まれるジョブ属性のＰＤＬ指定のみを有効とする。なお、実施例１、２では、１ページ目が無効ページであることを想定していなかったため、単に１ページに含まれるジョブ属性のＰＤＬ指定のみを有効としていた。しかし、重要なのは、印刷装置が、ＰＤＬデータに含まれる最初の有効ページ（つまり有効ページの１ページ目）にジョブ属性のＰＤＬ指定が含まれているか否かを判定することである。そして、有効ページのうちの最初のページにジョブ属性のＰＤＬ指定が含まれている場合に限って、印刷装置は、そのＰＤＬ指定による設定を有効にするのが本明細書を通しての主題であることが理解される。
【０１０３】
このようなコマンドを無効ページオペレーターとも呼ぶ。ＰｏｓｔＳｃｒｉｐｔを例にとると、「ｅｒａｓｅｐａｇｅ」オペレーターや０が指定された「ＮｕｍＣｏｐｉｅｓ」オペレーターが無効ページオペレーターである。このようなページ記述を無効とするＰＤＬ指定が含まれている場合、この無効となるページ番号を考慮したジョブ属性のＰＤＬ指定の取り扱いをする必要がある。実施例３では、このような特異な印刷データのときでも正常にジョブ属性のＰＤＬ指定を取り扱い可能な実施例を説明する。
【０１０４】
無効ページを意味するＰＤＬ指定のＮｕｍＣｏｐｉｅｓの値が０となるＰＳコマンドはページ中のどこにでも記述することができる。一方、ｅｒａｓｅｐａｇｅはページ区切りコマンド（ＰｏｓｔＳｃｒｉｐｔでいうとｓｈｏｗｐａｇｅ、ｃｏｐｙｐａｇｅ、ｅｒａｓｅｐａｇｅ）としてページ区切りの最後に記述される。そのため、無効ページを検知するよりも前にジョブ属性のＰＤＬ指定を検知した場合、そのページが無効ページとなるかはページの最後、区切りコマンドを検知するまでは検定することができない。そこで、本実施例のインタプリタ２０１は、ジョブ属性のＰＤＬ指定を検知しても、即座にページ並列制御部２００に通知せず、一時的に保持して、ページ区切りコマンドを検知した時点で無効ページであるかを判定し、通知するかどうかを切り替える。
【０１０５】
具体的には、実施例２の構成を元として、インタプリタ２０１内にＴａｒｇｅｔＰａｇｅに加えて、無効ページの累計ページ数を管理するページカウンタ値（ＮｏｎＰａｇｅ）を保持させる。インタプリタ２０１がＴａｒｇｅｔＰａｇｅの言語解釈処理中にジョブ属性のＰＤＬ指定を検知した場合、そのＰＤＬ指定を一時保持する。また、無効ページを意味するＰＤＬコマンドを検知した場合、ＮｏｎＰａｇｅのページカウンタ値をインクリメントする。そして、ＴａｒｇｅｔＰａｇｅの言語解釈処理が全て終わったタイミングで、ＴａｒｇｅｔＰａｇｅとＮｏｎＰａｇｅとの差を算出し、その値が「１」である場合にページ並列制御部２００へジョブ属性のＰＤＬ指定を通知する。
【０１０６】
ページ並列制御部２００の処理フローは実施例２で説明した図１１の処理フローと同一であるため、ここでは説明を省略する。
【０１０７】
＜ページ並列処理＞
図１３は実施例３における、マルチスレッドによるページ並列制御のシーケンス図である。実施例３においては、インタプリタ２０１は現在の生成ページのページ番号を管理、制御するページカウンタ値（ＴａｒｇｅｔＰａｇｅ）に加えて、無効ページを管理するページカウンタ値（ＮｏｎＰａｇｅ）をスレッド毎に保持している。図７、図１０の例と同様、インタプリタ２０１のスレッドＢ１、Ｂ２のそれぞれは、２ページ目、１ページ目を生成ページとしてページ並列制御部２００から通知される。そして各スレッドＢ１、Ｂ２は、それぞれのページカウンタ値ＴａｒｇｅｔＰａｇｅに「２」、「１」を格納する。各スレッドは指示されたページのページ描画処理が終わると、ページ並列制御部２００へＤＬ生成完了を通知した後、次の生成ページのページ番号を問い合わせる。インタプリタ２０１は、指示されたページ番号を各スレッドのページカウンタ値に格納していく。
【０１０８】
スレッドＢ２はページ番号「１」を指示されており、１ページ目のページ描画処理時にジョブ属性のＰＤＬ指定を検知する。スレッドＢ２は、検知したＰＤＬ指定を一時的な記憶領域に保持しておく。また、無効ページを意味するコマンドを検知した場合、スレッドＢ２は、ＮｏｎＰａｇｅの値をインクリメントする。スレッドＢ２は、ＴａｒｇｅｔＰａｇｅのページ区切りコマンドを検知すると、ＴａｒｇｅｔＰａｇｅとＮｏｎＰａｇｅの値の差を算出し、その算出された差の値に基づいて、保持しておいたＰＤＬ指定をページ並列制御部２００に通知するか否かを判定する。差の値が「１」である場合、スレッドＢ２は、保持しておいたＰＤＬ指定をページ並列制御部２００に通知する。そうでない場合は通知しない。図１３の例では、１ページ目のページ区切りコマンドを検知したとき、スレッドＢ２のページカウンタ値ＴａｒｇｅｔＰａｇｅには「３」が格納されており、かつ無効ページを１ページ分、検知しているためＮｏｎＰａｇｅは「１」が格納されている。その差は「２」（＝ＴａｒｇｅｔＰａｇｅ−ＮｏｎＰａｇｅ）となるため、スレッドＢ２は、１ページ目で検知したジョブ属性のＰＤＬ指定をページ並列制御部２００へは通知しない。すなわち、無効ページのコマンドを検知した場合に、インタプリタ２０１は、そのコマンドが検知されたページが１ページ目であっても、ページ並列制御部２００へ通知しない。その結果、無効ページのコマンドを含むページのジョブ属性のＰＤＬ指定は有効化されない。
【０１０９】
一方、スレッドＢ１はページ番号「２」を指示されており、スレッドＢ１は、１ページ目をページスキップ処理した際、言語解釈して無効ページを検知し、ＮｏｎＰａｇｅに「１」を格納する。そしてスレッドＢ１は、ＴａｒｇｅｔＰａｇｅで示される生成ページである２ページ目のページ描画処理を行う。スレッドＢ１は、この２ページ目のページ描画処理時にジョブ属性のＰＤＬ指定を検知したとする。そしてスレッドＢ１は、２ページ目のページ区切りコマンドを検知すると、ＴａｒｇｅｔＰａｇｅの値「２」と、ＮｏｎＰａｇｅの値「１」との差は「１」となる。よって、スレッドＢ１は、この２ページ目で検知したジョブ属性のＰＤＬ指定を、ページ並列制御部２００へ通知する。すなわち、インタプリタ２０１は、無効ページのコマンドを含まないページのうちで最もページ番号が若いページに含まれるジョブ属性のＰＤＬ指定を、ページ並列制御部２００へ通知する。その結果、無効ページのコマンドを含まないページのうちで最もページ番号が若いページに含まれるジョブ属性のＰＤＬ指定が有効化される。
【０１１０】
以上のように、ページ単位の並列処理時であっても、インタプリタ２０１内で保持している２種類のページカウンタ値を参照し、その差から各スレッドで検知するジョブ属性のＰＤＬ指定の通知の有無を切り替える。これにより、ＰＤＬ指定の印刷属性の正しい制御を実現する。
【０１１１】
＜インタプリタの並列ＤＬ生成制御のフロー＞
次に図１４のフローチャートを用いて、実施例３のインタプリタ２０１のスレッドＢ１、Ｂ２における並列ＤＬ生成制御のフローについて説明する。実施例３において、各インタプリタ２０１は内部ページカウンタとして、ＴａｒｇｅｔＰａｇｅとＮｏｎＰａｇｅのカウンタ値を持っている。ＴａｒｇｅｔＰａｇｅは現在の生成ページのページ番号を示すページカウンタ値である。ＮｏｎＰａｇｅは無効ページを意味するＰＤＬ指定（無効ページオペレーター）が検知されたページ数をカウントするカウンタ値である。インタプリタ２０１はページ並列制御部２００から生成ページのページ番号を受け取ると、ＴａｒｇｅｔＰａｇｅに値を格納して、処理を開始する。１つのページにおいて１つ以上の無効ページを検知するとＮｏｎＰａｇｅの値を１だけインクリメントする。ジョブ属性のＰＤＬ指定を検知した場合、一時的にＰＤＬ指定内容を保持する。ページ区切りコマンドを検知、つまりＴａｒｇｅｔＰａｇｅの言語解釈処理が完了した時点で、ＴａｒｇｅｔＰａｇｅとＮｏｎＰａｇｅとの差を算出する。その値が「１」である場合の時のみ、ページ並列制御部２００へジョブ属性のＰＤＬ指定を通知する。図１４の説明においては、図９、および図１２のインタプリタ２０１の並列ＤＬ生成制御のフローと重複するステップが多数あるので、適宜、図９および図１２の説明を参照する。なおページ並列制御部２００の処理フローは実施例２の図１１の処理フローと同じである。
【０１１２】
Ｓ３１００の処理は、図１１のＳ２１００と同様の処理である。
【０１１３】
Ｓ３１０１において、インタプリタ２０１は、初期化処理として、内部ページカウンタ値のＮｏｎＰａｇｅを０に設定する。ＮｏｎＰａｇｅを０に設定することは、後述のＳ３１１２でページ並列制御部２００に通知されるジョブ属性のＰＤＬ指定が含まれるページとして、１ページ目を設定することと同義である。すなわち、インタプリタ２０１は、ジョブ属性のＰＤＬ指定が通知されるべき特定のページとして、１ページ目を設定する役割を果たす。
【０１１４】
Ｓ３１０２〜Ｓ３１０５の処理は、図１１のＳ２１０１〜２１０４と同等の処理である。
【０１１５】
Ｓ３１０６において、インタプリタ２０１は、言語解釈によって、無効ページオペレーターを検知したかどうか判定する。検知した場合はＳ３１０７１へ処理を進める。検知していない場合はＳ３１０８へ処理を進める。なお、言語解釈処理がなされている現在のページにおいて既に無効ページオペレーターが検知され、Ｓ３１０７１の処理が行われていれば、インタプリタ２０１は、処理をＳ３１０８に進める。
【０１１６】
Ｓ３１０７１において、インタプリタ２０１は、自身のＮｏｎＰａｇｅの値を１だけインクリメントする。ＮｏｎＰａｇｅを１だけインクリメントすることは、後述のＳ３１１２でページ並列制御部２００に通知されるジョブ属性のＰＤＬ指定が含まれるページとして、次のページを設定することと同義である。すなわち、インタプリタ２０１は、ジョブ属性のＰＤＬ指定が通知されるべき特定のページとして、最初の有効ページを設定する役割を果たす。
【０１１７】
続いてＳ３１０７２において、インタプリタ２０１は、言語解釈処理を行っている現在のページがＴａｒｇｅｔＰａｇｅで示されるページであるかを判定する。現在のページがＴａｒｇｅｔＰａｇｅで示されるページであると判定されれば、処理はＳ３１０２に進み、インタプリタ２０１はページ並列制御部２００に対して生成ページの問合せを行う。この問合せが行われると、ページ並列制御部２００は、その応答として、生成ページの新しいページ番号をインタプリタ２０１に通知することになる。その結果、インタプリタ２０１は、無効ページオペレーターを含むページのページ描画処理を行わない。一方、現在のページがＴａｒｇｅｔＰａｇｅで示されるページでないと判定されれば、処理はＳ３１０４に進み、ＴａｒｇｅｔＰａｇｅの更新を行わずに言語解釈処理が続行される。その結果、ページ並列制御部２００から通知された生成ページよりも前のページに無効ページオペレーターが含まれていたとしても、インタプリタ２０１は、通知された生成ページのページ描画処理を適切に行うことができる。
【０１１８】
Ｓ３１０８の処理は、図１２のＳ２１０５と同様の処理である。
【０１１９】
Ｓ３１０９において、インタプリタ２０１は、検知されたジョブ属性のＰＤＬ指定を一時的に保持しておく。
【０１２０】
Ｓ３１１０の処理は、図１２のＳ２１０８と同様の処理である。
【０１２１】
Ｓ３１１１において、インタプリタ２０１は、自身のＴａｒｇｅｔＰａｇｅに格納されている値と自身のＮｏｎＰａｇｅに格納されている値の差が「１」であるか判定する。「１」である場合はＳ３１１２へ進む。「１」でない場合はＳ３１１４へ処理を進める。すなわち、ここでインタプリタ２０１は、ＴａｒｇｅｔＰａｇｅで示されるページ番号のページが、無効ページを除くと、１ページ目（最初のページ）であるかを判定している。言い換えると、ＴａｒｇｅｔＰａｇｅで示されるページ番号のページよりも前のページは全て無効ページであったかが、このＳ３１１１で判定されている。
【０１２２】
Ｓ３１１２において、インタプリタ２０１は、Ｓ３１０９において保持しておいたジョブ属性のＰＤＬ指定をページ並列制御部２００に通知する。
【０１２３】
Ｓ３１１３、Ｓ３１１４の処理は、図１１のＳ２１０９、Ｓ２１１０と同様の処理である。
【０１２４】
以上の処理により、インタプリタ２０１による、スレッドＢ１、Ｂ２における並列ＤＬ生成制御が実施される。
【０１２５】
以上、これまで説明したように、本実施例におけるマルチコアシステムを採用した中央演算処理装置１０１を備える画像形成装置は、インタプリタ２０１側で現在の生成ページのページ番号をページカウンタ値で管理する。加えて無効ページを意味するＰＤＬ指定の検知をカウントするカウンタ値も保持する。２つのカウンタ値の差を用いて、ページ制御部２００へのＰＤＬ指定の通知を制御することにより、ページ単位で並列処理することで生じうるジョブ属性のＰＤＬ指定の通知の不都合を防ぐことを可能とする。
【０１２６】
［その他の実施例］
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【図１】
0006746326.tif 000002
【図２】
0006746326.tif 000003
【図３】
0006746326.tif 000004
【図４】
0006746326.tif 000005
【図５】
0006746326.tif 000006
【図６】
0006746326.tif 000007
【図７】
0006746326.tif 000008
【図８】
0006746326.tif 000009
【図９】
0006746326.tif 000010
【図１０】
0006746326.tif 000011
【図１１】
0006746326.tif 000012
【図１２】
0006746326.tif 000013
【図１３】
0006746326.tif 000014
【図１４】
0006746326.tif 000015