(57)【要約】      （修正有）【課題】最適な印刷パフォーマンスを実現できる汎用プリンタドライバとそれを有するプリンタシステムを提供する。【解決手段】印刷コマンドから所定の印刷範囲毎の中間コードを生成し，プリンタのコントローラに当該中間コードを出力し，当該コントローラに中間コードからビットマップ画像データを展開させるプリンタシステムにおけるプリンタドライバである。汎用プリンタドライバが選択されたプリンタからそれぞれ最適の事前展開タイミング決定パラメータを受信し，そのパラメータに基づいて中間コードの生成で良いか，それともプリンタに出力する前に事前にビットマップ画像データに展開する必要があるかを判断することができる。それにより，最適なタイミングで事前展開に切り換えることができ，全体の印刷スループットを向上させることができる。【選択図】図２
2006293561.tif 000002
【特許請求の範囲】
【請求項１】
印刷コマンドから所定の印刷範囲毎の中間コードを生成し，プリンタのコントローラに当該中間コードを出力し，当該コントローラに前記中間コードからビットマップ画像データを展開させるプリンタシステムにおけるプリンタドライバであって，
選択されたプリンタに問い合わせして当該プリンタから事前展開タイミング決定パラメータを受信する手順と，
前記印刷コマンドから所定の印刷範囲毎の中間コードを生成する手順と，
前記事前展開タイミング決定パラメータに基づいて，前記中間コードに代えてビットマップ画像データに事前展開すべきか否かを判定する手順と，
事前展開すべき場合に前記印刷コマンドから前記ビットマップ画像データに展開する手順と，
前記中間コードまたは前記事前展開したビットマップ画像データをプリンタに出力する手順とを，コンピュータに実行させるプリンタドライバ。
【請求項２】
請求項１において，
前記事前展開タイミング決定パラメータは，前記中間コードに対応し，前記プリンタのコントローラが中間コードからビットマップ画像データを展開するのに必要な負荷を示す負荷係数テーブルと，前記事前展開の判定基準を示す負荷閾値とを有し，
前記判定手順では，前記所定の印刷範囲内の中間コードを前記負荷係数に応じて求められる負荷評価値を累積し，当該累積負荷評価値が前記負荷閾値を超えるか否かにより前記判定を行うプリンタドライバ。
【請求項３】
請求項１において，
前記事前展開タイミング決定パラメータは，前記プリンタのビットマップ画像データの展開メモリのサイズに対応し，前記事前展開の判定基準を示すメモリサイズを有し，
前記判定手順では，前記所定の印刷範囲内の中間コードのデータサイズを累積し，当該累積データサイズが前記メモリサイズを超えるか否かにより前記判定を行うプリンタドライバ。
【請求項４】
請求項１において，
前記問い合わせをしたプリンタから前記事前展開タイミング決定パラメータを受信しない場合は，前記判定手順では，初期値パラメータに基づいて前記事前展開の判定を行うプリンタドライバ。
【請求項５】
請求項１において，
さらに，前記問い合わせをしたプリンタから前記事前展開タイミング決定パラメータを受信しない場合は，前記印刷コマンドから前記中間コードを生成することなく，前記印刷コマンドを前記プリンタに出力する手順を，コンピュータに実行させるプリンタドライバ。
【請求項６】
印刷コマンドから所定の印刷範囲毎の中間コードを生成し，プリンタのコントローラに当該中間コードを出力するプリンタドライバと，当該コントローラが前記中間コードからビットマップ画像データを展開するプリンタとを有するプリンタシステムであって，
前記プリンタドライバは，
選択されたプリンタに問い合わせして当該プリンタから事前展開タイミング決定パラメータを受信する手順と，
前記印刷コマンドから所定の印刷範囲毎の中間コードを生成する手順と，
前記事前展開タイミング決定パラメータに基づいて，前記中間コードに代えてビットマップ画像データに事前展開すべきか否かを判定する手順と，
事前展開すべき場合に前記印刷コマンドから前記ビットマップ画像データに展開する手順と，
前記中間コードまたは前記事前展開したビットマップ画像データをプリンタに出力する手順とを，コンピュータに実行させるプリンタシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，プリンタドライバ及びそのプリンタシステムに関し，特に，ビットマップ画像データ展開のための中間コードを生成するプリンタドライバ及びそのプリンタシステムに関する。
【背景技術】
【０００２】
プリンタシステムは，ホストコンピュータ上で動作するプリンタドライバと，印刷エンジンとそれをコントロールするコントローラとからなるプリンタ（画像形成装置）とで構成される。プリンタドライバは，ホストコンピュータのオペレーティングシステム（ＯＳ）からの描画関数コールを受信してプリンタが認識できるプリンタ制御コードを生成する。プリンタ制御言語には，ページ記述言語（ＰＤＬ）または中間言語で記述された中間コードがある。プリンタドライバは，プリンタの処理能力が高い場合は，ページ記述言語を生成してプリンタに送信する。一方，プリンタの処理能力が低い場合は，ビットマップ画像データへの展開が容易な中間コードを生成してプリンタに送信する。
【０００３】
プリンタのコントローラは，ページ記述言語を受信する場合は，それから中間コードを生成し，印刷エンジンの動作に同期して中間コードからビットマップ画像データを展開しながら，その展開された画像データから生成した画像再生信号を印刷エンジンに出力する。また，中間コードを受信する場合は，コントローラは，その中間コードをメモリに格納しておき，印刷エンジンの動作に同期して中間コードからビットマップ画像データを展開し，画像再生信号を印刷エンジンに出力する。中間コードを利用することによりビットマップ画像データへの展開処理を短時間で可能にし，印刷エンジンの動作時間にその展開処理時間を吸収させることができ，全体の印刷スループットを短くすることができる。
【０００４】
かかる中間コードからなる印刷データを受信して画像形成するプリンタシステムについては，例えば特許文献１に記載されている。このプリンタシステムでは，プリンタが，ホストコンピュータからページ記述言語による印刷データが送信された場合と，中間コードの印刷データが送信された場合のいずれにも対応できるように構成されている。
【０００５】
一方で，近年において，プリンタの低コスト化の要請と，ホストコンピュータの能力増大の傾向に対応して，ホストコンピュータのプリンタドライバ側でできるだけ画像処理を行わせるホストベースのプリンタシステムが注目されている。かかるプリンタシステムでは，プリンタドライバが印刷コマンドから中間コードを生成してプリンタのコントローラに出力する。したがって，プリンタコントローラでは，ページ記述言語から中間コードへの変換処理が不要になる。
【特許文献１】特開平１０−４００３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来は，プリンタの機能及び性能に対して最適化された専用のプリンタドライバがホストコンピュータにインストールされるのが一般的である。しかしながら，ネットワーク内に複数のプリンタが設置される大規模ユーザにあっては，全てのプリンタに共通的に使用できる汎用プリンタドライバを使用することが，システム運用面での利便性を向上させる上で有利である。つまり，ネットワーク内の複数のコンピュータには，全て，汎用のプリンタドライバがインストールされ，その共通のプリンタドライバがネットワーク内の複数のプリンタに対して印刷データを生成する。これにより，ネットワーク内に新たなプリンタが設置されても，その都度，全てのコンピュータにその専用プリンタドライバをインストールする必要がなく，システム管理を容易にすることができる。
【０００７】
しかしながら，中間コードを生成しておき，プリンタエンジンの動作時間にビットマップ画像データへの展開処理時間を吸収させる方法の場合，プリンタエンジンへの印刷データの転送が間に合わなくなるオーバーランエラーを考慮して，ビットマップ画像データを事前に展開する必要がある。さらに，中間コードのデータ量が，展開されるビットマップ画像データのデータ量を超える場合のプリンタ側でのメモリ容量不足エラーを考慮して，ビットマップ画像データを事前に展開する必要がある。これらの事前展開は，いずれもプリンタドライバ側で行われる。
【０００８】
プリンタドライバでの事前展開のタイミングが早すぎる場合は，プリンタドライバ側で無駄に事前展開され，それに伴い印刷時間が長くなる。一方，タイミングが遅すぎる場合は，事前展開されずに中間コードのままプリンタに出力されるので，プリンタコントローラで上記オーバーランエラーが発生したりメモリ容量不足エラーが発生したりして，印刷エラーを招くおそれがある。
【０００９】
複数のプリンタに共通の汎用プリンタドライバを利用する場合，全てのプリンタに共通の事前展開タイミングを有するので，全てのプリンタに対して印刷エラーを回避するために，一定のマージンを見込んで事前展開タイミングを早めに設定する必要がある。そのため，印刷時間が長くなる傾向にある。
【００１０】
そこで，本発明の目的は，最適な印刷パフォーマンスを実現できる汎用プリンタドライバとそれを有するプリンタシステムを提供することにある。
【００１１】
さらに，本発明の別の目的は，最適なタイミングで中間コードの生成からビットマップ画像データへの事前展開に切り換えることができる汎用プリンタドライバとそれを有するプリンタシステムを提供することにある。
【課題を解決するための手段】
【００１２】
上記の目的を達成するために，本発明の第１の側面によれば，印刷コマンドから所定の印刷範囲毎の中間コードを生成し，プリンタのコントローラに当該中間コードを出力し，当該コントローラに前記中間コードからビットマップ画像データを展開させるプリンタシステムにおけるプリンタドライバであって，選択されたプリンタに問い合わせして当該プリンタから事前展開タイミング決定パラメータを受信する手順と，前記印刷コマンドから所定の印刷範囲毎の中間コードを生成する手順と，前記事前展開タイミング決定パラメータに基づいて，前記中間コードに代えてビットマップ画像データに事前展開すべきか否かを判定する手順と，事前展開すべき場合に前記印刷コマンドから前記ビットマップ画像データに展開する手順と，前記中間コードまたは事前展開したビットマップ画像データをプリンタに出力する手順とを，コンピュータに実行させることを特徴とする。
【００１３】
上記の第１の側面によれば，汎用プリンタドライバが選択されたプリンタからそれぞれ最適の事前展開タイミング決定パラメータを受信し，そのパラメータに基づいて中間コードの生成で良いか，それともプリンタに出力する前に事前にビットマップ画像データに展開する必要があるかを判断することができる。それにより，最適なタイミングで事前展開に切り換えることができ，全体の印刷スループットを向上させることができる。
【００１４】
なお，ここで，所定の印刷範囲毎とは，例えば，印刷プレーンを複数に分割したバンド毎にという意味である。また，事前展開のタイミングとは，順次生成される中間コードについて事前展開に切り換えるべきか否かを判断するタイミングという意味である。
【００１５】
上記第１の側面において，好ましい態様では，前記事前展開タイミング決定パラメータは，前記中間コードに対応し，前記プリンタのコントローラが中間コードからビットマップ画像データを展開するのに必要な負荷を示す負荷係数テーブルと，前記事前展開の判定基準を示す負荷閾値とを有し，前記判定手順では，前記所定の印刷範囲内の中間コードを前記負荷係数に応じて求められる負荷評価値を累積し，当該累積負荷評価値が前記負荷閾値を超えるか否かにより前記判定を行う。
【００１６】
この態様によれば，プリンタのコントローラでのビットマップ展開処理の負荷が大きい場合に，コントローラでオーバーランエラーが生じないようにするための，事前展開の最適な基準をプリンタから取得するので，選択されたプリンタに最適なタイミングで事前展開に切り換えることができる。
【００１７】
上記第１の側面において，好ましい態様では，前記事前展開タイミング決定パラメータは，前記プリンタのビットマップ画像データの展開メモリのサイズに対応し，前記事前展開の判定基準を示すメモリサイズを有し，前記判定手順では，前記所定の印刷範囲内の中間コードのデータサイズを累積し，当該累積データサイズが前記メモリサイズを超えるか否かにより前記判定を行う。
【００１８】
この態様によれば，プリンタのコントローラでのビットマップ展開処理においてメモリ不足による印刷エラーが生じないようにするための，事前展開の最適な基準をプリンタから取得するので，選択されたプリンタに最適なタイミングで事前展開に切り換えることができる。上記のオーバーランエラーの基準パラメータとメモリ不足による印刷エラーの基準パラメータのいずれかで事前展開が必要と判定された場合には，その印刷範囲については，その後中間コードを生成する代わりにビットマップに事前展開することが望ましい。
【発明を実施するための最良の形態】
【００１９】
以下，図面にしたがって本発明の実施の形態について説明する。但し，本発明の技術的範囲はこれらの実施の形態に限定されず，特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００２０】
図１は，本実施の形態におけるプリンタシステムの全体構成図である。このプリンタシステムでは，ホストコンピュータ１０にプリンタ１１が有線または無線のネットワーク媒体を介して接続されている。ホストコンピュータ１０では，アプリケーションプログラムＡＰＬがオペレーティングシステムＯＳ内の描画モジュールであるアプリケーションプログラミングインターフェースＡＰＩに対して，印刷ジョブの開始を知らせる。この印刷ジョブの開始に応答して，描画モジュールＡＰＩは印刷コマンドをプリンタドライバＰ−ＤＲに供給する。プリンタドライバＰ−ＤＲは，この印刷コマンドから印刷データＰ−Ｄａｔａとして中間言語で記述された中間コードをバンド毎に生成する。
【００２１】
中間コードは，後に詳述するとおり，印刷エンジンの印刷プレーンを複数に分割したバンド毎に生成され，画素毎の画像データであるビットマップ画像データを展開するためのプリンタに固有のコードまたは関数である。プリンタ１１のコントローラ１２は，この中間コードからであれば，ページ記述言語からの場合に比較すると少ない処理工数でビットマップ画像データに展開することができる。
【００２２】
したがって，プリンタのコントローラ１２は，プリンタドライバＰ−ＤＲから中間コードを受信し，メモリユニット１４内の中間コードバッファＩＣ−ＢＵＦに格納した後，印刷エンジン２４の印刷動作に同期して，その中間コードからビットマップ画像データを生成し，それから生成した画像再生信号１６を印刷エンジンに出力することができる。ビットマップ画像データの展開処理を印刷エンジンの動作に同期させることで，展開処理時間を印刷エンジンの動作時間に吸収させて，全体の印刷時間を短縮させることができる。また，中間コードをバンド毎に生成することで，ビットマップ画像データの展開をバンド単位で行うことができ，プリンタのコントローラ１２内のビットマップ画像データが格納されるバンドバッファＢ−ＢＵＦのメモリサイズを小さくすることができる。
【００２３】
プリンタ１１は，コントローラ１２と印刷エンジン２４とで構成され，コントローラ１２は，プリンタドライバＰ−ＤＲとのインターフェース部ＩＦと，中央処理ユニットＣＰＵと，メモリユニット１４と，ビットマップ画像データを展開する展開ユニット１８と，パルス幅変調ユニットＰＷＭと，それらを接続する内部バス２２とを有する。プリンタドライバＰ−ＤＲから供給される中間コードの印刷データＰ−Ｄａｔａは，メモリユニット１４の中間コードバッファＩＣ−ＢＵＦ内に格納される。そして，印刷エンジン２４の動作に同期して，展開ユニット１８による中間コードからビットマップ画像データへの展開処理と，バンドバッファＢ−ＢＵＦ内に展開されたビットマップ画像データ２０に対するパルス幅変調ユニットＰＷＭによるパルス幅変調処理と，それにより生成された画像再生信号１６の印刷エンジン２４への出力が行われる。
【００２４】
中間コードからビットマップ画像データへの展開処理は，上記のように専用の展開ユニット１８によって行っているが，中央処理ユニットＣＰＵが変換プログラムを実行することによって行っても良い。ビットマップ画像データは，カラー画像の場合は，ＲＧＢまたはＣＭＹＫの色プレーン分の画素毎の階調データである。一旦ＲＧＢの画像データを生成する場合は，印刷エンジンのトナーの色空間のＣＭＹＫの画像データに変換する必要がある。この変換処理は，専用のハードウエアユニットで行っても良いし，中央処理ユニットＣＰＵが色変換プログラムを実行することで行っても良い。
【００２５】
図２は，ネットワーク上に接続された複数のプリンタとコンピュータとを示す図である。この例では，有線または無線のネットワークＬＡＮ上に３台のプリンタＡ，Ｂ，Ｃと，コンピュータＡ，Ｂ，Ｃが接続され，全てのプリンタに共通のプリンタドライバＰ−ＤＲが全てのコンピュータにインストールされている。各コンピュータでは，印刷時にプリンタを選択することはできるが，いずれのプリンタを選択しても共通のプリンタドライバＰ−ＤＲにより印刷データを生成する。
【００２６】
図３は，本実施の形態における汎用プリンタドライバによる処理手順を示すフローチャート図である。プリンタドライバＰ−ＤＲは，オペレーティングシステム内の画像モジュールＡＰＩから印刷コマンドを受けると，ユーザが選択したプリンタに対して事前展開タイミングを決定するパラメータを要求し，当該プリンタが返信するパラメータを取得する（Ｓ１０）。
【００２７】
図４は，本実施の形態における事前展開タイミング決定パラメータの例を示す図である。プリンタＡは，パラメータとして，プリンタのコントローラが中間コードからビットマップ画像データを展開するのに必要な負荷を示す負荷係数テーブルＬＤａと，オーバーランエラー回避のための事前展開の判定基準を示す負荷閾値ＬＶｔａと，プリンタのビットマップ画像データが展開されるメモリサイズに対応し，メモリ不足エラー回避のための事前展開の判定基準を示すメモリサイズＭＥＭａとを有する。他のプリンタＢ，Ｃも同様のパラメータを有する。また，汎用プリンタドライバＰ−ＤＲは，初期値としてこれらのパラメータのデフォルト値を有している。これらのパラメータの内容については後述する。
【００２８】
図３に戻り，プリンタドライバＰ−ＤＲは，オペレーティングシステムから受け取った印刷コマンドから，バンド単位で中間コードを生成する（Ｓ１２）。この中間コードは，プリンタのコントローラが画素単位の画像データであるビットマップ画像データを展開するためのコードであり，コンピュータが比較的少ない処理工数でビットマップ展開できるようなプリンタ寄りの中間言語で記述されている。以下にて，中間コードの一例について説明する。
【００２９】
図５は，印刷画像例を示す図である。また，図６は，図５の印刷画像に対応する中間コードの例を示す図である。図５には，印刷エンジンが１回の動作で画像形成可能な印刷範囲に対応する印刷プレーンＰＬＮ内に形成される画像例が示されている。そして，印刷プレーンＰＬＮは複数のバンドＢＮＤ１〜ＢＮＤ３に分割されている。この印刷プレーンＰＬＮは，例えば，Ａ４のレーザープリンタであればＡ４サイズに，Ａ３のレーザープリンタであればＡ３サイズに対応する。したがって，印刷用紙のサイズによっては印刷プレーンが複数ページに対応することもある。また，印刷エンジンが１回の動作で１枚の印刷用紙に画像を形成する場合は，この印刷プレーンＰＬＮは，その１枚の印刷用紙に対応する。
【００３０】
図５の画像例は，写真からなるイメージ５０と，所定の色の矩形ＲＣＴ０と，文字「ＡＢＣＤＥＦ」と，楕円形５２と，三角形５４と，所定の色を有し内部に文字「Ａ」が重ね書きされている長方形５６とを有する。
【００３１】
かかる印刷画像の場合，印刷コマンドは，イメージ５０についてはその属性と位置と圧縮方式などに加えて画素に展開されたビットマップ画像データを有し，矩形ＲＣＴ０，楕円５２，三角形５４，矩形５６などについてはその属性と位置と色のデータを有し，文字「ＡＢＣＤＥＦ」や「Ａ」についてはその属性とキャラクタの種類（フォント）と位置及び色のデータを有する。
【００３２】
そこで，ビットマップ画像データを生成するに適した中間コードが，この印刷コマンドから生成される。更に，プリンタのコントローラでのビットマップ展開を容易にするために，中間コードに変換される段階で，文字は画素に展開したビットマップ画像データにされ，楕円５２は単位幅を有する垂直矩形Ｖ０〜Ｖ４に分解され，三角形５４は単位高さを有する水平矩形Ｌ０〜Ｌ３に分解される。また，中間コードは，印刷プレーンＰＬＮを複数に分割したバンドＢＮＤ０〜ＢＮＤ３毎に生成され，それに伴い，イメージ５０はバンドＢＮＤ０に属するイメージＩＭＧ０とバンドＢＮＤ１に属するイメージＩＭＧ２とに分解され，矩形５６はバンドＢＮＤ２に属する矩形ＲＣＴ１とバンドＢＮＤ３に属する矩形ＲＣＴ２とに分解される。
【００３３】
つまり，図５に示されるとおり，バンドＢＮＤ０には，イメージＩＭＧ０と矩形ＲＣＴ０と文字を画素に展開したイメージＩＭＧ１（ビットマップ画像データ）とに対応する中間コードが生成される。バンドＢＮＤ１には，イメージＩＭＧ２と複数の垂直矩形Ｖ０〜Ｖ４に対応する中間コードが生成される。また，バンドＢＮＤ２には，複数の水平矩形Ｌ０〜Ｌ３と矩形ＲＣＴ１に対応する中間コードが生成され，バンドＢＮＤ３には矩形ＲＣＴ２とイメージＩＭＧ３に対応する中間コードが生成される。
【００３４】
図６には，図５に示した分解された画像に対応する中間コードの例が示されている。バンドＢＮＤ０には，イメージＩＭＧ０と，矩形ＲＣＴ０と，イメージＩＭＧ１に対応する中間コード６０，６１，６２が含まれる。具体的には，
（１）イメージＩＭＧ０の中間コード６０は，その属性ＩＭＧ０と，左上の点（図３中の黒点）のバンドＢＮＤ０内のローカル座標（Ｘ，Ｙ）と，その幅及び高さ（Ｗ，Ｈ）と，ビットマップ画像データの圧縮形式ＣＯＭＰと，具体的なイメージのデータであるビットマップ画像データ（00110011…）とを有する。
（２）矩形ＲＣＴ０の中間コード６０は，その属性ＲＣＴ０と，矩形の模様を示すスクリーンデータＰと，色データＣＯＬと，左上点のバンドＢＮＤ０内のローカル座標（Ｘ，Ｙ）と，その幅及び高さ（Ｗ，Ｈ）とを有する。
（３）文字のイメージＩＭＧ１の中間コード６２は，その属性ＩＭＧ１と，ローカル座標（Ｘ，Ｙ）と，幅及び高さ（Ｗ，Ｈ）と，文字を画素に展開したビットマップ画像データ（0010101…）とを有する。
【００３５】
同様に，バンドＢＮＤ１には，イメージＩＭＧ２と複数の垂直矩形Ｖ０〜Ｖ４に対応する中間コード７０〜７５が含まれる。具体的には，
（１）垂直矩形Ｖ０〜Ｖ４の中間コード７０〜７４は，その属性Ｖ０〜Ｖ４と，色データＣＯＬと，それぞれの左上点のローカル座標（Ｘ，Ｙ）と，高さＨとを有する。
（２）イメージＩＭＧ２の中間コード７５は，その属性ＩＭＧ２と，ローカル座標（Ｘ，Ｙ）と，その幅及び高さ（Ｗ，Ｈ）と，ビットマップ画像データの圧縮形式ＣＯＭＰと，具体的なビットマップ画像データ（00110011…）とを有する。
【００３６】
同様に，バンドＢＮＤ２には，水平矩形Ｌ０〜Ｌ３の中間コード８０〜８３と，矩形ＲＣＴ１の中間コード８４とを有する。具体的には，
（１）水平矩形Ｌ０〜Ｌ４の中間コード８０〜８３は，その属性Ｌ０〜Ｌ４と，モノクロデータＢと，ローカル座標（Ｘ，Ｙ）と，幅Ｗとを有する。
（２）矩形ＲＣＴ１の中間コード８４は，その属性ＲＣＴ１と，矩形の模様を示すスクリーンデータＰと，色データＣＯＬと，ローカル座標（Ｘ，Ｙ）と，その幅及び高さ（Ｗ，Ｈ）とを有する。
【００３７】
そして，バンドＢＮＤ３には，矩形ＲＣＴ２とイメージＩＭＧ３の中間コード９０，９１が含まれる。具体的には，
（１）矩形ＲＣＴ２の中間コード９０は，その属性ＲＣＴ２と，矩形の模様を示すスクリーンデータＰと，色データＣＯＬと，ローカル座標（Ｘ，Ｙ）と，その幅及び高さ（Ｗ，Ｈ）とを有する。
（２）イメージＩＭＧ３は，その属性データＩＭＧ３と，下地との重なりの関係（ＡＮＤかＯＲかＥＯＲかなどブレンディング，上書きなど）のデータＤと，スクリーンデータＰと，ローカル座標（Ｘ，Ｙ）と，幅及び高さ（Ｗ，Ｈ）とを有する。
【００３８】
図６に示されるようにビットマップ化された画像データ以外は，細分化された簡単な図形に対応する中間コードにされる。それにより，その後印刷エンジンの動作速度に追従して中間コードから画素に展開したビットマップ画像データを高速に生成することが可能になる。
【００３９】
図３に戻り，次に，汎用プリンタドライバＤ−ＰＲは，各バンドに含まれる中間コードについて，プリンタコントローラが中間コードの展開に要する負荷評価値を，取得したパラメータに基づいて演算により求める（Ｓ１４）。この負荷評価値とは，コントローラが中間コードを展開するのに必要な演算時間に対応するものであり，印刷エンジンが起動した時に，コントローラが中間コードからビットマップ画像データを生成し，そのビットマップ画像データから生成した画像再生信号１６（図１参照）を印刷エンジンの動作速度に対応して適切なタイミングで印刷エンジン２４に供給できるか否かを評価するための指標である。つまり，この負荷評価値が所定の負荷閾値ＬＶｔを超えるか否かを事前にチェックすることで，プリンタのエンジンが受信した中間コードから印刷エンジンに追従してビットマップ画像データを生成し画像再生信号を供給可能か否かを評価することができる。負荷評価値が高くなりすぎると，プリンタのコントローラが中間コードからビットマップ画像データへの展開処理が，印刷エンジンの速度に追従できず，オーバーランエラーが発生する可能性がある。
【００４０】
図６に示されるとおり，中間コードは，印刷対象オブジェクトに対応して，各バンドで生成されるので，中間コードを新たに生成するたびに，新たに中間コードが発生したバンドの累積負荷評価値をアップデートする。そして，この累積負荷評価値が所定の負荷閾値を超える場合は，オーバーランエラーが発生する蓋然性が高いと判定して，プリンタドライバは，そのバンドの中間コードを事前に展開してビットマップ画像データの形態で印刷データＰ−Ｄａｔａを生成する必要がある。
【００４１】
図７は，負荷評価値の演算例を説明するための図である。負荷評価値の計算は，中間コードの組合せに対応してあらかじめ設定されている負荷係数Ａ（ｘ）に基づいて行われる。この負荷係数は，プリンタのドライバの処理能力に対応するものであり，処理能力が高い場合は負荷係数は低く設定され，処理能力が高い場合は負荷係数は高く設定される。そして，この負荷係数は，複数の中間コードに対応した負荷係数テーブルとして，事前展開タイミング決定パラメータの一つとして，選択されたプリンタからプリンタドライバが取得する。
【００４２】
負荷評価値Ｚは，この負荷係数Ａ（ｘ）とその画像の面積（幅Ｗ×高さＨ）とから，式１００に示される演算式により演算される。つまり，バンド内の複数の中間コード（または中間コードの組合せ）の負荷係数Ａ（ｘ）とその面積（Ｗ＊Ｈ）との乗算値の合計が，そのバンドの累積負荷評価値Ｚとなる。
【００４３】
ここで，図７の図表に示される論理演算式は，中間コードの組合せに対応する。例えば，論理演算式は，前述したイメージＩＭＧ，水平矩形Ｌ，垂直矩形Ｖ，及び矩形ＲＣＴの画像からなるソースＳと，その中間コードの画像が重ねられる下地の画像を意味するデスティネーションＤと，その中間コードの画像の表面模様（スクリーン）や色などを含むデータＰとの組合せで構成される。図７の図表には，最初にソースＳのみからなる論理演算式ＩＭＧ，Ｌ，Ｖ，ＲＣＴが示され，それらに対してはスクリーンや色などは含まれておらず，それぞれに負荷係数ａ１〜ａ４が設定されている。また，５行目には，論理演算式「ＤＳＰ０」が示され，デスティネーションＤは下地の画像との重ね方を示すデータであり，データＰ０についてはスクリーンをＰ１とし色をモノクロＢＷとすることが示され，その場合の負荷係数はａ５と設定されている。それ以外の論理演算式「ＤＳＰ１」「ＤＳＰｎ」も同様であり，それぞれ負荷係数はａ６，ａｍと設定されている。これらの負荷係数が，負荷係数テーブルＬＤとして各プリンタからプリンタドライバに送信される。
【００４４】
プリンタコントローラは，各バンドの累積負荷評価値の演算に加えて，各バンドの中間コードのデータ量も演算により求める（Ｓ１６）。プリンタ内のメモリユニット１４には，中間コードを格納する中間コードバッファＩＣ−ＢＵＦと，１つのバンド内で展開されるビットマップ画像データを格納するバンドバッファＢ−ＢＵＦとが設けられる。この場合，プリンタコントローラが生成する中間コードのデータ量が大きくなり，例えば，展開後のバンドのビットマップ画像データのデータ量よりも大きくなると，印刷データとして中間コードをプリンタに送信する意味がなくなる。つまり，プリンタドライバからプリンタへの転送データ量を抑えるために，中間コードを送信しているのであるから，その転送される各バンドの中間コードのデータ量が，バンドで展開されるビットマップ画像データのデータ量を超える場合は，プリンタドライバは，中間コードを生成することなく，直接事前展開してビットマップ画像データを生成してプリンタに出力したほうが望ましい。それにより，プリンタドライバでの中間コードの生成を省略することができる。また，ビットマップ画像データであっても圧縮によりかなりデータ量を小さくすることができるので，プリンタドライバからコントローラへの転送速度の低下を回避することもできる。一般に，中間コードよりもビットマップ画像データのほうが圧縮率は高くなるからである。これが，メモリ不足防止による事前展開の１つの考え方である。
【００４５】
この中間コードのデータ量の演算も，新たな中間コードが生成されるたびに，各バンドの累積データ量をアップデートする方法で行われる。
【００４６】
次に，プリンタドライバは，各バンドの累積負荷評価値が，負荷閾値を超えるか否かの判定を行う（Ｓ１８）。負荷閾値ＬＶｔは，選択されたプリンタから取得した決定パラメータに含まれている。負荷閾値は，オーバーランエラーが発生するか否かを予測する場合の基準値であり，累積負荷評価値が負荷閾値を超える場合は，オーバーランエラーが発生する蓋然性が高くなる。したがって，その場合，プリンタドライバは，該当するバンドの中間コードからビットマップ画像データを事前展開する（Ｓ２２）。そして，その後は，印刷コマンドから直接ビットマップ画像データに事前展開する（Ｓ１２）。
【００４７】
この負荷閾値ＬＶｔは，プリンタコントローラの処理能力が低い場合は，比較的低く設定され，処理能力が高い場合は，比較的高く設定される。つまり，選択されたプリンタに応じてそれぞれ異なる負荷閾値が利用される。この負荷閾値が低いと，順次生成される中間コードに対して早いタイミング（より低い負荷閾値）で事前展開に切り換えられる。また，負荷閾値が高いと，遅いタイミング（より高い負荷閾値）で事前展開に切り換えられる。
【００４８】
仮に，全てのプリンタに対して同じ負荷閾値が使用されると，処理能力の高いプリンタに対しては，事前展開のタイミングが早すぎることになる。その場合，プリンタで印刷エンジンの動作に同期して展開可能なバンドまでプリンタドライバが事前展開することになり，プリンタドライバでの展開時間とその展開されたビットマップ画像データの圧縮時間が無駄になってしまう。一方，処理能力の低いプリンタに対しては，事前展開のタイミングが遅すぎることになる。その場合，プリンタ側で印刷エンジンの動作に同期して展開できないようなバンドについても，中間コードのままプリンタに転送されてしまい，プリンタドライバでの中間コードの生成時間や，プリンタでの受信した中間コードの格納時間が無駄になってしまう。
【００４９】
そこで，本実施の形態では，プリンタドライバが，選択されたプリンタに最適な負荷閾値ＬＶｔを事前展開タイミング決定パラメータとして取得し，最適なタイミングで事前展開への切り換えを行い，印刷エラーが生じない範囲での印刷スループットの最大化を実現している。
【００５０】
さらに，プリンタドライバは，各バンドの中間コードの累積データ量が，バンドバッファなど所定のメモリのメモリサイズを超えているか否かの判定を行う（Ｓ２０）。つまり，各バンドの中間コードの累積データ量が，各バンド内の生成済み中間コードがビットマップ画像データに展開された場合のバンドバッファ内のデータ量を超えるか否かの判定が行われる。超える場合は，該当バンドの中間コードを事前展開し（Ｓ２２），それ以降は中間コードを生成することなく，印刷コマンドをビットマップ画像データで事前展開する（Ｓ１２）。
【００５１】
この事前展開の判断基準であるメモリサイズＭＥＭは，選択したプリンタから取得する事前展開タイミング決定パラメータに含まれる。そして，そのメモリサイズは，各プリンタ毎にそれぞれ設定された任意のサイズである。
【００５２】
メモリ不足エラー回避の事前展開の判断の別の考え方として，中間コードとビットマップ画像データのデータ量が，プリンタで確保可能なメモリ容量を超えるか否かの判定をするようにしてもよい。つまり，プリンタのメモリ容量が十分にない場合は，各バンドの中間コードの累積データ量が，プリンタ内の中間コードバッファとバンドバッファのために確保できるメモリサイズを超えるか否かの判定が行われる（Ｓ２０）。つまり，中間コードのデータ量が大きくなると，プリンタでバンド毎に中間コードを蓄積し，ビットマップ画像データに展開する際に，メモリユニット１４にメモリ不足が発生し，中間コードの蓄積とビットマップ画像データの蓄積とを行うことができず，メモリ不足エラーとなる。かかるメモリ不足エラーによる印刷エラーを回避するために，中間コードの累積データ量が，プリンタ毎に設定される所定のメモリサイズＭＥＭを超えるか否かが判定され，超える場合は，事前展開に切り換えられる（Ｓ１２）。
【００５３】
この事前展開の判断基準であるメモリサイズＭＥＭも，選択したプリンタから取得する事前展開タイミング決定パラメータに含まれる。このメモリサイズは，各プリンタの内部メモリ容量に対応した値に設定されている。
【００５４】
上記手順Ｓ１２〜Ｓ２２が，１つの印刷プレーン内の印刷コマンドが終了するまで繰り返される。判定手順Ｓ１８，Ｓ２０のいずれかで事前展開に切り換えられると，手順Ｓ１２では，印刷コマンドから中間コードを生成することなくビットマップ画像データに展開する。最後に，プリンタドライバＰ−ＤＲは，バンド毎の中間コードまたは事前展開されたビットマップ画像データを印刷データＰ−Ｄａｔａとしてプリンタに出力する（Ｓ２６）。
【００５５】
プリンタドライバＰ−ＤＲは，選択されたプリンタから決定パラメータを取得できない場合は，プリンタドライバにあらかじめ設定されている初期値のパラメータ（図４参照）を利用して，前述の事前展開タイミングの判定手順Ｓ１８，Ｓ２０を実行する。この初期値の決定パラメータは，全てのプリンタに対応可能なように，事前展開タイミングに比較的早く切り換えられるような値に設定されている。したがって，初期値により事前展開を判定すると，そのタイミングが最適値よりも早くなる。
【００５６】
図８は，本実施の形態におけるプリンタコントローラの動作を示すフローチャート図である。図８には示されていないが，プリンタコントローラ１２は，プリンタドライバＰ−ＤＲからの問い合わせに応答して，事前展開タイミング決定パラメータＰａｒａを返信している。そして，プリンタコントローラ１２は，プリンタドライバＰ−ＤＲから中間コードまたは事前展開されたビットマップ画像データからなる印刷データＰ−Ｄａｔａを受信する（Ｓ３０）。次に，印刷データが中間コードの場合は（Ｓ３２のＹＥＳ），メモリユニット１４内の中間コードバッファＩＣ−ＢＵＦ内にバンド毎に分けて格納し（Ｓ３４），その中間コードからビットマップ画像データをバンドバッファＢ−ＢＵＦ内に展開し格納する（Ｓ３６）。この処理Ｓ３４，Ｓ３６は，従来の中間コードに対する処理と同じであり，ビットマップ画像データへの展開は，バンド単位で行う。中間コードには，イメージデータのようにすでにビットマップ化されているものもあるが，その場合は，中間コードバッファＩＣ−ＢＵＦには，そのビットマップ化されているソースとなるビットマップ画像データが格納されているアドレスがポインタとして格納される。
【００５７】
一方，印刷データが中間コードでなく事前展開されているビットマップ画像データの場合は（Ｓ３２のＮＯ，Ｓ３８のＹＥＳ），その受信したビットマップ画像データをバンドバッファＢ−ＢＵＦ内に格納する（Ｓ４０）。この場合は，中間コードからビットマップ展開する必要はない。
【００５８】
そして，コントローラ１２は，バンドバッファＢ−ＢＵＦ内に格納されているビットマップ画像データを読み出し，パルス幅変調ユニットＰＷＭによりパルス幅変調し，印刷エンジンの駆動パルス信号からなる画像再生信号１６を，印刷エンジン２４に出力する（Ｓ４２）。
【００５９】
上記の処理工程Ｓ３６，Ｓ４０のビットマップ画像データのバンドバッファＢ−ＢＵＦへの格納と，処理工程Ｓ４２のパルス幅変調処理と処理済みの画像再生信号の出力とが，印刷エンジン２４の動作に同期して行われる。
【００６０】
以上説明したとおり，本実施の形態では，プリンタの処理能力やメモリ容量に応じた最適化された決定パラメータにより，プリンタドライバＰ−ＤＲが，中間コード作成中に事前展開が必要か否かを判定し，必要な場合は中間コードではなく事前展開したビットマップ画像データを生成し，プリンタコントローラ１２に出力する。したがって，プリンタドライバは，最適なタイミングで中間コード作成からビットマップ画像データの作成に切り換えることができる。そのため，事前展開のタイミングが早くなりすぎて，プリンタドライバ側で不必要にビットマップ画像データに展開してプリンタに出力することはない。また，逆に事前展開のタイミングが遅すぎて，プリンタドライバ側でプリンタコントローラが処理できないような中間コードを作成して出力することもない。最適なタイミングで事前展開への切り換えが行われるので，プリンタドライバからプリンタコントローラ，印刷エンジンまでの全体の印刷スループットを上げることができる。しかも，各コンピュータは，全て共通の汎用プリンタドライバのみをインストールしておけば良いので，システム運用を容易にすることができる。
【図面の簡単な説明】
【００６１】
【図１】本実施の形態におけるプリンタシステムの全体構成図である。
【図２】ネットワーク上に接続された複数のプリンタとコンピュータとを示す図である
【図３】本実施の形態における汎用のプリンタドライバによる処理手順を示すフローチャート図である。
【図４】本実施の形態における事前展開タイミング決定パラメータの例を示す図である。
【図５】印刷画像例を示す図である。
【図６】図５の印刷画像に対応する中間コードの例を示す図である。
【図７】負荷評価値の演算例を説明するための図である。
【図８】本実施の形態におけるプリンタコントローラの動作を示すフローチャート図である。
【符号の説明】
【００６２】
ＬＡＮ：ネットワーク        Ｐ−ＤＲ：プリンタドライバ
【図１】
2006293561.tif 000003
【図２】
2006293561.tif 000004
【図３】
2006293561.tif 000005
【図４】
2006293561.tif 000006
【図５】
2006293561.tif 000007
【図６】
2006293561.tif 000008
【図７】
2006293561.tif 000009
【図８】
2006293561.tif 000010