(57)【特許請求の範囲】
【請求項１】
印刷データの描画命令は実行せず、印刷データのリソースの展開命令に従いリソースを展開する第１のプロセッサと、
前記第１のプロセッサが展開したリソースを、前記第１のプロセッサ以外のプロセッサが印刷データを中間データへ変換する際に参照できるように管理する管理手段と、
印刷データのリソースの展開命令は実行せず、前記管理手段により管理されているリソースを参照して印刷データを中間データへ変換する第２のプロセッサとを有し、
印刷データを中間データへ変換する処理の際に使用するメモリのサイズを確認し、確認したメモリのサイズが閾値以上の場合、前記第１のプロセッサは、印刷データの描画命令は実行せず、印刷データのリソースの展開命令に従いリソースを展開し、前記第２のプロセッサは、印刷データのリソースの展開命令は実行せず、前記管理手段により管理されているリソースを参照して印刷データを中間データへ変換し、確認したメモリのサイズが閾値未満の場合、前記第１のプロセッサは、前記第１のプロセッサに振り分けられたページの印刷データのリソースを展開し、展開されたリソースを利用して印刷データを中間データへ変換し、前記第２のプロセッサは、前記第２のプロセッサに振り分けられたページの印刷データのリソースを展開し、展開されたリソースを利用して印刷データを中間データへ変換することを特徴とする印刷データ処理装置。
【請求項２】
前記第１のプロセッサによる印刷データのリソースの展開が終了した後に、前記第２のプロセッサが中間データへ変換が終了していないページの印刷データを、前記第１のプロセッサが中間データへ変換することを特徴とする請求項１に記載の印刷データ処理装置。
【請求項３】
印刷データをページ単位で中間データへ変換する第１のプロセッサと
前記第１のプロセッサが中間データへ変換している印刷データのページよりも後ろのページの印刷データを中間データへ変換する第２のプロセッサとを有し、
印刷データのｍページ目の中間データへの変換が終了した前記第１のプロセッサは、前記第２のプロセッサが中間データへ変換している印刷データのｎページ目よりも後ろのページの印刷データを中間データへ変換するためにｎページ目の印刷データを読み飛ばす際、前記第２のプロセッサがｎページ目の印刷データを中間データへ変換するために必要とする時間を予想し、予想した時間が規定時間以上の場合、前記第１のプロセッサは、前記第２のプロセッサにより展開が行われていないｎページ目の印刷データのリソースの展開処理を行うことを特徴とする印刷データ処理装置。
【請求項４】
第１のプロセッサは、印刷データをページ単位で中間データへ変換し、
第２のプロセッサは、前記第１のプロセッサが中間データへ変換している印刷データのページよりも後ろのページの印刷データを中間データへ変換し、
印刷データのｍページ目の中間データへの変換が終了した前記第１のプロセッサは、前記第２のプロセッサが中間データへ変換している印刷データのｎページ目よりも後ろのページの印刷データを中間データへ変換するためにｎページ目の印刷データを読み飛ばす際、前記第２のプロセッサがｎページ目の印刷データを中間データへ変換するために必要とする時間を予想し、予想した時間が規定時間以上の場合、前記第１のプロセッサは、前記第２のプロセッサにより展開が行われていないｎページ目の印刷データのリソースの展開処理を行うことを特徴とする印刷データ処理方法。
【請求項５】
第１のプロセッサに、印刷データをページ単位で中間データへ変換する処理を実行させ、
第２のプロセッサに、前記第１のプロセッサが中間データへ変換している印刷データのページよりも後ろのページの印刷データを中間データへ変換する処理を実行させ、
印刷データのｍページ目の中間データへの変換が終了した前記第１のプロセッサに、前記第２のプロセッサが中間データへ変換している印刷データのｎページ目よりも後ろのページの印刷データを中間データへ変換するためにｎページ目の印刷データを読み飛ばす際、前記第２のプロセッサがｎページ目の印刷データを中間データへ変換するために必要とする時間を予想させ、予想した時間が規定時間以上の場合、前記第１のプロセッサに、前記第２のプロセッサにより展開が行われていないｎページ目の印刷データのリソースの展開処理を行う処理を実行させることを特徴とする印刷データ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷データ処理装置、印刷データ処理方法、プログラムに関するものである。
【背景技術】
【０００２】
従来の画像形成装置には、入力された印刷データを分割し、複数のプロセッサで処理することで、画像形成を高速に行うものがある。（例えば、特許文献１参照）
ところで、印刷データの種類によっては、各ページから参照して利用できるフォントやイメージを、リソースとしてページ途中で生成することができる印刷データがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−１５２６２３
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述の印刷データを複数のプロセッサで処理する場合、リソースの生成と参照のタイミングが合わないと、一部のプロセッサはリソースが展開されるのを待つことが多くなる。
【課題を解決するための手段】
【０００５】
本発明の一実施形態に係る装置は、印刷データの描画命令は実行せず、印刷データのリソースの展開命令に従いリソースを展開する第１のプロセッサと、前記第１のプロセッサが展開したリソースを、前記第１のプロセッサ以外のプロセッサが印刷データを中間データへ変換する際に参照できるように管理する管理手段と、印刷データのリソースの展開命令は実行せず、前記管理手段により管理されているリソースを参照して印刷データを中間データへ変換する第２のプロセッサとを有し、印刷データを中間データへ変換する処理の際に使用するメモリのサイズを確認し、確認したメモリのサイズが閾値以上の場合、前記第１のプロセッサは、印刷データの描画命令は実行せず、印刷データのリソースの展開命令に従いリソースを展開し、前記第２のプロセッサは、印刷データのリソースの展開命令は実行せず、前記管理手段により管理されているリソースを参照して印刷データを中間データへ変換し、確認したメモリのサイズが閾値未満の場合、前記第１のプロセッサは、前記第１のプロセッサに振り分けられたページの印刷データのリソースを展開し、展開されたリソースを利用して印刷データを中間データへ変換し、前記第２のプロセッサは、前記第２のプロセッサに振り分けられたページの印刷データのリソースを展開し、展開されたリソースを利用して印刷データを中間データへ変換することを特徴とする。
【発明の効果】
【０００６】
１つのプロセッサが他のプロセッサのリソース展開を待つ状態を少なく抑えることができる。これによって印刷データをより効率的に中間データへ変換することが可能になる。
【図面の簡単な説明】
【０００７】
【図１】実施例１におけるハードウェア構成図。
【図２】実施例１で解析するＰＤＬの構成図。
【図３】実施例１における印刷データを中間データへ変換する処理を実行するソフトウェアモジュールの構成図。
【図４】一般的なＰＤＬのデータ構成図。
【図５】実施例１におけるＰＤＬ解析プログラムの印刷データ処理手順を示すフローチャート。
【図６】実施例２におけるＰＤＬ解析プログラムの印刷データ処理手順を示すフローチャート。
【図７】実施例３におけるＰＤＬ解析プログラムの印刷データ処理手順を示すフローチャート。
【図８】各実施例における効果を示す図。
【図９】リソース管理プログラムの処理手順を示すフローチャート。
【図１０】読み飛ばしたインストラクションの位置を示す図。
【発明を実施するための形態】
【０００８】
以下、本発明を実施するための最良の形態について図面を用いて説明する。
【実施例１】
【０００９】
実施例１について詳細に説明する。
【００１０】
図１は、実施例１におけるＭＦＰ（Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）のハードウェアの構成を示すブロック図である。
【００１１】
プロセッサ１  １００およびプロセッサ２  １０１は、印刷データであるＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）を解析する。そして、後述のハードウェアであるＲＩＰ（Ｒａｓｔｅｒ  Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｏｒ）部１０２が印刷データを描画できるよう、ＰＤＬ（印刷データ）に基づき中間データを生成する。なお、プロセッサ１  １０１およびプロセッサ２  １０１は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等により実現される。
【００１２】
ＲＩＰ部１０２は、前記中間データをラスタ画像に展開する。なお、ラスタ画像データはページメモリ１０３に逐次記憶される。
【００１３】
ページメモリ１０３は、ＲＩＰ部１０２が展開するラスタ画像を、一次的に保持する。また、後述する解析プログラム３０１、ページ振分プログラム３００、リソース管理プログラム３０２、リソーステーブル３０３も保持する。これらのプログラムを印刷データ処理プログラムと呼ぶ。なお、ページメモリ１０３は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）によって実現される。
【００１４】
パネル入出力制御部１０４は、操作パネルからの入出力を制御する。
【００１５】
記憶部１０５は、前述のＰＤＬを保持する。なお、記憶部１０５は、ハードディスク等の二次記憶装置によって実現される。記憶部１０５にＰＤＬを保持しておけば、ユーザが好きな時間に取り出して繰り返し出力することができる。
【００１６】
印刷制御部１０６は、ページメモリ１０３の内容をビデオ信号に変換処理し、プリンタエンジン部１０７へ画像を転送する。
【００１７】
プリンタエンジン部１０７は受け取ったビデオ信号を記録紙に印刷する箇所である。図３は、実施例１における、印刷データを中間データへ変換する処理を実行するソフトウェアモジュールを示す図である。
【００１８】
ページ振分プログラム３００は、ＰＤＬの各ページの処理を、複数の解析プログラムにどう振り分けるかを決定する。なお、ページ振分プログラム３００は、複数のプロセッサの内、どのプロセッサで動作させても良い。即ち、プロセッサ１  １００またはプロセッサ２  １０１でも良いし、それ以外の第３のプロセッサに動作させても良いということである。
【００１９】
解析プログラムは、印刷データで定義されている印刷命令を読み込み、印刷命令に従って印刷データを中間データへ変換する処理をプロセッサによって実行される。なお、この処理を解析と呼ぶ。また、解析プログラム３０１ａは、第１のプロセッサに相当するプロセッサ１  １００で動作し、解析プログラム３０１ｂは、第２のプロセッサに相当するプロセッサ２  １０１で動作する。
【００２０】
リソース管理プログラム３０２は、各ＣＰＵがリソースを共有できるよう、ＰＤＬに含まれる全リソースをユニークなリソースＩＤで一元管理する。リソースにユニークなＩＤを割り当てることで、リソース同士のリソースＩＤは重複しない。なお、リソース管理プログラム３０２は、複数のプロセッサの内、どのプロセッサで動作させても良い。即ち、プロセッサ１  １００またはプロセッサ２  １０１でも良いし、それ以外の第３のプロセッサに動作させても良いということである。なお、リソースとは、複数のページで構成されるＰＤＬを中間データへ変換する際に、繰り返し利用される一度展開されたデータのことである。
【００２１】
リソーステーブル３０３は、インデックス（３０４）と、リソースの付加情報示であるリソース情報（３０５ａ、３０５ｂ）と、ＰＤＬの各ページから利用される展開後のリソースであるリソースオブジェクト（３０６ａ、３０６ｂ）で構成される。
【００２２】
インデックス（３０４）は、リソースＩＤをインデックスとする構造体である。リソース情報（３０５ａ、３０５ｂ）は、例えばフォントの幅や高さなど、リソースの付加情報を格納する構造体である。リソースオブジェクト（３０６ａ、３０６ｂ）は、例えばフォントの形を示すビットマップで、リソースの本体データである。
【００２３】
リソーステーブル３０３に示すように、リソースＩＤとリソースオブジェクトは、リンクによって関連付けられる。図３では、インデックス３０４、リソース情報３０５ａ、リソースオブジェクト３０６ａがリンクされていて、リソースＩＤ＝０のリソースは３０６ａであることがわかる。同様に、リソースＩＤ＝１のリソースは３０６ｂである。
【００２４】
次に、リソース管理プログラム３０２によるリソースの管理処理について、図９のフローチャートを用いて説明する。
【００２５】
ステップＳ１００１において、リソース管理プログラム３０２は、解析プログラム（３０１ａ、３０１ｂ）からリソースの有無について問い合わせを受ける。
【００２６】
ステップＳ１００２において、リソース管理プログラム３０２は、解析プログラムが指定するリソースＩＤでリソーステーブル３０３のインデックス３０４を参照する。
【００２７】
ステップＳ１００３において、リソース管理プログラム３０２は、インデックスの参照がＮＵＬＬかどうか確認する。ＮＵＬＬの場合はステップＳ１００４へ進む。ＮＵＬＬでない場合はステップＳ１００６へ進む。なお、インデックスの参照がＮＵＬＬである場合、展開されたリソースはないということである。
【００２８】
ステップＳ１００４において、リソース管理プログラム３０２は、リソースの有無を問い合わせてきた解析プログラム（例えば、３０１ａ）に対し、リソースが未登録であること伝える。
【００２９】
ステップＳ１００５において、リソース管理プログラム３０２は、リソースの有無を問い合わせてきた解析プログラムが指定したリソースＩＤとリソースを、インデックス３０４、リソース情報３０５、リソースオブジェクト３０６で関連付ける。そして、リソーステーブルに登録する。
【００３０】
ステップＳ１００６において、リソース管理プログラム３０２は、解析プログラム（３０１ａ）が指定したリソースＩＤからインデックス３０４を参照し、リソースＩＤに該当するリソース情報とリソースオブジェクトを解析プログラムに渡す。
【００３１】
リソース管理プログラム３０２がこのように動作しリソースを管理することで、解析プログラム３０１ａ、３０１ｂでリソースを共有することができる。
【００３２】
次に、ＰＤＬの構成について図４を用いて説明する。ＰＤＬは、ページの開始／終了を示す命令、描画の指示を示す命令、リソースの展開／利用を示す命令等を含むインストラクション（印刷命令）と、各インストラクションに付随するデータで構成される。
【００３３】
ＰＤＬ解析プログラム３０１は、インストラクションを読み込み、インストラクションに従ってデータを加工し、中間データを生成する。なお、この一連の処理を実施例１では解析と呼ぶ。
【００３４】
また、実施例１において、ＰＤＬ解析プログラム３０１が解析するＰＤＬは、ＰＤＬにアクセスする仕様として、インストラクションをランダムに読み込む（ランダムアクセス）ことを許可しない。ＰＤＬ解析プログラム３０１が解析するＰＤＬは、シーケンシャルに読み込む（シーケンシャルアクセス）ことだけを許可するものである。シーケンシャルアクセスしかできないＰＤＬは、１ページ目を飛ばして２ページ目（４０２）にアクセスしたくとも、１ページ目（４０１）の先頭データからアクセスを開始しなくてはいけない。
【００３５】
シーケンシャルアクセスしかできないＰＤＬで、目的のページにより早くアクセスするため、インストラクションを読み込んでも実際には実行しなかったり、中身を確認すべきデータを読み捨てたりする技術がある。このように目的のページ、あるいはインストラクションに早くアクセスするための技術を、実施例１では「読み飛ばし」と呼ぶことにする。
【００３６】
図２は、実施例１において、解析プログラム１０１が解析するＰＤＬの構成を示す図である。
【００３７】
ＰＤＬ２００は、ページ２０１、ページ２０２、ページ３０３の３ページで構成される。ページ２０１には、各ページで利用できるリソースＲ０が圧縮された形で格納されている（ここでは、図示しない）。また、そのリソースを各ページで利用できるようにするための展開命令（２０１ａ）が含まれる。図２に示すＰＤＬにおいて、展開されたリソースＲ０は、ページ２０１とページ２０２で利用される（２０１ｂ、２０２ａ）。なお、展開とは、ＪＰＥＧ（Ｊｏｉｎｔ  Ｐｈｏｔｏｇｒａｐｈｉｃ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）形式等の圧縮されたイメージデータをＢｉｔｍａｐのイメージデータへ変換することや、文字コードを文字パターンへ変換することである。
【００３８】
同様に、ページ２０２には、リソースＲ１が圧縮された形で格納されていて（ここでは、図示しない）、リソースＲ１の展開命令（２０２ｂ）が含まれる。展開されたリソースＲ１は、ページ２０２とページ２０３で利用される（２０２ｃ、２０３ａ）。
【００３９】
この場合、ＰＤＬ解析プログラム３０１がリソースＲ０やリソースＲ１を利用する時には、それぞれのリソースが既に展開されている必要がある。しかし、ＰＤＬ解析プログラム３０１が複数のプロセッサで動作していて、複数のプロセッサ間でリソースを共有する場合、リソースの展開処理が間に合わないことがある。
【００４０】
例えば、複数のプロセッサの内、第１のプロセッサがページ２０１を、第２のプロセッサがページ２０２を解析すると考える。このとき、第２のプロセッサがリソースＲ０を利用したい場合に、第１のプロセッサがリソースＲ０の展開処理を終えていない状態がリソースの展開処理が間に合わないということである。
【００４１】
なお、ＰＤＬ解析プログラム３０１は、インストラクションを読み込んだときに展開するデータが複数のページで共有するリソースであるとわかる。なぜなら、インストラクションの中に、読み込んだインストラクションに付随するデータはリソースである、ということを示す情報が含まれているからである。
【００４２】
次に、実施例１における解析プログラムによる印刷データ処理手順を、図５に示すフローチャートを用いて説明する。
【００４３】
ステップＳ５０１において、ＰＤＬ解析プログラム３０１は、解析プログラム自身が管理、使用しているメモリのサイズを確認する。メモリサイズが予め規定された閾値以上の場合（例えば、３００ＭＢ以上の場合）は、ＰＤＬに含まれるリソースを展開して保持するためのメモリが豊富であると判断して、ステップＳ５０２へ進む。逆に、メモリサイズが閾値未満の場合（例えば、３００ＭＢ未満の場合）は、リソースを保持するためのメモリ容量が足りないと判断してステップＳ５０９へ進む。このように、メモリサイズに応じて解析プログラムのリソースの処理方法を変更することで、１つの解析プログラムが他の解析プログラムのリソース展開を待つ時間を少なく抑えることができる。これによってＰＤＬをより効率的に解析することが可能になる。
【００４４】
ステップＳ５０２において、ページ振分プログラム３００は、夫々の解析プログラムが担当する処理の役割を決める。実施例１では、解析プログラム３０１ａには先行してリソースの展開処理を、解析プログラム３０１ｂにはページ１から印刷命令を解析させ、印刷データを中間データへ変換する処理を任せている。
【００４５】
ステップＳ５０３において、解析プログラム３０１ａは、解析プログラム３０１ｂより先行して印刷データの印刷命令（例えば、描画命令）を実行せずにＰＤＬのリソース展開処理を行う。この際、前述した読み飛ばしの技術を利用するためリソース展開処理は、全ての印刷命令を解析して実行する処理よりも高速に行うことができる。なお、解析プログラム３０１ａは、解析プログラム３０１ｂが参照できるように、展開したリソースをリソーステーブルに登録しておく。
【００４６】
ステップＳ５０４において、解析プログラム３０１ｂは、解析プログラム３０１ａがリソースの先行処理を終えたページの解析処理を順次開始する。解析プログラム３０１ｂは、ＰＤＬのリソースの展開命令は実行せず、解析プログラム３０１ａが展開を行ったリソースを参照してＰＤＬを中間データへ変換する処理を行う。なお、万が一、解析プログラム３０１ｂが解析処理するページが、解析プログラム３０１ａがリソースを先行処理するページに追い付いた場合には次のように処理を行う。解析プログラム３０１ａが該当ページのリソースの先行処理を終了してから、解析プログラム３０１ｂが該当ページの解析処理を開始するという処理である。
【００４７】
ステップＳ５０５において、ページ振分プログラム３００は、解析プログラム３０１ａのリソース処理が終了したかどうかを確認する。終了していればステップＳ５０６へ進み、終了していなければステップＳ５０３の処理を繰り返す。即ち、解析プログラム３０１ａは、リソースの展開処理を実行する。
【００４８】
ステップＳ５０６において、ページ振分プログラム３００は、解析プログラム３０１ａに次ページ（解析プログラム３０１ｂが解析しているページの次のページ）の解析処理を担当させる。なお、リソース展開処理が終了した解析プロ部ラム３０１ａは、解析プログラム３０１ｂが解析しているページの中で、解析プログラム３０１ｂにまだ解析されていない印刷命令を実行しても良い。
【００４９】
ステップＳ５０７において、解析プログラム３０１ａと解析プログラム３０１ｂは、それぞれが担当しているページの解析処理を行う。
【００５０】
ステップＳ５０８において、ページ振分プログラム３００は、解析プログラム３０１ａと解析プログラム３０１ｂが全ページの解析処理を終了したかを判断する。終了していない場合は、ステップＳ５１０へ進む。
【００５１】
ステップＳ５１０において、ページ振分プログラム３００は、解析プログラム３０１ａと解析プログラム３０１ｂの解析状況を確認し、解析が終了した解析プログラムに次に解析が必要なページの解析を担当させる。
【００５２】
ステップＳ５０９において、ページ振分プログラム３００は、解析プログラムの担当を決める。ここでは、解析プログラム３０１ａにはページ１の解析処理を、解析プログラム３０１ｂにはページ２の解析処理を任せている。
【００５３】
図８（ａ）は、実施例１の効果を表すため、従来パフォーマンス（８０１）と実施例１のパフォーマンス（８０２）を示した図である。
【００５４】
図２に示した３ページ分のＰＤＬで、１ページ分のＰＤＬに含まれる全インストラクション、全データの処理を実行するのに必要な時間が１０秒とする。そのうちリソースの展開／利用命令など、リソースの処理が全体の３割（３秒）を占め、それ以外が７割（７秒）である。また、インストラクションやデータを読み飛ばす処理は、読み飛ばさない処理の２割の時間で済むとする。
【００５５】
この時、各ページのリソースだけを処理する時間は、リソースの処理（３秒）とリソース以外の処理（７秒）を読み飛ばす処理（７×２０％＝約１．４秒）の合計（４．４秒）となる。結果として、従来パフォーマンス８０１Ｔ１（３０秒）＞実施例１のパフォーマンス８０２Ｔ２（２０．２秒）となり、実施例１がＰＤＬ解析を効率的に行えることが確認できる。
【実施例２】
【００５６】
実施例２におけるＰＤＬ解析プログラム３０１の印刷データ処理手順を、図６に示すフローチャートを用いて説明する。なお、ハードウェアの構成、印刷データに基づいて中間データへ変換するソフトウェアの構成については、実施例１と同じなので説明を省く。
【００５７】
ステップＳ６０１において、ＰＤＬ解析プログラム１０１は、解析するＰＤＬにおけるリソースの位置を把握する。リソースの位置というのは、リソースの展開命令を含むインストラクションに付随するデータのことである。確認の結果、解析開始時にリソースの位置を把握できるＰＤＬであると確認された場合、処理はステップＳ６０２へ進み、そうでなければステップＳ６１０へ進む。なお、解析開始時にリソースの位置を把握できる具体的なＰＤＬの例としては、一般の電子文書フォーマットであるＸＰＳ（ＸＭＬ  Ｐａｐｅｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）が挙げられる。ＸＰＳに含まれるリソースは、リソース専用のフォルダ「Ｒｅｓｏｕｒｃｅｓ」内に格納されている。
【００５８】
解析するＰＤＬの特徴に応じて解析プログラムのリソースの処理方法を変更することで、１つの解析プログラムが他の解析プログラムのリソース展開を待つ時間を少なく抑えることができる。（実施例２のパフォーマンスについては、実施例１と同じなので省略）これによってＰＤＬをより効率的に解析することが可能になる。
【００５９】
ステップＳ６０２において、ページ振分プログラム３００は、夫々の解析プログラムが担当する処理の役割を決める。ここでは、解析プログラム３０１ａには先行してリソースを展開する処理を、解析プログラム３０１ｂにはページ１から印刷命令を解析させ、印刷データを中間データへ変換する処理を任せている。
【００６０】
ステップＳ６０３において、解析プログラム３０１ａは、解析プログラム３０１ｂより先行してＰＤＬのリソース展開処理を行う。この際、前述した読み飛ばしの技術を利用するためリソース展開処理は、全ての印刷命令を解析して実行する処理よりも高速に行うことができる。
【００６１】
ステップＳ６０４において、解析プログラム３０１ａがページ１のリソースの先行処理を終えると、解析プログラム３０１ｂがページ１の解析処理を開始する。以降、解析プログラム３０１ｂは、解析プログラム３０１ａがリソースの先行処理を終えたページの解析処理を順次行う。また、万が一、解析プログラム３０１ｂが解析処理するページが、解析プログラム３０１ａがリソースを先行処理するページに追い付いた場合には次のように処理を行う。解析プログラム３０１ａが該当ページのリソースの先行処理を終了してから、解析プログラム３０１ｂが該当ページの解析処理を開始するという処理である。
【００６２】
ステップＳ６０５において、ページ振分プログラム３００は、解析プログラム３０１ａのリソース処理が終了したかどうかを確認する。終了していればステップＳ６０６へ進み、終了していなければステップＳ６０５の処理を繰り返す。即ち、解析プログラム３０１ａは、リソースの展開処理を実行する。
【００６３】
ステップＳ６０６において、ページ振分プログラム３００は、解析プログラム３０１ａに次ページ（解析プログラム３０１ｂが解析しているページの次のページ）の解析処理を担当させる。なお、リソース展開処理が終了した解析プロ部ラム３０１ａは、解析プログラム３０１ｂが解析しているページの中で、解析プログラム３０１ｂにまだ解析されていない印刷命令を実行しても良い。
【００６４】
ステップＳ６０７において、解析プログラム３０１ａと解析プログラム３０１ｂは、それぞれが担当しているページの解析処理を行う。
【００６５】
ステップＳ６０８において、ページ振分プログラム３００は、解析プログラム３０１ａと解析プログラム３０１ｂが全ページの解析処理を終了したかを判断する。終了していない場合は、ステップＳ６０９へ進む。
【００６６】
ステップＳ６０９において、ページ振分部３００は、解析部３０１ａと解析部３０１ｂの解析状況を確認し、解析が終了した解析部に、次に解析が必要なページの解析を担当させる。
【００６７】
ステップＳ６１０において、ＰＤＬ解析プログラム１０１は、解析するＰＤＬを確認し、ＰＤＬ解析中に各リソースの再利用の有無が判断できるＰＤＬの場合はステップＳ６０２へ進み、そうでなければステップＳ６１１へ進む。
【００６８】
なお、リソースの再利用の有無が判断できるＰＤＬとしては、言語的に再利用を示すタグが導入されているＰＰＭＬ（Ｐｅｒｓｏｎａｌｉｚｅｄ  Ｐｒｉｎｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）が挙げられる。
【００６９】
ステップＳ６１１において、ＰＤＬ解析プログラム１０１は、解析するＰＤＬを確認し、解析開始時にリソースのライフサイクルを把握できるＰＤＬの場合はステップＳ６１２へ進み、そうでなければステップＳ６１３へ進む。
【００７０】
リソースのライフサイクルとは、展開したリソースが利用される範囲を示す。展開されたページ内だけで利用されるリソースの場合、そのライフサイクルはページ単位であり、展開されたページ以外でも利用されるリソースの場合、そのライフサイクルはジョブ単位となる。
【００７１】
ＰＣなどのドライバを通して生成するＰＤＬには、このようなライフサイクルの情報を任意に含めることが可能である。
【００７２】
ステップＳ６１２において、ＰＤＬ解析プログラム１０１は、ＰＤＬに含まれるリソースのライフサイクルを確認し、ライフサイクルがページならステップＳ６１３へ、そうでなければステップＳ６０２へ進む。リソースのライフサイクルがページであるＰＤＬの場合、解析プログラムが他の解析プログラムのリソース処理を気にする必要がなく、各ページを順次解析することが可能である。
【００７３】
ステップＳ６１３において、ページ振分プログラム３００は、解析プログラムの担当を決める。ここでは、解析プログラム３０１ａにはページ１の解析処理を、解析プログラム３０１ｂにはページ２の解析処理を任せている。
【実施例３】
【００７４】
実施例３では、解析するＰＤＬのページのデータ量が極端に多い場合に、ＰＤＬ解析プログラム３０１が行うリソースの処理方法について、図７のフローチャートを用いて説明する。なお、ハードウェアの構成、印刷データに基づいて中間データへ変換するソフトウェアの構成については、実施例１、２と同じなので説明を省く。
【００７５】
解析プログラム３０１ａがｍページ目を、解析プログラム３０１ｂがｎページ目を担当する。なお、ｎページ目はｍページ目よりも後ろのページである。また、図７は、印刷データのｎページ目のデータ量が規定のデータ量より多い場合の解析プログラム３０１ａおよび解析プログラム３０１ｂの処理である。
【００７６】
ステップＳ７０１において、ｍページ目の解析を終えた解析プログラム３０１ａは、ｍページ目よりも後ろの次の担当ページにアクセスする。解析プログラム３０１ａは、解析プログラム３０１ｂが解析をしているｎページ目のインストラクションやデータの読み飛ばしを行う。
【００７７】
ステップＳ７０２において、解析プログラム３０１ａは、ステップＳ７０１で読み飛ばしたｎページ目のインストラクションとデータから、そのインストラクションとデータを中間データへ変換するために必要とする処理時間を予想する。解析プログラム３０１ａは、予想した時間を加算していきｎページ目の予想処理時間を予想する。予想した予想処理時間が、読み飛ばしたｎページ目の印刷データを中間データへ変換するために必要とする時間である。なお、ステップＳ７０３において、解析プログラム３０１ａは、予め決めた一定の予想処理時間毎に読み飛ばしたインストラクションの位置を記録する。
【００７８】
図１０は、予想処理時間１０秒毎に読み飛ばしたインストラクションの位置を記録した様子を図示化したものである。★印１１０１、１１０２、１１０３、１１０４は、それぞれ予想処理時間１０秒、２０秒、３０秒、４０秒の時に読み飛ばしたインストラクションである。またインストラクション１１１１、１１１２、１１１３、１１１４は、リソースの展開命令を示すインストラクションで、続く黒い部分はそのインストラクションに対するデータ部分である。
【００７９】
ステップＳ７０４において、解析プログラム３０１ａは、予想処理時間と読み飛ばしたインストラクションを確認し、予想処理時間が規定時間以上であり、かつ、読み飛ばしたページがリソースを含むインストラクションなら、ステップＳ７０５へ進む。そうでなければステップＳ７０６へ進む。ステップＳ７０５において、解析プログラム３０１ｂは、読み飛ばす際に読み込んだ印刷命令の中で、リソースを含むインストラクションを確認し、リソースを含むインストラクションの位置を記録する。ステップＳ７０６において、解析プログラム３０１ｂは、ｍページの読み飛ばしが終了したか確認し、終了した場合はステップＳ７０７へ進む。終了してない場合は、ステップＳ７０１からステップＳ７０６の処理を繰り返す。
【００８０】
ステップＳ７０７において、解析プログラム３０１ａは、ｎページ目の予想処理時間が規定時間以上、かつ、ｎページ目に複数のページで共有するリソースがあるかどうかを確認する。予想処理時間が規定時間以上（例えば、予想処理時間が３０秒以上の場合）、かつ、リソースがある場合、解析プログラム３０１ａはｎページ目のリソース処理を肩代わりするためステップＳ７０８へ進む。そうでなければ解析プログラム３０１ａは、ｎページ目の読み飛ばしを終了し、ページ２の解析処理に移ることになる。
【００８１】
ステップＳ７０８において、解析プログラム３０１ａは、ステップＳ７０２で算出した予想処理時間と、ステップＳ７０３、Ｓ７０５で記録したインストラクションの位置記録から次の位置をきめる。次の位置とは、解析プログラム３０１ｂが展開を行っていないｎページ目のリソースの位置である。
【００８２】
図１０の例では、規定時間（３０秒）を超えるインストラクションであるインストラクション１１１３の位置から、リソースの展開処理を開始する。
【００８３】
ステップＳ７０９において、解析プログラム３０１ａは、決定された開始位置におけるインストラクション（実施例３で言えば、インストラクション１１１３）を読み込む。
【００８４】
ステップＳ７１０において、解析プログラム３０１ａは、インストラクションに含まれるリソースがリソース管理プログラム３０２に登録されてないことを確認する。登録されていなければステップＳ７１１へ進む。登録されている場合は、既に解析プログラム３０１ｂが登録したことを示すので、解析プログラム３０１ａによるｎページ目のリソース処理は終了する。
【００８５】
ステップＳ７１１において、解析プログラム３０１ａは、インストラクションに含まれるリソースを展開し、展開したリソースをリソース管理プログラムに登録する。
【００８６】
図８（ｂ）は、実施例３の効果を表すため、従来パフォーマンス（９０１）と実施例３のパフォーマンス（９０２）を示した図である。なお、Ｐ１はｎページ目であり、Ｐ２はｍページ目を解析した解析プログラム３０１ａが次に解析を担当するページである。
【００８７】
２ページで構成されるＰＤＬを想定し、ページの開始／終了命令、描画の指示命令、リソースの展開／利用命令など、ＰＤＬに含まれる全インストラクション、全データの処理を実行するのに必要な時間が、ｎページ目は４０秒、ｍページ目は５秒とする。
【００８８】
ｎページ目のリソースの展開／利用命令の処理は全体の３割（１２秒）を占め、それ以外が７割（２８秒）とする。また、インストラクションやデータを読み飛ばす処理は、読み飛ばさない処理の２割の時間で済むとする。
【００８９】
この時、解析プログラム１の処理としては、まずｎページ目の読み飛ばし（１０×８０％＝８秒）と処理時間の予想（ここでは２秒と仮定）がある。次にページ目の途中までの解析（ここでは４秒と仮定）と１ページ目の後半のリソースを処理する時間（６秒）。そして、最後に２ページ目の処理（５秒）がある。
【００９０】
結果として、従来パフォーマンス９０１Ｔ３（４５秒）＞実施例３パフォーマンス９０２Ｔ４（３９秒）となり、実施例３がＰＤＬ解析を効率的に行えることが確認できる。
【００９１】
実施例３で示したように、解析するページに応じて解析プログラムのリソースの処理方法を変更することで、１つの解析プログラムが他の解析プログラムのリソース展開を待つ時間を少なく抑えることができる。これによってＰＤＬをより効率的に解析することが可能になる。
【００９２】
なお、実施例３の解析プログラム３０１ａはｍページ目の解析を終了している状態であった。しかし、解析プログラム３０１ａが２ページ目の解析を担当するために、解析プログラム３０１ｂが解析をしている１ページ目を読み飛ばす状況においては次のようになる。解析プログラム３０１ａはどのページの印刷データも解析していない状態でｎページ目のリソース展開を行う。
【００９３】
なお、以上説明した各実施例では、解析プログラムを２つ実行したが、それ以上実行しても良い。その場合、第１のプロセッサと第２のプロセッサ以外の第３のプロセッサが必要となる。
【００９４】
また、以上説明した各実施例では、ＣＰＵを２つ用いて解析プログラムを２つ実行したが、マルチコアプロセッサのＣＰＵを１つ用いて解析プログラムを２つ実行しても良い。この場合、夫々の解析プログラムは、コアプロセッサを１つずつ用いて実行される。なお、コアプロセッサとは、プロセッサの中にある命令発行器や演算器などを組み合わせて動作する集合体のことであり、マルチコアプロセッサとは、コアプロセッサを複数有するプロセッサのことである。
【００９５】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００９６】
１００、１０１  プロセッサ
３００  ページ振分プログラム
３０１ａ、３０１ｂ  解析プログラム
３０２  リソース管理プログラム
３０３  リソース管理テーブル
【図１】
0005424778.tif 000002
【図２】
0005424778.tif 000003
【図３】
0005424778.tif 000004
【図４】
0005424778.tif 000005
【図５】
0005424778.tif 000006
【図６】
0005424778.tif 000007
【図７】
0005424778.tif 000008
【図８】
0005424778.tif 000009
【図９】
0005424778.tif 000010
【図１０】
0005424778.tif 000011