(57)【特許請求の範囲】
【請求項１】
注目バンドが単一の圧縮イメージであるか否かを判別する第１判別手段と、
前記第１判別手段により注目バンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータと他のイメージデータとをバンドメモリに展開し、バンドメモリに展開されたイメージデータをビデオ転送部に出力し、前記第１判別手段により注目バンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータをビデオ転送部に出力する制御手段とを有することを特徴とする印刷制御装置。
【請求項２】
注目バンドが単一の圧縮イメージであるか否かを判別する第１判別手段と、
前記第１判別手段により注目バンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータと他のイメージデータとをバンドメモリに展開し、バンドメモリに展開されたイメージデータを出力し、前記第１判別手段により注目バンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータを出力する制御手段と、
前記制御手段により出力されるイメージデータをビデオ信号に変換して出力し、また前記制御手段により出力される圧縮イメージデータをイメージデータに伸長し、伸長したイメージデータをビデオ信号に変換して出力するビデオ転送手段と、
前記ビデオ転送手段により出力されるビデオ信号に基づき印刷を行うプリントエンジンとを有することを特徴とする印刷制御装置。
【請求項３】
注目バンドがブランクバンドであるか否かを判別する第２判別手段を有し、
前記制御手段は、前記第２判別手段によりブランクバンドであると判別された場合、前記ビデオ転送手段に空白バンドの出力処理を指示することを特徴とする請求項２記載の印刷制御装置。
【請求項４】
前記他のイメージデータは、文字イメージデータを含むことを特徴とする請求項１、または２記載の印刷制御装置。
【請求項５】
前記圧縮イメージデータは、ホストコンピュータから入力されたものであり、
前記文字イメージデータは、ホストコンピュータから登録されたものであることを特徴とする請求項４記載の印刷制御装置。
【請求項６】
前記他のイメージデータは、圧縮されたイメージデータを含むことを特徴とする請求項１、または２記載の印刷制御装置。
【請求項７】
前記ビデオ転送手段は、空白バンドの出力指示に応じてビデオ信号を出力しないことを特徴とする請求項３記載の印刷制御装置。
【請求項８】
注目バンドが単一の圧縮イメージであるか否かを判別する第１判別ステップと、
前記第１判別ステップにより注目バンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータと他のイメージデータとをバンドメモリに展開し、バンドメモリに展開されたイメージデータをビデオ転送部に出力し、前記第１判別ステップにより注目バンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータをビデオ転送部に出力する制御ステップとを有することを特徴とする印刷制御方法。
【請求項９】
注目バンドが単一の圧縮イメージであるか否かを判別する第１判別ステップと、
前記第１判別ステップにより注目バンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータと他のイメージデータとをバンドメモリに展開し、バンドメモリに展開されたイメージデータを出力し、前記第１判別ステップにより注目バンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータを出力する制御ステップと、
前記制御ステップにより出力されるイメージデータをビデオ信号に変換して出力し、また前記制御ステップにより出力される圧縮イメージデータをイメージデータに伸長し、伸長したイメージデータをビデオ信号に変換して出力するビデオ転送ステップと、
前記ビデオ転送ステップにより出力されるビデオ信号に基づき印刷を行うプリントステップとを有することを特徴とする印刷制御方法。
【請求項１０】
注目バンドがブランクバンドであるか否かを判別する第２判別ステップを有し、
前記制御ステップは、前記第２判別ステップによりブランクバンドであると判別された場合、前記ビデオ転送ステップに空白バンドの出力処理を指示することを特徴とする請求項９記載の印刷制御方法。
【請求項１１】
前記他のイメージデータは、文字イメージデータを含むことを特徴とする請求項８、または９記載の印刷制御方法。
【請求項１２】
前記圧縮イメージデータは、ホストコンピュータから入力されたものであり、
前記文字イメージデータは、ホストコンピュータから登録されたものであることを特徴とする請求項１１記載の印刷制御方法。
【請求項１３】
前記他のイメージデータは、圧縮されたイメージデータを含むことを特徴とする請求項８、または９記載の印刷制御方法。
【請求項１４】
前記ビデオ転送ステップは、空白バンドの出力指示に応じてビデオ信号を出力しないことを特徴とする請求項９記載の印刷制御方法。
【請求項１５】
注目バンドが単一の圧縮イメージであるか否かを判別する第１判別ステップと、
前記第１判別ステップにより注目バンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータと他のイメージデータとをバンドメモリに展開し、バンドメモリに展開されたイメージデータをビデオ転送部に出力し、前記第１判別ステップにより注目バンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータをビデオ転送部に出力する制御ステップとをコンピュータに実行させるプログラムを記憶したことを特徴とする記憶媒体。
【請求項１６】
注目バンドがブランクバンドであるか否かを判別する第２判別ステップを有し、
前記制御ステップは、前記第２判別ステップによりブランクバンドであると判別された場合、前記ビデオ転送ステップに空白バンドの出力処理を指示することを特徴とする請求項１５記載の記憶媒体。
【請求項１７】
前記他のイメージデータは、文字イメージデータを含むことを特徴とする請求項１５記載の記憶媒体。
【請求項１８】
前記圧縮イメージデータは、ホストコンピュータから入力されたものであり、
前記文字イメージデータは、ホストコンピュータから登録されたものであることを特徴とする請求項１５記載の記憶媒体。
【請求項１９】
前記他のイメージデータは、圧縮されたイメージデータを含むことを特徴とする請求項１５記載の記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えばホストコンピュータから送られてくる印刷データを印刷出力する印刷システム及び印刷装置及び印刷制御方法に関するものである。
【０００２】
【従来の技術】
従来、イメージ出力に特化したページプリンタがあり、それはホストベースプリンタと呼ばれている。
【０００３】
この種のプリンタでは、ホストコンピュータ上で展開した１ページ分のイメージデータを、ページ先頭から次々に圧縮してプリンタのコントローラ部に送る。コントローラ部は送られてくる圧縮データを次々に伸長し、伸長したデータをビデオ信号に変換して、エンジン部の排紙のタイミングに同期させて、エンジン部に出力する。これによって、１ページ分の用紙の印刷を行なう。
【０００４】
この種のプリンタでは、圧縮されたイメージデータのビデオ信号への変換と、エンジン部へのビデオ信号出力は、ハードウェア回路が行なう仕組みとなっており、極端に言えば、コントローラ部には、ＣＰＵも不要であり、非常に安価なページプリンタが可能という長所がある。
【０００５】
【発明が解決しようとする課題】
しかしながら、上記従来のホストベースプリンタを用いるホストコンピュータでは、文字印字、図形描画、イメージの貼り付け等、全ての印刷データを、いったんホストコンピュータ上でイメージに展開してから、展開されたイメージを圧縮してプリンタに転送する。そのため、ホストからプリンタに転送すべきデータ量が大きくなってしまう。また、普通の文書でも、ホスト上でいったんすべてデータを画像へ展開しなければならない。そのため、特に、複数ページの文書では、ホストでの処理時間がかかり、印刷処理時間が大きくなってしまうという問題があった。
【０００６】
本発明の目的は、ホストベースプリンタに近い、簡単な構成のイメージ専用プリンタでありながら、文字の部分は文字コードで受信して文字画像に展開することで、ホストにおける文字の展開処理時間とホストからの転送データ量とを非常に小さくした印刷装置及び印刷システム及び印刷制御方法を提供することである。
【０００７】
また、本発明のもうひとつの目的は、巨大なイメージデータを含んだ文書も出力できる印刷装置及び印刷システム及び印刷制御方法を提供することである。
【０００８】
【課題を解決するための手段】
上記目的を達成するため、本発明はつぎのような構成からなる。
【００１０】
あるいは、注目バンドが単一の圧縮イメージであるか否かを判別する第１判別手段と、前記第１判別手段により注目バンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータと他のイメージデータとをバンドメモリに展開し、バンドメモリに展開されたイメージデータをビデオ転送部に出力し、前記第１判別手段により注目バンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータをビデオ転送部に出力する制御手段とを有する。
【００１１】
あるいは、注目バンドが単一の圧縮イメージであるか否かを判別する第１判別手段と、前記第１判別手段により注目バンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータと他のイメージデータとをバンドメモリに展開し、バンドメモリに展開されたイメージデータを出力し、前記第１判別手段により注目バンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータを出力する制御手段と、前記制御手段により出力されるイメージデータをビデオ信号に変換して出力し、また前記制御手段により出力される圧縮イメージデータをイメージデータに伸長し、伸長したイメージデータをビデオ信号に変換して出力するビデオ転送手段と、前記ビデオ転送手段により出力されるビデオ信号に基づき印刷を行うプリントエンジンとを有する。
【００１６】
【発明の実施の形態】
［第１の実施の形態］
次に、図を用いて第１の実施の形態を説明する。
＜印刷システムの構成＞
図１はシステム全体を説明するためのブロック構成図である。ホスト１は、登録する文字イメージデータ、印字を指示する文字コード、圧縮されたイメージデータを作成してプリンタへ送るパーソナルコンピュータである。ホスト１は、これらの処理を、二次メモリから主メモリにロードしたプリンタドライバ等のプログラムをＣＰＵにより実行することで行う。また、ホスト１では、ユーザが所望のアプリケーションプログラムを実行することができる。ユーザはこれを入力部からの入力及び表示部よりの表示に従って制御する。ホスト１はプリンタ２とインターフェース部を介して接続されている。なお、二次メモリとしては、固定ディスクなどの固定された媒体のほかに、フレキシブルディスクやＣＤ−ＲＯＭなど、着脱自在な記憶媒体を用いてもよいし、それら双方を用いることもできる。着脱自在な媒体を二次メモリとして用いれば、それを介してプログラムやデータを装置に供給できる。
【００１７】
プリンタ２は、コントローラ部３とエンジン部４とを含む。コントローラ部３は、ホストコンピュータ１から送られてくる文字データ、イメージデータを受信し、受信したデータからビデオ信号を生成し、エンジン部４に送る。エンジン部４は、コントローラ部３から受け取ったビデオ信号を用紙に転写して印刷し、排紙する。
【００１８】
コントローラ部３は、コントローラ部３全体を制御する中央処理装置（以下、ＣＰＵと呼ぶ）５、ＣＰＵ５による処理動作を記述したプログラムの入っているリード・オンリ・メモリ（以下、ＲＯＭと呼ぶ）８、ランダム・アクセス・メモリ（以下、ＲＡＭと呼ぶ）９、ホスト１から文字データ、イメージデータを受信し、受信したデータをＲＡＭ９内にある受信バッファ１０にセットする受信部６、受信した圧縮された文字データを伸長してフレームバッファ１１へ展開する文字伸長回路１７、受信した圧縮されたイメージデータを伸長してフレームバッファ１１に展開するイメージ伸長回路１６、フレームバッファ１１内の展開イメージをビデオ信号に変換してエンジン部４に出力するビデオ転送回路７等で構成されている。データ１８は受信済みで受信バッファ１０にページ毎にセットされてた状態の文字データ、データ１９は受信済みで受信バッファ１０にページ毎にセットされてた状態のイメージデータを示している。
【００１９】
その他、ＲＡＭ９内には、プログラムのワーク領域１２、さらにその中には、受信バッファ９に受信したページごとの文字データ１８、イメージデータ１９を管理するためのページ管理表１３、圧縮された１文字ごとのドットイメージを貯蔵しておく、登録文字データ領域１５、登録された文字データを管理するための、登録文字管理表１４等が含まれている。また、プログラムを格納するＲＯＭ８をＲＡＭとすることもできる。この場合にはＲＡＭは内容が揮発しないように電池等でバックアップされているか、あるいは電源投入の都度必要なプログラムがロードされることになる。また、ＲＯＭ８をＲＡＭ化することで、ホスト１の２次メモリに着脱自在な記憶媒体により供給されるプログラムを、インターフェース部を介して受信し、ＲＡＭに格納することもできる。すなわち、プリンタ２で実行されるプログラムもまた着脱自在な記憶媒体で供給することができる。
【００２０】
なお、受信した文字データ１８の中味は、登録文字、文字コードで構成されている。ホスト１上で印刷しようとしている文書で、最初に出現した文字は、圧縮して１文字ごとのドットイメージとして、登録文字としてプリンタ２に送られる。また、その最初の文字位置を含めて、以降の同一文字の印字は、文字コードによって指示される。
【００２１】
受信バッファ１０に一旦受信された登録文字は、登録文字データ領域１５に移し替えられて貯えられる。文字コードによって印字を指示された場合は、登録文字データ領域１５から、文字コードに対応する登録文字データが抜き出され、文字伸長回路１７で伸長され、フレームバッファ１１上に展開される形となる。また、圧縮イメージデータ１９は、イメージ伸長回路１６によりデータ伸長され、フレームバッファ１１上に展開される。
【００２２】
ところで、コントローラ部３のＣＰＵ５は、ＲＡＭ９の内部の受信バッファ１０やページ管理表１３、登録文字管理表１４などを用いたメモリ管理を行なうだけなので、処理能力のそれほど高くない安価な製品で良い。
【００２３】
一方、エンジン部４にもＣＰＵ２１とメモリ２２とがある。メモリ２２には制御プログラムの入ったＲＯＭ２３や、プログラムのワーク領域としてのＲＡＭ２４が含まれる。ビデオ受信部２５は、コントローラ部３からのビデオ信号を受信し、現像定着部２７で用紙に画像を転写する。給紙部２６は、未使用の白い用紙を用紙カセット等から取り込む役目をし、現像定着部２７は、上述のように用紙に画像を転写して定着し、排紙部２８は印刷済みの用紙を排出する。
【００２４】
なお、太い矢印は、文字データやイメージデータやビデオ信号の流れ、あるいは、エンジン部４では、用紙の流れを示している。また、細い矢印は、各部分間の制御のやりとりを示している。コントローラ部３のＣＰＵ５と、エンジン部４のＣＰＵ２１も、互いに情報のやり取りを行なう。ビデオの転写や、用紙の搬送等の、印刷処理の制御にかかわる情報である。
【００２５】
図２は、コントローラ部３における、イメージと文字の合成の原理の説明図である。図１でも、一部説明したが、ホスト１上のドライバは、印刷しようとする文書について、まず、文字部分と文字以外の部分とに分離する。文字以外の部分はホスト１上で全てイメージとして展開しておく。そして、ページ毎に、文字データ部分とイメージデータ部分とを別々にプリンタ２へ転送する。その際、文字データ部分は、まず文字コードと対応した、圧縮された文字のドットパターンデータをプリンタヘ送って登録しておき、次に印字データとして登録されている文字コード列を送る。
【００２６】
コントローラ部３では、受信した圧縮イメージデータ１９を、イメージ伸長回路１６を使って伸長してフレームバッファ１１上に展開する。コントローラ３は、文字データ１８（すなわち文字コード列）を受信すると、受信したそれぞれの文字コードについて、登録されている圧縮ドットパターンデータを文字伸長回路１７によって伸長し、フレームバッファ１１上に展開する。フレームバッファ１１上に１ページ分のイメージと文字の展開が完了すれば、ビデオ転送回路７によって、印刷のビデオ信号がエンジン部４へ送られる。
【００２７】
なお、ここでは、フレームバッファ１１上へは、イメージ部分と文字部分との論理和が書き込まれる。文書の上では、多くの場合論理和で問題はない。
【００２８】
また、ある文字の文字ドットデータの登録については、ひとつの文書の印刷で一度行なわれるだけ、文書上で、ページにまたがって同じ文字が何度も出現されても、文字登録は一度だけで、印字は文字コードによって繰り返し指示される。しかし、文書の印字が終わった時点で、登録された文字は、ＲＡＭ９上から消去される。複数の文書にまたがって、登録文字が有効なわけではない。文書の印刷ごとに、文字登録は繰り返す。
【００２９】
図３は、ホスト１からプリンタ２へ送られる文字データやイメージデータ等、印刷データのコマンド構造の説明図である。印刷データは、順番に、ジョブ開始コマンド３１、ページ毎にページ開始コマンド３２、印字位置を示すポインタの位置移動コマンド３３、種別コマンド３４、コマンド列３５を含む。種別コマンド３４は、その直後に続くコマンド列３５の種類を区別するためのコマンドである。コマンド列３５には、文字登録を行なうもの、文字の印字を指示するもの、イメージの印字を指示するもの、等、数種類の形式がある。詳細は図４で説明する。印刷する文書のページ数分、ページ開始コマンド３２以降の命令群が繰り返されて、最後にジョブ終了コマンド３６で、ひとつの文書の印字コマンドが終了する。
【００３０】
なお、図３では、種別コマンド３４の前に必ず位置移動コマンド３３がセットされているが、常時必要とは限らない。例えば、種別３４、コマンド列３５が文字の登録だけを行なう場合は、位置移動コマンド３３は不要である。
【００３１】
図４は、種別コマンド３４の値ごとのコマンド列３５の構造の説明図である。
【００３２】
種別コマンド３４が種別１の場合は、「文字登録のみ」の作業を示す。コマンド列は、書体番号４１、次に文字コード４２、データの大きさ４３、圧縮された文字のドットイメージデータ４４を含む。
【００３３】
登録される文字データは、書体ごとに区分けされ、文字コードと１対１に対応付けられてＲＡＭ９上の登録文字データ領域１５に登録される。具体的には、これらの区分けや関連は、登録文字管理表１４上で管理される。
【００３４】
種別コマンド３４が種別２の場合は、「文字登録＋印字」の作業を示し、文字の登録と同時に印字をも行なわせるコマンドである。コマンド列３５の形式は、種別１の場合と同一である。この場合の文字コード４２は、登録する文字のコード割り当てを意味すると同時に、すでに登録済みの文字、印字を指示する文字コードをも意味する。
【００３５】
種別コマンド３４が種別３の場合は、「文字イメージ印字のみ」の作業を示している。つまり、文字のドットイメージデータを、登録せずに印字するだけである。コマンド列３５は、データの大きさ４３、圧縮された文字のドットイメージデータ４４を含む。
【００３６】
種別コマンド３４が種別４の場合は、「文字コード印字」の作業を示す。コマンド列３５は、書体番号４１と、文字コード４２とを含む。コントローラ部３は、この書体番号４１と文字コード４２をもとに、登録文字管理表１４を調べて、登録文字データ領域１５から目的の登録文字データを探し出し、文字伸長回路１７でデータを伸長してフレームバッファ１１に展開する。
【００３７】
種別コマンド３４が種別５の場合は、「イメージブロックの貼り付け」の作業を示し、コマンド列３５は、イメージブロックの縦のサイズ４５、イメージブロックの横のサイズ４６、データの大きさ４７、圧縮されたイメージブロックデータ４８を含む。コントローラ部３は、圧縮されたイメージブロックデータをイメージ伸長回路１６を用いてデータ伸長し、フレームバッファ１１上に展開する。種別３４としては、上記５つがある。
【００３８】
図５は、コントローラ部３のＲＯＭ８に内蔵されているプログラムを説明するための図である。
【００３９】
受信管理プログラム５１は、受信バッファ１０に貯蔵される各ページごとの文字データやイメージデータを、ページ管理表１３を用いて管理する。受信部６への受信データの受信バッファ１０上の書き込み位置の指示も行なう。
【００４０】
解析プログラム５２は、受信バッファ１０上に貯えられた文字データ、つまり文字登録や文字印字のコマンド群、あるいはイメージデータ、つまりイメージブロック貼り付けのコマンド群を解析して、文字登録プログラム５３に対して文字の登録処理を指示したり、印字プログラム５４に対して文字のフレームバッファ１１への展開処理を指示したり、イメージのフレームバッファ１１の貼り付けを行なったりする。
【００４１】
また、あるページのフレームバッファ１１への文字やイメージの展開処理が全て終了した場合は、排紙プログラム５５に対して、フレームバッファ１１のイメージのエンジン部４へのビデオ転送と、エンジン部４への排紙の実行を指示する。そして排紙が完了したページについては、受信バッファ１０上からそのページのデータを削除する作業も行なう。削除は、ページ管理表１３から排紙済みページの登録を抹消するだけである。受信バッファ１０上でデータクリアを行なうわけではない。
【００４２】
各プログラムの動作の詳細は、後述のフローチャートで詳しく説明する。
【００４３】
なお、受信管理プログラム５１と解析プログラム５２は、プリンタの電源オンと同時に立ち上り、ホスト１からデータ送信を待ち構える。以後プリンタの電源オフまで、ふたつのプログラムは、マルチタスクで動作を続ける。
【００４４】
図６は、受信バッファ１０内の、受信したデータの書き込み処理が進行する際の、各ポインタの位置関係を説明するための図である。受信バッファ１０は、いわゆる「リングバッファ」の構造になっている。
【００４５】
受信部６は、予め受信管理プログラム５１から限界ポインタ６１を指示されていて、受信バッファ１０内で限界ポインタ６１の位置まで受信したデータの直接書き込みが許されている。１バイトごとに加算される書き込み位置自体は受信部６が管理している。
【００４６】
図６（ａ）で説明すると、プリンタ２の起動直後は、限界ポインタ６１は受信バッファ１０の最大値の位置、つまり、受信バッファ１０の領域の最後尾のアドレスと一致している。しかし、図６（ａ）では説明のために、限界ポインタ６１が、受信バッファ１０の最大値の少し手前に、設定されている。そして、この状態では、受信部６による受信データの書き込みが、限界ポインタ６１の少し手前まで進んできたことを示している。
【００４７】
また、受信済みのデータについては、解析プログラム５２によって、順次解析が進み、フレームバッファ１１への文字やイメージの展開作業が完了したページから、エンジン部４による印刷済み用紙の排紙が実行される。エンジン部４への排紙の指示が完了していない最初のページが、解析ポインタ６２によりポイントされる。また、排紙が完了していない最初のページが、排紙ポインタ６３によりポイントされる。すなわち、解析ポインタ６２と最後に受信したデータの間は、受信したままで未解析のデータが格納され、排紙ポインタ６３と解析ポインタ６２との間には、解析は済んでいるが、未出力のデータが格納されている。更に、排紙ポインタ６２のアドレス以前の部分については、もうすでに排紙済みで不要なので、「消去」された状態になっていて、新しい受信データが書き込み可能である。「消去」と言っても実際にクリアされているわけではなく、新しい受信データは上書きされる。
【００４８】
なお、解析ポインタ６２、排紙ポインタ６３はページ単位に設定される。解析プログラム５２は、受信バッファ１０上のページ境界位置等を、受信管理プログラム５１が作成、管理しているページ管理表１３上で調べて分かる。
【００４９】
図６（ｂ）は、受信バッファ１０の最大値の位置まで受信データの書き込みが進んでしまい、受信管理プログラム５１が、限界ポインタ６１を受信バッファ１０の先頭位置付近に移動させるよう受信部６に指示し、実際に、受信部６による受信データの書き込みが、先頭部分で少し進んだ状態を示している。いわゆる「リングバッファ」の動作である。
【００５０】
限界ポインタ６１の変更は、次の手順で行なわれる。まず、受信部６による受信データの書き込みが、限界ポインタ６１まで進むと、受信部６は「限界に達してこれ以上書き込めない」ことを受信管理プログラム５１に知らせる。つまり、限界ポインタ６１の変更を催促する。催促された受信管理プログラム５１は、排紙ポインタ６３を調べ、新しく空いた領域がないかチェックする。そして、限界ポインタ６１の新しい位置を排紙ポインタ６３の位置として、受信部６へ指示する。これで、受信部６は、古い限界ポインタ６１位置から、新しい限界ポインタ６１位置まで、受信データの書き込みが可能になる。
【００５１】
なお、受信６は、「書き込み位置が限界ポインタ６１に達したとき」以外にも、受信データ中に「ジョブ開始コマンド３１を検知したとき」や、「ページの開始コマンド３２を検知したとき」、「ジョブ終了コマンド３６を検出したとき」等も、受信管理プログラム５１に連絡を行なう。これによって、受信管理プログラム５１は、受信の実作業、つまり、信号線の制御や受信したデータのメモリへの書き込みは受信部６に任せながら、受信したページの管理が可能になっている。
【００５２】
ところで、受信部６は、ホスト１から受信したデータを高速で受信バッファ１０に書き出す仕組み、いわゆるＤＭＡ（ダイナミック・メモリ・アクセス）受信回路を持っている。この回路には、ＦＩＦＯ（ファーストイン・ファーストアウト）バッファが内蔵されており、ホスト１から送られてくるイメージデータは、いったん、このＦＩＦＯバッファに貯えられてから、受信バッファ管理プログラム４１から指示された受信バッファ９上の書き込み位置へ、高速で書き込まれる。これは、技術的には、広く知られたものなので、ここでは詳細な説明は省略する。また、ワーク領域１２には、ページ管理表１３、登録文字管理表１４、登録文字データ領域１５等が存在するが、ここでは、各部分の内部の詳細な構造については説明しない。しかし、余計なメモリ容量を消費しないように、効率的な構造をとっている。
＜印刷制御手順＞
次に、本発明の第１の実施の形態の印刷システムの動作を、フローチャートを用いて説明する。
【００５３】
（プリンタドライバ）
図７は、ホスト１上のプリンタドライバの動作を説明するフローチャートである。プリンタドライバは、ユーザが用いるアプリケーションソフトで作成された、イメージやテキストの混在した文書データから、図３、図４で説明した文字やイメージのプリンタコマンドを作成してプリンタ２へ転送する。ユーザがアプリケーションソフトから文書の印刷を指示すると、ホスト１内でプリンタドライバが起動される。
【００５４】
図示されてはいないが、ドライバは起動時にはホスト１のメモリ上に１ページ分のフレームバッファを確保し、同時にフレームバッファをクリアする。また、ドライバの文書印刷処理の終了時には、フレームバッファとして使われていたメモリ領域は開放される。
【００５５】
処理としては、まず、ステップＳ１でジョブ開始コマンド３１をプリンタ２へ転送し、次にステップＳ２でアプリケーションから何らかの指示があったかチェックし、指示がないならループを形成して指示があるまで待つ。指示があったならステップＳ３で文書の終了の指示がチェックし、ＹＥＳならステップＳ４で文書終了する前に文書の最後のページにイメージデータが含まれているかチェックする。イメージが含まれていたなら、ステップＳ５でイメージブロックの貼り付け位置を示す位置移動コマンド３３を転送し、ステップＳ６で種別５の種別コマンド３４と、イメージブロックを示す、縦サイズ４５，横サイズ４６，データの大きさ４７，圧縮イメージブロック４８の各コマンドを転送する。
【００５６】
ステップＳ６で転送されるイメージブロックは、最後のページ全体を単一のイメージブロックとしたデータである。１ページのイメージは、ホスト１上のメモリに設けられた１ページ分の大きさのフレームバッファに展開される。ステップＳ６でイメージコマンドを転送した後は、ホスト上のフレームバッファもクリアされる。
【００５７】
ステップＳ４でＮＯの場合、あるいは、ステップＳ６の後は、ステップＳ７でジョブ終了コマンド３６をプリンタ２へ転送して、ドライバの処理ルーチンを終了する。
【００５８】
ステップＳ３でＮＯならば、ステップＳ８でアプリケーションからページの開始を指示されたかチェックする。ＹＥＳならステップＳ９で同じ文書内の前のページが存在し、前のページにイメージが含まれていたかチェックする。つまり、前のページのフレームバッファに何らかのイメージの展開があったかどうかチェックする。ここで、ＹＥＳなら、ステップＳ１０でイメージブロックの貼り付け位置を示す位置移動コマンド３３を転送し、ステップＳ１１で種別５の種別コマンド３４と、イメージブロックコマンド４５，４６，４７，４８をプリンタへ転送し、ホスト１上のフレームバッファをクリアする。
【００５９】
ステップＳ９でＮＯの場合、あるいはステップＳ１１の後は、ステップＳ１２でページ開始コマンド３２をプリンタ２へ転送してからステップＳ２の直前に戻り、アプリケーションからの次の指示を待つ。
【００６０】
ステップＳ８でＮＯの場合は、アプリケーションから文字の印字を指示されていて、その文字はこの文書内で初めて出現したものかステップＳ１３でチェックする。ＹＥＳならばステップＳ１４へ移り、位置移動コマンド３３をプリンタ２へ転送し、ステップＳ１５で登録文字数の限界を超えたかどうかチェックする。限界を超えていないのならば、ステップＳ１６で種別２の種別コマンド３４、つまり、文字の登録＋印字コマンド４１，４２，４３，４４をプリンタ２へ転送する。ステップＳ１５で登録文字数の限界を超えていると判断したならば、ステップＳ１７で種別３の種別コマンド３４、つまり、文字イメージの印字のみのコマンド４３，４４をプリンタ２へ転送する。ステップＳ１６、あるいは、ステップＳ１７の後は、ステップＳ２の直前に戻り、アプリケーションからの次の指示を待つ。
【００６１】
ところで、ステップＳ１７では文字のドットイメージをプリンタ２へ転送するが、ドットイメージの貼り付けだけを行ない、文字のドットイメージの登録は行わないコマンドを使用している。しかし、別の方法としては、登録文字数の限界を超えた場合は、ホスト１上のフレームバッファ上に、文字のドットイメージを直接展開してしまう方法も考えられる。この場合は、ステップＳ６かステップＳ１１で、１ページが単一のイメージブロックとしてプリンタ２へコマンドが転送される。
【００６２】
ステップＳ１３でＮＯならば、アプリケーションからの印字の指示が、その文字について二度目以降の指示かステップＳ１８でチェックする。ＹＥＳならばステップＳ１９で印字位置を指示する位置移動コマンド３３をプリンタ２へ転送し、ステップＳ２０で種別４の種別コマンド３４、つまり、文字コード印字コマンド４１，４２をプリンタ２へ転送し、その後はステップＳ２の直前に戻り、アプリケーションからの次の指示を待つ。
【００６３】
ステップＳ１８でＮＯならば、ステップＳ２１でアプリケーションから文字印字以外の、罫線描画、図形描画、イメージの貼り付け、あるいは、その他の描画の指示があったと考えられるので、それら全てをホスト１上のフレームバッファにイメージとして展開し、その後はステップＳ２の直前に戻りアプリケーションからの次の指示を待つ。
【００６４】
ホスト１では以上の手順によって印刷データをコマンドの列としてプリンタに送り付ける。
【００６５】
（受信管理プログラム）
図９，１０は、プリンタ２における受信管理プログラム５１の動作を説明するためのフローチャートである。このプログラムはプリンタ２の電源立ち上げと同時に動作を開始する。
【００６６】
まず、ステップＳ３１で受信バッファ１０、フレームバッファ１１、ワーク領域１２内にあるページ管理表１３、登録文字管理表１４等をクリアする。ステップＳ３２で、受信部６に受信データ書き込みの限界値、つまり図６で説明した限界ポインタ６１の値を、受信バッファの最大値にセットする。ここで受信部６は、受信バッファの大きさまでフルに書き込める。そのあと、ステップＳ３３でユーザがプリンタを電源オフしたかチェックし、ＹＥＳならこのプログラムの処理を終了する。
【００６７】
ステップＳ３３でＮＯなら、ステップＳ３４で受信部６から受信開始の知らせがあったかチェックする。受信開始の知らせとは、受信部６がホスト１から受け取った転送データの中から、ジョブ開始コマンド３１を検知したかどうかの知らせである。ステップＳ３４でＮＯなら、ステップＳ３３の直前に戻り、ループを形成してホスト１からのプリントコマンドの転送を待つ。
【００６８】
ステップＳ３４でＹＥＳなら、ステップＳ３５で受信部６へ受信データの受信バッファ１０への書き込みを指示する。
【００６９】
なお受信部６は、ジョブ開始コマンド３１を検知したら、まずホスト１からの受信を一時停止し、受信管理プログラム５１に対してジョブ開始コマンド３１を検知したことを知らせ、それから受信管理プログラム５１から受信データの受信バッファ１０への書き込みが指示されるまで待つ。これがステップＳ３５に相当する。また、受信部６は、ジョブ開始コマンド３１を検知するまでの受信データは全て捨てる。つまりホスト１からデータは受信するが、受信バッファ１０には書き込まない。
【００７０】
ステップＳ３５の後は、ステップＳ３６で１秒待つ。この１秒の間に、受信部６が受信データの受信バッファ１０への書込みを進める。そのあとステップＳ３７で、受信部６からページ開始コマンド３２、あるいは、ジョブ終了コマンド３６を検知したかどうかの知らせをチェックし、ＹＥＳならステップＳ３８でページ管理表１３に受信したページの登録を行なう。このとき、単一のページだけでなく、複数のページを同時にページ管理表１３に登録することも有り得る。つまり、ステップＳ３７の時点で、いくつかのページ開始コマンドやジョブ終了コマンドが重なっていることも有り得る。
【００７１】
そして、ステップＳ３９で受信部６からの知らせの中身に、ジョブ終了コマンド３６が含まれていたかチェックし、ＹＥＳならステップＳ４８で受信部６に書き込み終了を指示してから、ステップＳ３３の直前に戻り、ループを形成して次のジョブの受信を待つ。ステップＳ３９でＮＯなら、ステップＳ３６の直前に戻り、ループを形成して、受信データの受信バッファ１０への書込みを続ける。
【００７２】
なお、受信部６はジョブ終了コマンドを検知したら、一旦データ受信を停止する。つまり、複数のジョブの連続がホスト１から送られてきても、一気に受信バッファ１０に勝手に書き込むのではなく、受信管理プログラム５１の指示のもとで、ジョブ単位に受信バッファ１０への書込みを行なう。
【００７３】
ステップＳ３７でＮＯなら、ステップＳ４０で受信部６から受信データの書き込みが指定された限界値に達したとの知らせがあったかチェックする。ＮＯならステップＳ３６の直前に戻ってループを形成し、受信部６による受信データの書き込みを続ける。ステップＳ４０でＹＥＳなら新しい限界値を受信部６に指示可能かステップＳ４１でチェックし、ＹＥＳならステップＳ４２で新しい限界値を受信部６に知らせて、その後はステップＳ３６の直前に戻り、ループを形成して受信部６による受信データの受信バッファ１０への書き込みを続ける。
【００７４】
ステップＳ４１でＮＯなら、受信データが大きすぎるかステップＳ４３でチェックする。“大きすぎる”とは、受信バッファ１０を全て使ってもある１ページ分のデータが受信しきれないことを示している。大きすぎると判断できた場合は、ステップＳ４４でプリンタ２のパネル上にエラー表示を行ない、ステップＳ４５で、受信バッファ１０、フレームバッファ１１、ワーク領域１２内にあるページ管理表１３、登録文字管理表１４等をクリアし、ステップＳ４６で受信部６に対し、受信データ書き込みの限界値を受信バッファの最大値とセットする。その後、ステップＳ４８で受信部６に書き込み終了を指示してから、ステップＳ３３の直前に戻り、ループを形成して次の文書のジョブ開始の知らせを待つ。これによって、大きすぎてエラーとなってしまったページを含んだ文書ジョブは、巨大なページ以降、全て受け捨てられる。
【００７５】
なお、ステップＳ４４で、“プリンタ２のパネル上にエラー表示”と記載したが、パネルは図１のブロック構成図では記載、説明していない。しかし、通常のプリンタ等では、“印刷可”の状態なのか“エラー”の状態なのか“用紙なし”の状態なのか区別するために、プリンタ２の前面か上面に液晶パネルか状態表示ランプが設置されているのが普通である。詳細な説明は省略する。
【００７６】
（受信部６）
図１１，１２は、受信部６の動作を説明するためのフローチャートである。図９，１０では、受信管理プログラム５１の動作を説明する際に、ついでに受信部６の動作も言葉で説明したが、ここでフローチャートとして説明する。受信部６はハードウェアの回路であって、通常のプログラムとは異なるが、動作の順序をフローチャートで説明する。
【００７７】
受信部６は、プリンタ２の電源オンと同時に動作を開始するが、まず、ステップＳ５１で受信を一旦停止する。これは、プリンタ２側をビジー状態として、ホスト１からのデータ転送を拒否することである。そのあと、ステップＳ５２で、受信管理プログラム５１から受信バッファ１０上の書き込み位置の限界値の指示があるまで待ち、指示があったなら、ステップＳ５３でホスト１からのデータの受信は可能だが、受信したデータは受け捨てる状態とする。
【００７８】
そして、ステップＳ５４で、ユーザがプリンタ２の電源をオフしたかチェックし、ＹＥＳなら受信部６の動作を終了する。ＮＯならステップＳ５５で受信したデータからジョブ開始コマンド３１を検知したかチェックし、ＮＯならステップＳ５４の直前に戻り、ホスト１からのジョブ開始コマンド３１を待ち受ける。
【００７９】
ステップＳ５５でＹＥＳなら、ステップＳ５６で一旦受信を停止し、ステップＳ５７でジョブ開始コマンド３１を検知したことを受信管理プログラム５１へ知らせる。受信を一旦停止するとは、プリンタ２がビジー状態で、ホスト１からのデータの受信を拒否している状態である。
【００８０】
次に、ステップＳ５８で受信管理プログラム５１から受信バッファ１０への書き込み開始の指示があるまで待ち、指示があったならステップＳ５９でホスト１からの受信を行ない、受信したデータは受信バッファ１０上に書き込む動作を開始し、続行する。そして、ステップＳ６０でページ開始コマンド３２を検知したかチェックし、ＹＥＳならステップＳ６１で受信管理プログラム５１にページ開始コマンド３２を検知したことを知らせる。この時点で、受信管理プログラム５１は、受信文書のページ位置をページ管理表１３に記録する。ステップＳ６１の後は、ステップＳ５９の直前に戻り、受信と書き込みを実行する。
【００８１】
ステップＳ６０でＮＯなら、ステップＳ６２でジョブ終了コマンド３６を検知したかチェックし、ＹＥＳならステップＳ６３で受信を一旦停止し、ステップＳ６４でジョブ終了コマンド３６を検知したことを受信管理プログラム５１に知らせる。この時点で、受信プログラム５１は、ジョブの終了をページ管理表１３上に記録する。
【００８２】
次にステップＳ６５で、受信管理プログラム５１から受信は可だが受信したデータは受け捨てる、との指示があるまで待ち、指示があったならステップＳ５３の直前に戻り、次の文書のジョブ開始コマンド３１を待つ。
【００８３】
ステップＳ６２でＮＯなら、ステップＳ６６で受信バッファ１０上への書き込み位置が限界に達してしまったかチェックし、ＹＥＳならステップＳ６７で受信を一旦停止し、ステップＳ６８で受信管理プログラム５１へ受信バッファ１０への書き込みが限界に停止したことを知らせる。
【００８４】
次に、ステップＳ６９で受信管理プログラム５１から受信バッファ１０上の新しい書き込み位置の限界値の指示があったかチェックし、ＮＯならステップＳ７０で受信管理プログラム５１から書き込み終了の指示があったかチェックする。ステップＳ７０でＮＯならステップＳ６９の直前に戻り、ループを形成する。つまり、受信管理プログラム５１からの新しい限界値の指示か、書き込み終了の指示があるまで待つ。なお、ステップＳ７０で、受信管理プログラム５１から書き込み終了の指示があると判定されるのは、１ページ分のデータが大きすぎて、受信バッファ１０全部の領域を使っても、１ページ分のデータが納まりきらなくてエラーとなったときである。
【００８５】
ところで、ステップＳ６９でＮＯの場合はステップＳ５９の直前に戻り、受信と書き込みを続行する。また、ステップＳ７０でＹＥＳの場合はステップＳ５３の直前に戻り、以後のデータはジョブ開始コマンド３１が来るまでは受信しても全て受け捨てる。つまり、大きすぎてエラーとなった文書のジョブは、受け捨てられる。
【００８６】
ところで、ステップＳ６６でＮＯの場合もステップＳ５９に戻り、データの受信と受信バッファへの書き込みが続行される。
【００８７】
（解析プログラム）
図１３，１４は、解析プログラム５２の動作を説明するためのフローチャートである。解析プログラム５２は、プリンタ２の電源オンとともに立ち上がり、以後、受信部６によって書き込まれた受信バッファ１０の中のプリントコマンドの解析を行なう。
【００８８】
まず、ステップＳ８１で、ユーザがプリンタ２を電源オフしたかチェックし、ＹＥＳならこのプログラムの処理を終了する。ＮＯならステップＳ８２で受信バッファ１０内に受信済みのページのデータがあるかチェックし、ないならばステップＳ８１の直前に戻り、ループを形成してホスト１からのデータの受信を待つ。なお、ステップＳ８２では、ページ管理表１３を調べることによって、受信済みのページが存在するかどうかをチェックする。ページ管理表１３は、図９，１０で説明したような動作で、受信管理プログラム５１が管理を行なっている。
【００８９】
ステップＳ８２でＹＥＳならば、以後そのページのプリントコマンドを次々と解析して処理してゆくわけだが、まずステップＳ８３で最初のコマンドが位置移動コマンド３３かチェックする。ＹＥＳならステップＳ８４でカーソルの移動を行なう。ここで言うカーソルとは、フレームバッファ１１上の文字、あるいは、イメージを展開する注目位置を示すための概念上のポインタである。具体的には、ワーク領域１２上にＸ座標、Ｙ座標を示す変数として、確保されている。ステップＳ８４の後はステップＳ９６へ飛ぶ。
【００９０】
ステップＳ８３でＮＯならば、ステップＳ８５でそのコマンドが種別コマンド３４で種別１か、すなわち文字登録コマンドかチェックし、ＹＥＳならばステップＳ８６で文字登録プログラム５３による文字の登録処理を行なってからステップＳ９６へ飛ぶ。文字の登録処理の詳細については、後述の図１５で説明する。
【００９１】
ステップＳ８５でＮＯならば、ステップＳ８７でそのコマンドが種別コマンド３４で種別２か、すなわち文字登録・印字コマンドかチェックし、ＹＥＳならばステップＳ８８で文字の登録処理を行ない、ステップＳ８９で印字処理を行なってからステップＳ９６へ飛ぶ。ステップＳ８８の文字登録処理と、前述のステップＳ８６の文字の登録処理は同一である。また、ステップＳ８９の印字処理は、印字プログラム５４によって行なわれるが、詳細は後述の図１６で説明する。
【００９２】
ステップＳ８７でＮＯならば、ステップＳ９０でそのコマンドが種別コマンド３４で種別３か、すなわち文字イメージ印字コマンドかチェックし、ＹＥＳならばステップＳ９１で文字イメージの印字処理のみを行ない、そのあとステップＳ９６へ飛ぶ。
【００９３】
ステップＳ９０でＮＯならば、ステップＳ９２でそのコマンドが種別コマンド３４で種別４か、すなわち文字コードコマンドかチェックし、ＹＥＳならばステップＳ９３で印字処理を行ない、そのあとステップＳ９６へ飛ぶ。ステップＳ９３の印字処理は、前述のステップＳ８９の印字処理と同一である。
【００９４】
ステップＳ９２でＮＯならば、ステップＳ９４でそのコマンドが種別コマンド３４で種別５か、すなわちイメージブロックコマンドかチェックし、ＹＥＳならばステップＳ９５でイメージ伸長回路を使用して、圧縮イメージデータの伸長作業をし、伸長したイメージブロックのフレームバッファ１１への貼り付け作業を行ない、そのあとステップＳ９６へ飛ぶ。
【００９５】
ステップＳ８４、ステップＳ８６、ステップＳ８９、ステップＳ９１、ステップＳ９３、ステップＳ９５のあとか、あるいはステップＳ９４でＮＯならばステップＳ９６へ移る。ステップＳ９６では、そのページの受信データで、解析していないコマンドがまだ残っているかチェックし、残っているならばステップＳ８３の直前に戻ってその未解析コマンドの解析処理を行なう。
【００９６】
ステップＳ９６で、そのページについて未解析のコマンドは残っていないと判断されたなら、ステップＳ９７で排紙プログラム５５による排紙処理を行なう。排紙処理については、後述の図１７で詳細を説明する。
【００９７】
そのあと、ステップＳ９８でページ管理表１３上で、排紙済みのページをクリアし、ステップＳ９９でフレームバッファ１１をクリアし、ステップＳ１００でそのジョブの全てのページの排紙処理が完了したかチェックし、ここでＮＯならばステップＳ８１の直前に戻り、その文書の後続のページのデータ受信を待つ。
【００９８】
ステップＳ１００でＹＥＳなら、ステップＳ１０１で登録文字管理表１４をクリアしてから、ステップＳ８１の直前に戻り、次の文書のジョブのデータ受信を待つ。
【００９９】
なお、ステップＳ９８では、ページ管理表１３上のページの登録をクリアしているが、受信管理プログラム５１は、この領域がクリアされていることをチェックして、受信部６に対して新しい受信データ書き込みの限界値の指示を行なう。
【０１００】
（文字登録プログラム）
図１５は文字登録プログラム５３の動作の詳細を説明するためのフローチャートである。
【０１０１】
このプログラムは解析プログラム５２からコールされる。まず、ステップＳ１１１で圧縮された文字のドットイメージデータを、そのまま登録文字データ領域１５へ移し替える。そして、ステップＳ１１２で登録文字管理表１４内に登録アドレスや書体番号、文字コード等を記録し、処理を終了する。
【０１０２】
（印字プログラム）
図１６は印字プログラム５４の動作の詳細を説明するためのフローチャートである。このプログラムも、解析プログラム５２からコールされる。
【０１０３】
まず、ステップＳ１２１で、書体４１と一致する書体番号で、かつ文字コード４２と一致する文字コードの登録文字のアドレスを、登録文字データ領域１５から得る。そして、ステップＳ１２２で、そのアドレスの圧縮ドットイメージを文字伸長回路１７で伸長し、ステップＳ１２３で伸長済みの文字のドットイメージをフレームバッファ１１上のカーソル位置に貼り付ける。そして、このプログラムの処理を終了する。
【０１０４】
（排紙プログラム）
図１７は排紙プログラム５５の動作の詳細を説明するためのフローチャートである。このプログラムも、解析プログラム５２からコールされる。
【０１０５】
まず、ステップＳ１３１で、フレームバッファ１１上の１ページ分のイメージを、ビデオ転送回路７でビデオ信号に変換してエンジン部４へ送る。そしてステップＳ１３２でエンジン部により印刷された用紙の排紙が確実に完了したかチェックを続け、完了したならこのプログラムの処理を終了する。排紙がまだ完了していない場合は、ステップＳ１３３でプリンタ２に「紙ジャム」エラーか、「用紙なし」エラーが発生したかチェックし、どちらも発生していなければステップＳ１３２の直前に戻ってループを形成し、排紙の完了の監視を続ける。
【０１０６】
「紙ジャム」エラーか「用紙なし」エラーが発生したならば、ステップＳ１３４で「紙詰まりが発生しました。つまった紙を取り除いてください」か「用紙がありません。用紙を追加してください」とプリンタのパネルに表示し、そのあとステップＳ１３５でユーザがつまった紙を取り除くか、あるいはなくなった用紙を追加するまで待ち、それが行なわれたならば、ステップＳ１３１直前に戻り、再度、同じページのビデオ信号の出力と排紙待ちを行なう。
＜第１の実施の形態に特有の効果＞
以上のような構成によって、本実施の形態の印刷システムは、以下のような特有の効果がある。
（１）本実施形態では、コントローラ部３のＣＰＵは、メモリ管理と登録文字データの移し替えだけを行なうので高性能なプロセサは不要であり、製造コストを低く抑えられる。データの受信とメモリへの書き込みや、圧縮データの伸長作業、ビデオ信号の出力作業等は全てハードウェアの回路で行なわれる。このため、イメージ転送だけを前提としたホストベースプリンタ等と比べても、大きなコストアップにはならない。
（２）ホストでの文字イメージの展開処理がほとんど不要なので、ホストのプリンタドライバの処理時間が少なくて済む。文字を含めて、全てイメージデータで送らなければならないホストベースプリンタ等では、文字展開処理にホストの処理時間を割かれてしまうが、ホストの印刷のために要する時間を軽減できる。
（３）文字は、ほとんど文字コードで送れるので、プリンタへのデータ転送量が少なくて済む。文字を含めて、全てイメージで送らなければならないホストベースプリンタ等では、プリンタへのデータ転送量が膨大になる。このため、印刷に要する時間を短くできる。
（４）１ページ分のフレームバッファをコントローラ部に持ち、１ページ分の文字やイメージの展開がフレームバッファ上で完全に完了した時点で用紙への印刷を開始するので、バンド処理を前提としたプリンタでは特有の障害であるオーバーランエラーは発生しない。
（５）ホストベースプリンタではわずかな受信バッファしかなく、プリンタの用紙の給送にあわせて、ホストからバンドに分割したイメージを連続的にプリンタに送る必要がある。この場合、ホストはプリンタへのデータ転送を最優先にするために、ホスト上の他のアプリケーションの動きがロックする、というような現象がある。しかし、本実施の形態では、１ページ分のフレームバッファをコントローラ部に持っていって、１ページ分の文字やイメージの展開がフレームバッファ上で完全に完了した時点で、用紙への印刷を開始するので、ホスト上でのロックの現象等は発生しない。
［第２の実施の形態］
次に、図を用いて第２の実施の形態の印刷システムを説明する。
＜システムの構成＞
第１の実施の形態では、文字データ、イメージデータをＲＡＭ９上のフレームバッファ１１に展開してから、エンジン部４へビデオ転送しているが、第２の実施の形態では、文字データ、イメージデータをＲＡＭ９上のふたつのバンドメモリ上へ交互に展開してエンジン部４へビデオ転送する点が、大きな違いである。
【０１０７】
図１８は、システム全体を説明するためのブロック構成図である。大部分は図１で説明した各要素と一致するが、異なる部分だけ説明する。
【０１０８】
ＲＡＭ９上には、フレームバッファ１１の代わりに、ふたつのバンドメモリとしてバンドＡ７１、バンドＢ７２が設けられ、またビデオ転送回路７の代わりに、イメージ伸長・ビデオ転送回路７３が設けられている。イメージ伸長・ビデオ転送回路７３は、バンドＡ７１、バンドＢ７２のメモリイメージを交互に、ビデオ信号に変換してエンジン部４へ転送する。それに加えて、ドライバから送られてくるあるバンドのデータが何も含まれていない空白のバンドのときは、その部分のビデオ信号は転送しない機能を持つ。さらに、ドライバから送られてくるあるバンドの圧縮イメージデータに、単一のイメージブロックしか含まれていないときは、その圧縮されたイメージブロックをバンドに展開せず、イメージデータに伸長するとともにビデオ信号に変換してエンジン部４へ転送する機能を待つ。つまり、３つの機能を合わせ持っている。
【０１０９】
なお、受信バッファ１０に格納されているデータは、第１の実施の形態では、ページごとに文字データ、イメージデータが並んでいるだけだが、本実施の形態では、ページの中がさらに１６のバンドに区別されて、バンドの区分の中に、文字データ、イメージデータがそれぞれ並んでいる。もちろん、ホスト１上のプリンタドライバがこのような並びとしてプリンタ２へデータを出力している。
【０１１０】
図１９はプリンタ２内での、コントローラ部３におけるイメージと文字のビデオ信号出力の原理の説明図である。イメージと文字とは４つの径路によりエンジン部４に転送される。第１は、イメージだけのバンドの通る径路で、バンドメモリを経由しない径路である。イメージ伸長・ビデオ転送回路７３は、単一のイメージだけのバンドを伸長すると、そのままプリンタエンジンに転送する。第２及び第３は、文字を含むバンドの通る径路で、いったんバンドＡ７１またはバンドＢ７２に展開し、これらから交互にエンジン部に転送される。第４は、空白のバンドに対する径路で、ビデオ信号は転送されない。このように、イメージ伸張・ビデオ転送回路７３の機能により４つの径路が提供されている。
【０１１１】
図１８でも一部説明したが、ホスト１上のドライバは印刷しようとする文書について、まず文字部分と、その文字以外の部分に分離する。文字以外の部分はホスト１上のフレームバッファ上に全てイメージとして展開しておく。そして、１ページを１６分割したバンドごとに、文字データ部分とイメージデータ部分を別々にプリンタ２へ転送する。その際、文字部分については、まず出現する文字の圧縮したドットパターンをプリンタへ送って登録しておき、印字データとして文字コード列を送る。文字の登録については、第１の実施の形態と同様に、ひとつの文書ごとに、一文字については一度登録すれば良い。また、ひとつの文書ジョブの印刷が終了すれば、登録した文字は消去される。
【０１１２】
バンドの高さについては、１６分割されたバンドはそれぞれ同一である。つまり均等に分割されている。
【０１１３】
ふたつのバンドにまたがった文字については、それぞれのバンドに印字コードが所属する形でドライバからプリンタ２へ転送される。
【０１１４】
大きな文字については、イメージとして展開されてからドライバからプリンタ２へ転送される。文字伸長回路１７が扱える文字の大きさには限界があり、その限界よりも大きな文字は、上記のようにイメージとして処理される。
【０１１５】
ホスト１上のフレームバッファに展開されたイメージは、全体を１６のバンドに分割され、さらにバンド内で実際にイメージのある矩形部分だけを取り出して圧縮されて、単一のイメージブロックとしてドライバからプリンタ２へ転送される。図１９では、イメージデータの点線で囲んだ部分だけが実際にイメージブロックとして転送されることを示している。
【０１１６】
プリンタ２のコントローラ部３では、あるバンドがイメージブロックと文字データを両方とも含んでいる場合は、受信した圧縮イメージデータ１９をイメージ伸長回路１６を使って伸長し、バンドＡ７１か、バンドＢ７２上に展開する。また、受信した文字データ１８を、それに含まれる文字コードごとに、登録されている圧縮ドットイメージデータを文字伸長回路１７によって伸長し、バンドＡ７１か、バンドＢ７２上に展開する。文字とイメージは論理和をとられ、バンド上に書き込まれる。
【０１１７】
なお、奇数の番号のバンドのときは、バンドＡ７１へ展開し、偶数の番号のバンドのときはバンドＢ７２へ展開する。
【０１１８】
バンドＡ７１への文字及びイメージの展開が終わったら、イメージ伸長・ビデオ転送回路７３へエンジン部４へのビデオ転送を指示し、この回路によるビデオ信号の出力中にバンドＢ７２への文字とイメージの展開を行なう。バンドＢ７２への展開が終り、先に指示していたバンドＡ７１のビデオ出力が終わったなら、バンドＢ７２のビデオ信号出力をイメージ伸長・ビデオ転送回路７３に指示する。そして、バンドＡ７１への文字とイメージの展開を開始する。
【０１１９】
以上のような、ふたつのバンドメモリへの文字とイメージの展開と、ビデオ信号の出力を行なうことで、１ページ分の印刷を行なう。
【０１２０】
文字だけしか含まれていないバンドのときも同一の動作である。
【０１２１】
なお、文字もイメージも含まれていない空白のバンドのときは、イメージ伸長・ビデオ転送回路７３は、バンド高さ分、ビデオ信号をエンジン部４へ送らない。
【０１２２】
また、あるバンドにイメージのブロックだけしか含まれていないときは、イメージ伸長・ビデオ転送回路７３に対して、イメージブロックのデータ伸長とビデオ信号のエンジン部４への出力を指示する。つまり、バンドメモリへのイメージ展開を経由せずに、直接エンジン部４へのビデオ転送を行なうわけである。
【０１２３】
図１９には、上記４つの経路でビデオ信号が出力されることが図示されている。これらの経路が混合した形で１ページの印刷が行なわれる。
【０１２４】
図２０は、ホスト１からプリンタ２へ送られる文字データ、イメージデータのコマンド構造の説明図である。第１の実施の形態の図３との違いは、ページ開始コマンド３２のあとに、バンド開始コマンド８１があることである。
【０１２５】
バンド開始コマンド８１は、１ページ当たり１６個繰り返される。文字データやイメージデータがないバンドについても、バンド開始コマンド８１は発行される。
【０１２６】
なお、種別コマンド３４ごとのコマンド列３５の構造は、第１の実施の形態の図４と同一なので説明は省略する。
【０１２７】
図２１は、コントローラ部３のＲＯＭ８に内蔵されているプログラムを説明するための図である。第１の実施の形態にあった排紙プログラム５５はこの図にはないが、解析プログラム５２が、バンドごとの解析と、バンドごとのビデオ出力、排紙作業を行っている。受信管理プログラム５１及び文字登録プログラム５３は、第１の実施の形態と全く同じであるが、解析プログラム５２及び印字プログラム５４については後述のフローチャートで動作の詳細を説明する。
【０１２８】
第１の実施の形態では、受信バッファ１０内の受信したデータの書き込み処理が進行する際の各ポインタの位置関係を図６で説明した。第２の実施の形態でも受信バッファへの書き込み処理の動作は全く同一なので説明は省略する。
【０１２９】
また、ワーク領域１２には、ページ管理表１３、登録文字管理表１４、登録文字データ領域１５等が存在するが、この部分についても第１の実施の形態と同一なので説明は省略する。
＜システムの制御手順＞
次に、本発明の第２の実施の形態の動作をフローチャートを用いて説明する。
【０１３０】
図２２〜２４は、ホスト１上のプリンタドライバの動作を説明するフローチャートである。プリンタドライバは、ユーザが用いるアプリケーションソフトで作成した文書データから図２０で説明した文字やイメージのプリンタコマンドを作成、プリンタ２へ転送する。ユーザがアプリケーションソフトから文書の印刷を指示すると、ホスト１内でプリンタドライバが起動される。
【０１３１】
図示されてはいないが、ドライバは起動時にはホスト１のメモリ上に１ページ分の大きさのイメージ展開領域としてのフレームバッファを確保し、同時にフレームバッファをクリアする。また、ドライバの文書印刷処理の終了時には、フレームバッファとして使われていたメモリ領域は開放される。
【０１３２】
処理としては、まずステップＳ１４１でジョブ開始コマンド３１をプリンタ２へ転送し、次にステップＳ１４２で変数ｍに印刷しようとしている文書のページ数に１を加算した値をセットし、ステップＳ１４３で、処理中のページ番号を示す変数ｍｐに１をセットする。そして、ステップＳ１４４で変数ｍｐが変数ｍより小さいかチェックし、ＮＯなら文書の全てのページ数の処理が終わったので、ステップＳ１７２でジョブ終了コマンドを転送して、ドライバの処理を終了する。
【０１３３】
ステップＳ１４４でＹＥＳなら、ステップＳ１４５でページ開始コマンド３２をプリンタ２へ転送し、ステップＳ１４６でｍｐページ目のアプリケーションからの文字印字指示を蓄積し、ステップＳ１４７で蓄積した文字印字指示を印字位置でソーティングし、ステップＳ１４８でｍｐページ目のアプリケーションからの文字印字指示以外の描画指示をホスト１上のフレームバッファに展開する。ここで文字印字指示以外の描画指示とは、罫線や図形描画、イメージの貼り付け等である。
【０１３４】
また、ステップＳ１４７における文字印字指示の印字位置によるソーティングとは、文字印字指示を、用紙の長手方向についての印字位置でソーティングを行い、次に、用紙の短手方向についての印字位置でソーティングを行なう。これにより、文字印字の指示は、指示される印字位置が、縦長の用紙で左上から右下へ順に並ぶように並べ替えられた。
【０１３５】
次にステップＳ１４９で変数ｎに１７をセットする。１７と言う値は、用紙サイズを長手方向に均等に１６バンドに分割する意味での「１６」の値に１を加算した値である。そしてステップＳ１５０で処理中のバンド番号を示す変数ｎｐに１をセットする。ステップＳ１５１で変数ｎｐが変数ｎより小さいかチェックし、ＮＯなら１ページの１６個のバンド処理が終了したことを意味するので、変数ｍｐに１を加算して、ステップＳ１４４の直前に戻り、次のページのバンド出力処理に移る。
【０１３６】
ステップＳ１５１でＹＥＳなら、ステップＳ１５３でバンド開始コマンド８１をプリンタ２へ転送し、ステップＳ１５４で蓄積したアプリからの印字指示からｎｐバンド目に含まれる文字印字指示をピックアップし、ステップＳ１５５で変数ｓにピックアップした文字数に１を加算した値をセットして、ステップＳ１５６で、処理中の文字が１つのバンドにおいて何番目であるか示す変数ｓｐヘ１をセットする。
【０１３７】
なお、ステップＳ１５４でピックアップする文字印字指示は、ｎｐバンド目に文字の一部でもかかっているものは全てピックアップする。よって、文字の印字位置によっては、ふたつのバンドにまたがる場合がある。
【０１３８】
次にステップＳ１５７で変数ｓｐが変数ｓより小さいかチェックし、ＮＯならｎｐバンド目に含まれる文字データの転送処理は全て済んだことになるので、ステップＳ１５８以降でｎｐバンド目のイメージデータの転送処理に移る。つまり、ステップＳ１５８では、ホスト上のフレームバッファから、ｎｐバンド目の位置と大きさのイメージを切り出し、ステップＳ１５９で空白のバンドかチェックし、ＹＥＳなら何もせずステップＳ１６３に移る。
【０１３９】
ステップＳ１５９でＮＯなら、ステップＳ１６０でイメージが実際に含まれる矩形領域を、単一のブロックとして切り出し、まずステップＳ１６１でブロックの貼り付け位置を示す位置移動コマンド３３をプリンタ２へ転送し、ステップＳ１６２で種別５に対応するコマンド、つまりイメージブロックコマンド４５，４６，４７，４８をプリンタ２へ転送する。当然ながら、イメージブロックデータはデータ圧縮されて転送される。
【０１４０】
そして、ステップＳ１６３で変数ｎｐに１を加算し、ステップＳ１５１の直前に戻り、次のバンドの転送処理に移る。
【０１４１】
ステップＳ１５７でＹＥＳの場合は、ステップＳ１６４でｓｐ番目の文字はこの文書で初めて現れる文字の印字の指示かチェックし、初めてならばステップＳ１６５で印字位置を示す位置移動コマンド３３をプリンタ２へ転送し、ステップＳ１６６でプリンタ２側が登録可能な文字数の限界に達したかチェックし、限界に達したならステップＳ１６７で種別３に対応するコマンド、つまり、文字イメージ印字のみのコマンド４３，４４をプリンタ２へ転送して、ステップＳ１７１へ移る。
【０１４２】
ステップＳ１６６で限界に達していないと分かれば、ステップＳ１６８で種別２に対応するコマンド、つまり文字登録＋印字コマンド４１，４２，４３，４４をプリンタ２へ転送してからステップＳ１７１ヘ移る。当然ながら、プリンタ２へ転送される一文字のドットイメージは、データ圧縮されて転送される。
【０１４３】
ステップＳ１６４でＮＯならば、この文字の印字の指示が文書の中で二度目以降の指示であることを示しているので、ステップＳ１６９で印字位置を示す位置移動命令３３をプリンタ２へ転送し、次にステップＳ１７０で種別コマンド３４が４、つまり文字コード印字コマンド４１，４２をプリンタ２へ転送する。
【０１４４】
そして、ステップＳ１７１で変数ｓｐに１を加算してステップＳ１５７の直前に戻り、次の文字データのプリンタ２への転送処理を行なう。
【０１４５】
図２５，２６、図２７，２８は、解析プログラム５２の動作を説明するためのフローチャートである。解析プログラム５２もプリンタ２の電源オンとともに立ち上がり、以後、受信部６によって書き込まれた受信バッファ１０の中のプリントコマンドの解析、及び排紙処理を行なう。
【０１４６】
まず、ステップＳ１８１でユーザがプリンタ２を電源オフしたかチェックし、ＹＥＳならこのプログラムの処理を終了する。ＮＯならステップＳ１８２で受信バッファ１０内に受信済みのページのデータがあるかチェックし、ないならばステップＳ１８１の直前に戻りループを形成してホスト１からのデータの受信を待つ。
【０１４７】
なお、ステップＳ１８２では、ページ管理表１３を調べることによって、受信済みのページが存在するかどうかをチェックする。ページ管理表１３は、第１の実施の形態の図８のフローチャートで説明したような動作で受信管理プログラム５１が管理を行なっている。
【０１４８】
ステップＳ１８２でＹＥＳならば、以後そのページのプリントコマンドを次々と解析して処理してゆくわけだが、まず、ステップＳ１８３で変数ｎに「１７」をセットする。「１７」は１ページのバンド分割数「１６」に１を加算した値である。次にステップＳ１８４で、変数ｎｐに１をセットし、ステップＳ１８５で変数ｎｐが変数ｎより小さいかチェックし、ＮＯならバンドの処理が全て完了したことを示し、ステップＳ２２３へ飛び、排紙の完了を待つ。
【０１４９】
ステップＳ１８５でＹＥＳならステップＳ１８６でバンドｎｐ番目のデータは、文字データもイメージデータもなく、空白バンドなのかチェックし、ＹＥＳならステップＳ１８６で変数ｔに０をセットする。そしてステップＳ１９３へ飛ぶ。
【０１５０】
ステップＳ１８６でＮＯならステップＳ１８８でバンドｎｐ番目のデータに文字データが含まれているかチェックし、ＹＥＳならステップＳ１８９で変数ｎｐが奇数なら変数ｔに１をセットし、変数ｎｐが偶数なら変数ｔに２をセットし、ステップＳ１９３へ飛ぶ。
【０１５１】
ステップＳ１８８でＮＯならステップＳ１９０でバンドｎｐ番目のデータに複数のイメージブロックデータが含まれているかチェックし、ＹＥＳなら変数ｎｐが奇数なら変数ｔに１をセットし、変数ｎが偶数なら変数ｔに２をセットし、ステップＳ１９３へ飛ぶ。なお、図２２で説明したドライバの動作では、ひとつのバンドに複数のイメージブロックが存在することは有り得ない。
【０１５２】
ステップＳ１９０でＮＯならバンドｎｐ番目のデータとしては、単一のイメージブロックしか存在しないことを示しているが、ステップＳ１９２で変数ｔに３をセットして、ステップＳ１９３へ飛ぶ。
【０１５３】
ステップＳ１９３では、変数ｔが１、あるいは２かチェックし、ＹＥＳならステップＳ１９４以降でバンドｎｐ番目に含まれる文字データやイメージブロックデータを先頭から解析して行き、バンドＡ７１、バンドＢ７２への展開処理を行なう。まず、ステップＳ１９４では、変数ｔが１ならバンドＡ７１をクリアし、変数ｔが２ならバンドＢ７２をクリアする。そして、ステップＳ１９５で解析しようとしているコマンドが、位置移動コマンド３３かチェックする。ＹＥＳならステップＳ１９６でカーソルの移動を行なう。ここで言うカーソルとは、バンドメモり上で文字、あるいは、イメージを展開する位置を示すための概念上のポインタである。具体的には、ワーク領域１２上にＸ座標、Ｙ座標を示す変数として確保されている。カーソル位置は、バンドの左上端を原点としている。ドライバから送られてくる位置移動コマンド３３も、各バンドの左上端を原点と考える相対位置を前提として転送されてくる。ページの左上端を原点としているわけではない。ステップＳ１９６のあとは、ステップＳ２０８へ飛ぶ。
【０１５４】
ステップＳ１９５でＮＯならば、ステップＳ１９７でそのコマンドが種別コマンド３４で種別が１かチェックし、ＹＥＳならばステップＳ１９８で文字登録プログラム５３による文字の登録処理を行なってから、ステップＳ２０８へ飛ぶ。文字の登録処理は、第１の実施の形態の図１５のフローチャートで説明した動作と同じであるので、詳細な説明は省略する。
【０１５５】
ステップＳ１９７でＮＯならば、ステップＳ１９９でそのコマンドが種別コマンド３４で種別が２かチェックし、ＹＥＳならばステップＳ２００で文字の登録処理を行ない、ステップＳ２０１で印字処理を行なってからステップＳ２０８へ飛ぶ。ステップＳ２００の文字の登録処理と、前述のステップＳ１９８の文字の登録処理は同一である。また、ステップＳ２０１の印字処理は、印字プログラム５４によって行なわれるが、詳細は後述の図２９で説明する。
【０１５６】
ステップＳ１９９でＮＯならば、ステップＳ２０２でそのコマンドが種別コマンド３４で種別が３かチェックし、ＹＥＳならばステップＳ２０３で文字イメージの印字処理のみを行ない、そのあとステップＳ２０８へ飛ぶ。
【０１５７】
ステップＳ２０２でＮＯならば、ステップＳ２０４でそのコマンドが種別コマンド３４で種別が４かチェックし、ＹＥＳならばステップＳ２０５で印字処理を行ない、そのあとステップＳ２０８へ飛ぶ。ステップＳ２０５の印字処理は、前述のステップＳ２０１の印字処理と同一である。
【０１５８】
ステップＳ２０４でＮＯならば、ステップＳ２０６でそのコマンドが種別コマンド３４で種別か５かチェックし、ＹＥＳならばステップＳ２０７でイメージ伸長回路１６を使用して、圧縮イメージデータの伸長作業をし、伸長したイメージブロックのバンドメモリ７１，７２への貼り付け作業を行なう。その際、変数ｔが１なら、バンドＡ７１への貼り付けを行ない、変数ｔが２ならバンドＢ７２への貼り付けを行なう。そして、ステップＳ２０８へ飛ぶ。
【０１５９】
ステップＳ１９６、ステップＳ１９８、ステップＳ２０１、ステップＳ２０３、ステップＳ２０５、ステップＳ２０７のあとか、あるいはステップＳ２０６でＮＯならばステップＳ２０８へ移る。ステップＳ２０８では、バンドｎｐ番目の受信データで、解析していないコマンドがまだ残っているかチェックし、残っているならば、ステップＳ１９５の直前に戻って、その未解析コマンドの解析処理を行なう。
【０１６０】
ステップＳ１９３でＮＯの場合、あるいはステップＳ２０８でＮＯの場合は、図２７のステップＳ２０９へ飛ぶ。ステップＳ２０９以降、ステップＳ２２２まではバンド単位のエンジン部４へのビデオ信号出力処理を示している。
【０１６１】
まず、ステップＳ２０９では、変数ｎｐが１かチェックする。つまり、あるページの最初のバンドかチェックする。最初のバンドであれば、ステップＳ２１０でエンジン部４に給紙開始を指示して、ステップＳ２１１で用紙があるかチェックし、用紙なしならばステップＳ２１２でユーザが用紙を追加セットするまで待ち、それからステップＳ２１５へ飛ぶ。ステップＳ２１１でＮＯならば、つまり用紙があるならステップＳ２１５へ飛ぶ。
【０１６２】
ステップＳ２０９で最初のバンドではないと判断されたならば、ステップＳ２１３で前のバンドのビデオ転送処理が終了するまで待つ。但し、待っている間に、紙ジャム、つまり紙詰りが発生しているかをステップＳ２１４で常に監視している。仮に紙ジャムが発生しているのならば、ステップＳ２１４からステップＳ２２８へ飛び、紙ジャムからの復帰処理を行なう。
【０１６３】
ステップＳ２１３でＹＥＳなら、つまり前のバンドのビデオ転送が終了したなら、ステップＳ２１５で変数ｔが０かチェックし、ＹＥＳならステップＳ２１６でイメージ伸長・ビデオ転送回路７３に空白バンドの出力処理を指示してステップＳ２２２へ飛ぶ。
【０１６４】
ステップＳ２１５でＮＯなら、ステップＳ２１７で変数ｔが１かチェックし、ＹＥＳならステップＳ２１８でイメージ伸長・ビデオ転送回路７３にバンドＡ７１のビデオ信号出力指示を行ない、ステップＳ２２２へ飛ぶ。
【０１６５】
ステップＳ２１７でＮＯならば、ステップＳ１２９で変数ｔが２かチェックし、ＹＥＳならステップＳ２２０でイメージ伸長・ビデオ転送回路７３にバンドＢ７２のビデオ信号出力指示を行ない、ステップＳ２２２へ飛ぶ。
【０１６６】
ステップＳ２１９でＮＯならば、ステップＳ２２１でイメージ伸長・ビデオ転送回路７３にｎｐ番目のバンドデータに含まれる単一イメージブロックを、圧縮イメージのデータ伸長をしながらビデオ信号を出力することを指示して、ステップＳ２２２へ飛ぶ。
【０１６７】
ステップＳ２２２では変数ｎｐに１を加算してから、ステップＳ１８５の直前に戻り、次のバンドデータのバンドメモリへの展開、及びビデオ信号出力処理へ移る。
【０１６８】
ステップＳ１８５でＮＯの場合は、バンド出力処理がすべて終了して、あとはステップＳ２２３以降で印刷された用紙の排紙の完了を待つだけとなるが、まず図２８のステップＳ２２３で排紙が完了したかチェックし、ＮＯならばステップＳ２２７で紙ジャム、つまり紙詰まりが発生したかチェックし、ＮＯならばステップＳ２２３の直前に戻りループを形成して排紙の完了まで待つ。
【０１６９】
ステップＳ２２３で、排紙が完了したと判断したならば、ステップＳ２２４でページ管理表１３上の、排紙済みページの記述をクリアし、ステップＳ２２５でジョブ終了、つまり、一つの文書の全ページを排紙し終わったかチェックし、ＹＥＳならステップＳ２２６で登録文字管理表１４をクリアし、ステップＳ１８１の直前に戻って、次の文書のジョブのデータ受信を待つ。
【０１７０】
ステップＳ２２５でＮＯならば、この時もステップＳ１８１の直前に戻って、その文書の後続のページのデータ受信を待つ。
【０１７１】
ステップＳ２２７でＹＥＳならば、ステップＳ２２８で紙ジャム発生をパネル表示し、ステップＳ２２９でユーザが詰まった紙を取り除くまで待ち、取除いたことがわかればステップＳ１８１の直前まで戻り、もう一度前回処理を行なった受信済みページデータのバンドへの展開、ビデオ出力、排紙処理を試みる。
【０１７２】
なお、ステップＳ２２４では、ページ管理表１３上のページの登録をクリアしているが、受信管理プログラム５１は、この領域がクリアされていることをチェックして、受信部６に対して新しい受信データ書き込みの限界値の指示を行なう。
【０１７３】
図２９は、印字プログラム５４の動作の詳細を説明するためのフローチャートである。このプログラムも、解析プログラム５２からコールされる。
【０１７４】
まず、ステップＳ２３１で、登録文字管理表１４をサーチして、書体番号、文字コードの一致する登録文字の登録文字データ領域１５上の登録アドレスを得る。そして、ステップＳ２３２で文字伸長回路１７で圧縮された文字のどっちイメージデータを伸長し、ステップＳ２３３で貼り付ける文字がバンド境界上にかかってしまうかチェックし、境界上にかかってしまうと判断できれば、ステップＳ２３４で文字イメージの境界値処理を行ない、カーソル位置の微調整も行なってからステップＳ２３５へ移る。ステップＳ２３３でＮＯの場合も、ステップＳ２３５へ移る。
【０１７５】
ステップＳ２３４での境界値処理とは、１文字の文字イメージのうち、バンドの領域内にかかる部分だけ切り出してくることである。その小さなイメージ部分だけをバンド領域内にはるので、カーソル位置も微調整してバンド領域内に移動しなければならない場合がある。
【０１７６】
例えば、ある文字がバンドの上端の境界で文字ボックスの上半分ぐらいはみ出しているとする。カーソル位置は、文字ボックスの左上端なので、この時点ではバンド領域外にある。次に境界値処理を行なって、バンド領域内に収まる文字ボックスの下半分のイメージだけを切り出してくる。とすれば、下半分だけの文字の文字ボックスの左上端位置が、新しいカーソル位置となる。この位置は、バンド領域の上端の境界上に位置する。これが、「カーソル位置の微調整」の作業である。
【０１７７】
また、文字ボックスが、バンド領域の四隅にかかってしまう場合も、同様にバンド領域内にかかる部分の文字イメージの切り出しと、カーソル位置の微調整が行なわれる。
【０１７８】
ステップＳ２３５では、伸長済みの文字のドットイメージをバンドＡ７１か、バンドＢ７２上のカーソル位置に貼り付ける。図２５で説明した変数ｔが１ならバンドＡ７１に貼り付け、変数ｔ２がバンドＢ７２に貼り付ける。そして、このプログラムの処理を終了する。
【０１７９】
次に、図３０〜図３３で、イメージ伸長・ビデオ転送回路７３の動作を説明する。イメージ伸長・ビデオ転送回路７３はハードウェア回路であってプログラムではないが、その動作を図３１，図３２，図３３のフローチャートを用いて説明する。なお、前述したように、解析プログラム５２がイメージ伸長・ビデオ転送回路７３に指示をして、エンジン部４に対してビデオ信号の出力を実行させる。イメージ伸長・ビデオ転送回路７３の処理の中には、空白バンドの処理、バンドＡ７１、バンドＢ７２からのビデオ信号出力処理、圧縮されたイメージブロックデータから直接の圧縮イメージデータの伸長と、伸長したデータからのビデオ信号出力処理の３つが含まれる。
【０１８０】
また、図示はしていないが、イメージ伸長・ビデオ転送回路７３の中には、イメージブロックデータから１ライン分、圧縮イメージデータを伸長したあとで、伸長したデータをとっておくためのラインバッファが内蔵されている。このラインバッファのデータをもとに、ビデオ信号を作成してエンジン部４に出力する。
【０１８１】
まず、図３０では図３１，図３２，図３３のフローチャートで用いる各変数の説明をする。
【０１８２】
変数ｈは、バンドの高さを示す。これは、ビデオ信号を出力する際のライン数に相当する。変数ｌは、バンドの幅を示す。この大きさはバイトを単位としている。つまり、８の倍数のドット数が、ビデオ信号の白黒のビットに変換されて出力される。
【０１８３】
変数ｈａは、イメージブロックに到達するまでの上マージンである。ビデオ信号は、何も送る必要のない部分のライン数である。変数ｈｂは、イメージブロックの高さ、つまりブロックのライン数である。
【０１８４】
変数ｌａは、イメージブロックの左マージンである。この部分は、ビデオ信号は何も送る必要がない。変数ｌｂは、イメージブロックの幅である。この値についても大きさはバイトを単位としている。つまり８の倍数のドット数が、ビデオ信号の白黒のビットに変換されて出力される。
【０１８５】
前述したホスト１上のドライバの動作としては、バンドやイメージブロックデータの幅方向は、“バイト単位の大きさ”に揃えることについては何も記述されていなかったが、ハードウェア回路を用いた高速なイメージ出力を可能にするには上記のような区切りの良くなる工夫が必要になる。ドライバも、このような工夫を前提としてプリントコマンドをプリンタ２へ転送する。
【０１８６】
次に、図３１，図３２，図３３でイメージ伸長・ビデオ転送回路７３の動作を説明する。
【０１８７】
この回路は、プリンタ２の電源オンと同時に動作を開始するが、まずステップＳ２４１でユーザがプリンタ２を電源オフしたかチェックし、ＹＥＳならこのかいろは動作を終了する。ＮＯならステップＳ２４２で解析プログラム５２からのビデオ信号出力の指示があったかチェックし、ＮＯならステップＳ２４１の直前に戻り、ループを形成して解析プログラム５２からの指示を待つ。
【０１８８】
ステップＳ２４２でＹＥＳならステップＳ２４３で変数ｈにバンドの高さ、つまり、バンドの総ライン数をセットする。この値は解析プログラム５２からビデオ信号の出力の指示があったときに、同時に与えられる。そして、ステップＳ２４４で解析プログラム５２からの指示が、空白バンドの出力指示かチェックし、ＹＥＳならステップＳ２４５で変数ｔに０をセットしてステップＳ２５０へ飛ぶ。
【０１８９】
ステップＳ２４４でＮＯならば、ステップＳ２４６で変数ｌにバンド幅の値をセットする。この値も解析プログラム５２からビデオ信号の出力の指示があったときに同時に与えられる。次に、ステップＳ２４７で解析プログラム５２からの指示が、バンドメモリＡ７１、あるいはバンドメモリＢ７２からのビデオ信号出力指示かチェックし、ＹＥＳならステップＳ２４８で変数ｔに１をセットして、ステップＳ２５０へ飛ぶ。
【０１９０】
ステップＳ２４７での判定がＮＯとは、バンド内に単一のイメージブロックがあって、その圧縮されたイメージブロックデータを、イメージ伸長・ビデオ転送回路７３に対して、データ伸長を行なってビデオ信号を出力することを指示していることを意味する。そこで、ステップＳ２４９で変数ｔに２をセットし、変数ｈａにはブロックの上マージン、変数ｈｂにはブロック高さ、つまりブロックの総ライン数、変数ｌａにはブロックの左マージン、変数ｌｂにはブロックの幅をセットする。これらの値も、解析ブロック５２からビデオ信号の出力の指示があったときに、同時に与えられている。そして、ステップＳ２５０へ移る。
【０１９１】
ステップＳ２５０では、変数ｈｐに０をセットする。変数ｈｐは、ビデオ信号を出力すべきバンド上のラインの位置を示すカウンタである。そしてステップＳ２５１で変数ｔが０、あるいは１かチェックし、０か１ならステップＳ２５２でエンジン部４からビデオ信号の出力要求があったかチェックし、ＮＯならループを形成して、この要求があるまで待つ。ビデオ信号出力要求があったなら、ステップＳ２５３で変数ｔが１かチェックし、ＮＯならステップＳ２５５へ飛ぶ。ＹＥＳなら、ステップＳ２５４でバンドメモリＡ７１かＢ７２上のｈｐ番目のラインをビデオ信号に変換して、エンジン部４へ出力してステップＳ２５５へ移る。ステップＳ２５４でバンドＡ７１から出力するのか、バンドＢ７２から出力するのかの指示は、解析プログラム５２からビデオ信号の出力の指示があったときに同時に与えられている。
【０１９２】
ステップＳ２５５では、変数ｈｐに１を加算して、ステップＳ２５６で変数ｈｐが変数ｈよりも小さいかチェックしてＹＥＳなら、つまりバンド内のラインでまだビデオ信号が送り終っていない部分が残っているなら、ステップＳ２５２の直前に戻って次のラインのビデオ信号出力作業を続ける。
【０１９３】
ステップＳ２５６でＮＯなら、つまりバンド内の全てのラインはビデオ信号を送り終わったならば、ステップＳ２５７で解析プログラム５２に対して指示のあったバンドのビデオ信号の出力が完了したことを知らせる。この中には、空白バンドの出力処理が完了したことも含まれる。そして、ステップＳ２４１の直前に戻って、解析プログラム５２からの次のビデオ出力指示を待つ。
【０１９４】
ステップＳ２５１でＮＯなら、バンド内のイメージブロックデータからのビデオ信号出力指示であるわけだが、図３３におけるステップＳ２５８でまずブロックデータ中の第１のラインの圧縮イメージデータの伸長を実行し、伸長したデータをイメージ伸長・ビデオ転送回路７３内に存在するラインバッファにセットする。これは、圧縮データの伸長作業を前もってしておくことで、ビデオ信号出力時に伸長作業を行なったのでは、ビデオ出力のタイミングに間に合わなくなることを防ぐためである。
【０１９５】
そのあと、ステップＳ２５９でループを形成して、エンジン部４からのビデオ信号要求があるまで待ち、あったならばステップＳ２６０で変数ｈｐが変数ｈａより小さいかチェックし、ＹＥＳなら何もせずステップＳ２６７へ飛ぶ。これは、ブロックの上マージンの部分では、ビデオ信号を送らず何もしないことを意味している。
【０１９６】
ステップＳ２６０でＮＯならば、ステップＳ２６１で、変数ｈｐが変数ｈａと変数ｈｂとを加算した値より小さいかチェックし、ここでＮＯならばビデオ信号を送らず何もせずステップＳ２６７へ飛ぶ。これは、バンド内でブロックの下の部分が空いているのであれば、つまり、下マージンがあるなら、その部分にはビデオ信号を送らないことを示している。
【０１９７】
ステップＳ２６１でＹＥＳならば、ステップＳ２６２でラインの上で変数ｌａの大きさ分、ビデオ信号を送らず、ステップＳ２６３で変数ｌｂの大きさ分、イメージ伸長・ビデオ転送回路７３の中にあるラインバッファ上のデータをビデオ信号に変換して、ビデオ信号をエンジン部４へ出力する。そして、ステップＳ２６４で変数ｈｂｐに、変数ｈｐの値から変数ｈａの値を減算し、さらに１を加算した値をセットする。
【０１９８】
次に、ステップＳ２６５で変数ｈｂｐが変数ｈｂより小さいかチェックし、ＮＯなら、つまりブロック内の全てのラインのビデオ信号出力が終わったなら何もせずステップＳ２６７へ飛ぶ。
【０１９９】
ステップＳ２６５でＹＥＳなら、つまりブロック内でまだビデオ信号出力していないラインが残っているのなら、ステップＳ２６６でブロックデータ中の変数ｈｂｐ番目のラインの圧縮イメージデータの伸長処理を実行し、伸長したデータをイメージ伸長・ビデオ転送回路７３の中にあるラインバッファにセットして、ステップＳ２６７へ飛ぶ。
【０２００】
これも圧縮データの伸長作業を前もってしておくことで、ビデオ信号出力時に伸長作業を行なったのでは、ビデオ出力のタイミングに間に合わなくなることを防ぐことである。
【０２０１】
ステップＳ２６７では、変数ｈｐに１を加算してから、ステップＳ２６８で変数ｈｐが変数ｈより小さいかチェックし、ＹＥＳならステップＳ２５９の直前に戻って、バンド内の次のラインのビデオ信号出力処理を続ける。
【０２０２】
ステップＳ２６８でＮＯなら、図３２のステップＳ２５７へ飛んで、ビデオ信号の出力が完了したことを解析プログラム５２へ知らせてから、ステップＳ２４１の直前に戻って解析プログラム５２からの次のビデオ信号出力指示を待つ。
【０２０３】
なお、ステップＳ２５７で、イメージ伸長・ビデオ転送回路７３が、解析プログラム５２に対してビデオ信号の出力完了を知らせてから、解析プログラム５２が、次のバンドのビデオ信号出力指示をイメージ伸長・ビデオ転送回路７３に指示するまでの間は、非常に短時間でなければならない。この間に時間的な空きが入ると、その間、ビデオ信号が出力されないので、印刷された用紙を見ると、そのラインの部分だけ白い筋が入ったような現象となる。つまり、バンドとバンドの間に隙間ができる。解析プログラム５２の排紙時のバンドとバンドの間の処理は、極めて迅速に行なわなければならない。
＜第２の実施の形態特有の効果＞
以上の構成により、つぎのような効果が得られる。
（１）本実施の形態では、フレームバッファの代わりにバンドメモリを設けてバンド処理による印刷出力を行なうので、メモリが少なくて済み、装置の製造コストを低減できる。
（２）本実施の形態では、受信バッファへ１ページ分のデータを受信してから印刷を開始する。ホストベースプリンタのようにプリンタへのデータ転送を最優先しないために、ホスト上で他のアプリケーションがロックする、というような現象は起こらない。
（３）本実施の形態では、ホスト上のドライバは、バンドの大きさそのもののイメージデータをプリンタに送るのではなくて、バンドの領域の中の、実際にイメージのあるブロック（矩形部分）をプリンタへ送るので、転送データ量は小さくなる。
（４）本実施の形態では、空白のバンドがある場合は、コントローラ部では、バンドメモリ上に空白部を展開してそのビデオ信号をエンジン部に送るのではなく、イメージ伸長・ビデオ転送回路に対してビデオ信号を送らないよう指示するだけなので、ＣＰＵの負荷が小さくなる。
（５）本実施の形態では、文字がなくイメージだけが含まれるバンドがある場合は、コントローラ部では、バンドメモリ上にイメージを展開してそのビデオ信号をエンジン部に出力するのではなく、圧縮されたイメージデータの伸長とビデオ信号への変換、エンジン部への出力を指示するだけなので、ＣＰＵの負荷が小さくなる。
［第３の実施の形態］
次に、図を用いて、第３の実施の形態を説明する。
＜システムの構成＞
第２の実施の形態では、１ページは１６バンドに均等に分割することを前提としていたが、第３の実施の形態では、バンドの数、高さを可変とし、ドライバ上ではイメージデータについて、バンド単位に繰り返しのイメージパターンがある場合は、バンドの繰り返しのコマンドをプリンタに送ることで、イメージデータの転送量を小さくしていることが大きな違いである。
【０２０４】
しかし、各種構成要素、プログラムの動作等については、ほとんどは第２の実施の形態と同一であるので、以下では、主に違いのある部分を説明する。
【０２０５】
ブロック構成については、第２の実施の形態の図１８と同一なので省略する。第３の実施の形態では、バンド高さは任意としたが、図１８のＲＡＭ９上にある、バンドＡ７１、バンドＢ７２のバンド高さ以下、という制限はある。
【０２０６】
図３４は、原理の説明図である。
【０２０７】
ホスト１のドライバ上で、印刷しようとしている文書を、文字データとイメージデータに分けて、プリンタ２に転送することは、第１の実施の形態、第２の実施例と同様である。
【０２０８】
本実施の形態では、ドライバがホスト１上に設けたフレームバッファ上に展開した１ページイメージの中で、プリンタ１にイメージデータを送る前に、バンド単位のパターン認識を行ない、繰り返しのバンドがあるかチェックする。ここでは、バンド高さは任意に変えられるとしている。パターン認識の技術については、各種の方法が公知になっているので、ここでの詳細な説明は省略する。
【０２０９】
図３４の左の図では、波形の図形を含むイメージＡのバンド、空白バンド、輪の連続の図形を含むイメージＢのバンドセットが、３度繰り返されている。そこで、２度目以降に出現するイメージＡのバンド、イメージＢのバンドについては、最初に出現したイメージＡのバンドデータ、あるいは、イメージＢのバンドデータと同一であることを、プリントコマンドとして、プリンタ２に転送するようにした。文字データ部分の処理については、第２の実施の形態と同一である。
【０２１０】
図３４のような例は、実際の文書では、あまりないと思えるが、図３５のようなイメージのバンドの繰り返しの例は、実際の文書でも頻繁に有り得ると思われる。
【０２１１】
この例では、表であって、文字の部分を取り去った罫線のイメージの部分だけで考えると、左の図のように、バンドの１番からバンドの６番まで分割できて、バンドの１番、２番、６番については、そのまま、イメージデータとしてプリントコマンドをプリンタ２へ転送するが、バンドの３番、４番、５番はバンド２番の繰り返しイメージだとして、「バンド２番の繰り返し」のプリントコマンドをプリンタ２へ転送する。
【０２１２】
図３６は、ホスト１からプリンタ２へ送られる文字データ、イメージデータのコマンド構造の説明図である。第２の実施の形態の図２０との違いは、バンド開始コマンド８１のあとに、バンド高さコマンド８２、繰り返しバンド番号８３、があることだけである。その他の要素は同一である。
【０２１３】
バンド開始コマンド８１は、１ページあたり任意の個数繰り返される。バンド高さ８２もバンド毎に任意だが、バンドＡ７１、バンドＢ７２のバンド高さ以下である。また繰り返しバンド番号８３は、そのページで出現したバンドの順番で、ページの先頭のバンド番号を１としてあらわす。そのバンドが、繰り返しのイメージを含んでいない場合、つまり新規のイメージを含んだバンドの場合は、−１がセットされる。
【０２１４】
コントローラ部３のＲＯＭ８に内蔵されいるプログラムの名称については、第２の実施の形態の図２１で示された内容と同一である。動作についても、解析プログラム５２以外は、第２の実施の形態と同一である。受信部６の動作は、第１の実施の形態と同一、イメージ伸長・ビデオ転送回路７３の動作も、第２の実施の形態と同一のなので、説明は省略する。解析プログラム５２の動作についても、第２の実施の形態とほとんど同じだが、後述の図４０〜図４３のフローチャートで、動作の詳細を説明する。
【０２１５】
ホスト１上のドライバの動作についても、第２の実施の形態とほとんど同じだが、後述の図３７，図３８，図３９のフローチャートで、動作の詳細を説明する。
＜システムの制御＞
次に、本発明の第３の実施の形態の動作を、フローチャートを用いて説明する。第２の実施の形態と違いのある、ドライバの動作と、解析プログラム５２の動作を説明する。
【０２１６】
図３７，図３８，図３９は、ホスト１上のプリンタドライバの動作を説明するフローチャートである。プリンタドライバは、ユーザが用いるアプリケーションソフトで作製した文書データから、図３６で説明した文字やイメージのプリンタコマンドを作成してプリンタ２へ転送する。ユーザがアプリケーションソフトから文書の印刷を指示すると、ホスト１内でプリンタドライバが起動される。
【０２１７】
図示されてはいないが、ドライバは、起動時にはホスト１のメモリ上に１ページ分の大きさのフレームバッファを確保し、同時にフレームバッファをクリアする。また、ドライバの文書印刷処理の終了時には、フレームバッファとして使われていたメモリ領域は、開放される。
【０２１８】
まず、ステップＳ２７１で、ジョブ開始コマンド３１をプリンタ２へ転送し、次にステップＳ２７２で、変数ｍに、印刷しようとしている文書のページ数に１を加算した値をセットし、ステップＳ２７３で、変数ｍｐに１をセットする。そして、ステップＳ２７４で、変数ｍｐが変数ｍより小さいかチェックし、ＮＯなら文書の全てのページ数の処理が終わったことになるので、ステップＳ３１１でジョブ終了コマンドを転そして、ドライバの処理を終了する。
【０２１９】
ステップＳ２７４でＹＥＳなら、ステップＳ２７５で、ページ開始コマンド３２をプリンタ２へ転送し、ステップＳ２７６で、ｍｐページ目のアプリケーションからの文書印字指示を蓄積し、ステップＳ２７７で、蓄積した文字印字指示について印字位置によるソーティングを実行し、ステップＳ２７８で、ｍｐページ目のアプリケーションからの文字印字指示以外の描画指示をホスト１上のフレームバッファに展開する。ここで文字印字指示以外の描画指示とは、罫線や図形描画、イメージの貼り付け等である。
【０２２０】
また、ステップＳ２７７における印字位置による印字指示のソーティングとは、まず、用紙の長手方向に対する位置でソーティングし、次に、用紙の短手方向に対する位置でソーティングを行なうことである。Ａ４サイズの用紙を縦置きしたときに、印字位置によって上から下へ、さらに左から右へと並べ替えた。
【０２２１】
次にステップＳ２７９で、バンド単位でイメージパターンの繰り返しがないか、フレームバッファをパターン認識による分析を行ない、ステップＳ２８０でパターンの繰り返しがあったかチェックし、ＮＯならステップＳ２８１で、１ページを均等に１６分割したとしてバンド管理表にバンド番号、各バンドの高さ、パターンを繰り返す場合のバンド番号の欄に−１をセットする。そして、図３８のステップＳ２８５に飛ぶ。
【０２２２】
ステップＳ２８０でＹＥＳなら、ステップＳ２８２でバンドの高さが最大高さ、つまり、バンドＡ７１かバンドＢ７２の高さを超えるバンドを最大高さ以内になるよう分割して、ステップＳ２８４に移る。ステップＳ２８２でＮＯの場合もステップＳ２８４に移るが、ステップＳ２８４では、バンド高さを均等ではなくバンド毎に任意としてバンド管理量にバンド番号、各バンドの高さ、パターンを繰り返す場合のバンド番号の欄をセットして、ステップＳ２８５へ移る。
【０２２３】
ところで、バンド管理表はドライバがバンドに関するプリントコマンドを作成する際に便利なようにホスト１上に設けたもので、項目として、バンド番号、バンド高さ、イメージパターンを繰り返す場合のバンド番号欄の３つが設けられている。
【０２２４】
次に、図３８に移るが、ステップＳ２８５では変数ｎにバンド総数に１を加算した値をセットする。そしてステップＳ２８６で変数ｎｐに１をセットし、ステップＳ２８７で変数ｎｐが変数ｎより小さいかチェックし、ＮＯなら１ページの全てのバンド処理が終了したことを意味するので、ステップＳ２８８で変数ｍｐに１を加算してステップＳ２７４の直前に戻り、次のページのバンド出力処理に移る。
【０２２５】
ステップＳ２８７でＹＥＳなら、ステップＳ２８９でバンド開始コマンド８１をプリンタ２へ転送し、ステップＳ２９０でバンド高さコマンド８２を転送し、ステップＳ２９１で繰り返しバンド番号コマンド８３を転送する。このバンドがイメージの繰り返しでなければ−１をセット、転送する。
【０２２６】
そして、ステップＳ２９２で蓄積したアプリからの印字指示からｎｐバンド目に含まれる文字印字指示をピックアップし、ステップＳ２９３で変数ｓにピックアップした文字数に１を加算した値をセットして、ステップＳ２９４で変数ｓｐ１をセットする。
【０２２７】
なお、ステップＳ２９２でピックアップする文字印字指示は、ｎｐバンド目に文字の一部でもかかっているものはすべてピックアップする。よって、文字の印字位置によっては、ふたつのバンドにまたがる場合がある。
【０２２８】
次にステップＳ２９５で、変数ｓｐが変数ｓより小さいかチェックし、ＮＯならｎｐバンド目に含まれる文字データの転送処理は全て済んだことになるので、ステップＳ２９６以降でｎｐバンド目のイメージデータの転送処理に移る。つまり、ステップＳ２９６でこのバンドが繰り返しのバンドかチェックし、ＹＥＳならこれ以上何もせず、ステップＳ３０２に移る。
【０２２９】
ステップＳ２９６でＮＯならば、ステップＳ２９７ではホスト上のフレームバッファからｎｐバンド目の位置と大きさのイメージを切り出し、ステップＳ２９８で空白のバンドかチェックし、ＹＥＳなら何もせずステップＳ３０２に移る。
【０２３０】
ステップＳ２９８でＮＯなら、ステップＳ２９９でイメージが実際に含まれる矩形領域を単一のブロックとして切り出し、まずステップＳ３００でブロックの貼り付け位置を示す位置移動コマンド３３をプリンタ２へ転送し、ステップＳ３０１で種別５のコマンド列、つまりイメージブロックコマンド４５，４６，４７，４８をプリンタ２へ転送する。当然ながら、イメージブロックデータはデータ圧縮されて転送される。
【０２３１】
そして、ステップＳ３０２で変数ｎｐに１を加算し、ステップＳ２８７の直前に戻り、次のバンドの転送処理に移る。
【０２３２】
ステップＳ２９５でＹＥＳの場合は、ステップＳ３０３でｓｐ番目の文字は、この文書で初めて現れる文字の印字の指示かチェックし、初めてならばステップＳ３０４で印字位置を示す印字移動コマンド３３をプリンタ２へ転送し、ステップＳ３０５でプリンタ２側が登録可能な文字数の限界に達したかチェックし、限界に達したならステップＳ３０７で種別３のコマンド列、つまり文字イメージ印字のみのコマンド４３，４４をプリンタ２へ転送して、ステップＳ３１０へ移る。
【０２３３】
ステップＳ３０５で限界に達していないとわかれば、ステップＳ３０６で種別２のコマンド列、つまり、文字登録＋印字コマンド４１，４２，４３，４４をプリンタ２へ転送してからステップＳ３１０へ移る。当然ながら、プリンタ２へ転送される一文字のドットイメージは、データ圧縮されて転送される。
【０２３４】
ステップＳ３０３でＮＯならば、この文字の印字の指示が、文書の中で二度目以降の指示であることを示しているので、ステップＳ３０８で印字位置を示す位置移動命令３３をプリンタ２へ転送し、次にステップＳ３０９で種別４のコマンド列、つまり文字コード印字コマンド４１，４２をプリンタ２へ転送する。
【０２３５】
そして、ステップＳ３１０で変数ｓｐに１を加算して、ステップＳ２９５の直線に戻り、次の文字データのプリンタ２への転送処理を行なう。
【０２３６】
図４０〜図４３は、解析プログラム５２の動作を説明するためのフローチャートである。解析プログラム５２も、プリンタ２の電源オンとともに立ち上がり、以後、受信部６によって書込まれた受信バッファ１０の中のプリントコマンドの解析及び排紙処理を行なう。
【０２３７】
まずステップＳ３２１で、ユーザがプリンタ２を電源オフしたかチェックし、ＹＥＳならこのプログラムの処理を終了する。ＮＯならステップＳ３２２で受信バッファ１０内に受信済みのページのデータがあるかチェックし、ないならばステップＳ３２１の直前に戻りループを形成してホスト１からのデータの受信を待つ。
【０２３８】
なお、ステップＳ３２２では、ページ管理表１３を調べることによって、受信済みのページが存在するかどうかをチェックする。ページ管理表１３は、第１の実施の形態の図９，図１０のフローチャートで説明したような動作で、受信管理プログラム５１が管理を行なっている。
【０２３９】
ステップＳ３２２でＹＥＳならば、以後そのページのプリントコマンドを次々と解析して処理するが、まず、ステップＳ３２３で変数ｎに「総バンド数＋１」をセットし、ステップＳ３２４で変数ｎｐに１をセットし、ステップＳ３２５で変数ｂｎにバンド高さをセットする。そして、ステップＳ３２６で変数ｎｐが変数ｎより小さいかチェックし、ＮＯならバンドの処理が全て完了したことを示すのでステップＳ３６８へ飛び、排紙の完了を待つ。
【０２４０】
ステップＳ３２６でＹＥＳなら、ステップＳ３２７でバンドｎｐ番目のデータは文字データもイメージデータもなく、空白バンドなのかチェックし、ＹＥＳならステップＳ３２８で変数ｔに０をセットする。そして、ステップＳ３４４へ飛ぶ。
【０２４１】
ステップＳ３２７でＮＯならステップＳ３２９でバンドｎｐ番目のデータに文字が含まれているかチェックし、ＹＥＳならステップＳ３３０で変数ｎｐが奇数なら変数ｔに１をセットし、変数ｎｐが偶数なら変数ｔに２をセットし、ステップＳ３３４へ飛ぶ。
【０２４２】
ステップＳ３２９でＮＯなら、ステップＳ３３１でバンドｎｐ番目のデータに、複数のイメージブロックデータが含まれているかチェックし、ＹＥＳならステップＳ３２２で変数ｎｐが奇数なら変数ｔに１をセットし、変数ｎｐが偶数なら変数ｔに２をセットし、ステップＳ３３４へ飛ぶ。なお、図３７，図３８，図３９で説明したドライバの動作では、ひとつのバンドに複数のイメージブロックが存在することは有り得ない。
【０２４３】
ステップＳ３３１でＮＯなら、バンドｎｐ番目のデータとしては、単一のイメージブロックしか存在しないことを示しているが、ステップＳ３３３で変数ｔに３をセットして、ステップＳ３３４へ飛ぶ。
【０２４４】
ステップＳ３３４では、変数ｔが１あるいは２かチェックし、ＹＥＳならステップＳ３３４以降でバンドｎｐ番目に含まれる文字データやイメージブロックデータを先頭から解析していき、バンドＡ７１、バンドＢ７２への展開処理を行なう。まず、ステップＳ３３５では、変数ｔが１ならバンドＡ７１をクリアし、変数ｔが２ならバンドＢ７２をクリアする。
【０２４５】
そして、ステップＳ３３６でこのバンドの繰り返しバンド番号コマンド８３が−１以外かチェックし、ＮＯなら何もせずステップＳ３３８へ移るが、ＹＥＳならステップＳ３３７で処理を行なってからステップＳ３３８へ飛ぶ。ステップＳ３３７では、イメージ伸長回路１６を使用して、繰り返しバンド番号で指示されたバンド内の単一イメージブロックをバンドメモリへ貼り付ける。この時、変数ｔが１ならバンドＡ７１へ貼り付け、変数ｔが２ならバンドＢ７２へ貼り付ける。
【０２４６】
次に、ステップＳ３３８では、解析しようとしているコマンドが位置移動コマンド３３かチェックする。ＹＥＳならステップＳ３３９でカーソルの移動を行なう。ここで言うカーソルとは、バンドメモリ上で文字、あるいは、イメージを展開する位置を示すための概念上のポインタである。具体的には、ワーク領域１２上にＸ座標、Ｙ座標を示す変数として確保されている。カーソル位置はバンドの左上端を原点としている。ドライバから送られてくる位置移動コマンド３３も、各バンドの左上端を原点と考える相対位置を前提として転送されてくる。ページの左上端を原点としているわけではない。ステップＳ３３９の後は、ステップＳ３５１へ飛ぶ。
【０２４７】
ステップＳ３３８でＮＯならば、ステップＳ３４０でそのコマンドが種別コマンド３４で種別が１かチェックし、ＹＥＳならばステップＳ３４１で文字登録プログラム５３による文字の登録処理を行なってからステップＳ３５１へ飛ぶ。文字の登録処理は、第１の実施の形態の図１５のフローチャートで説明した動作と同じであるので、詳細な説明は省略する。
【０２４８】
ステップＳ３４０でＮＯならばステップＳ３４２でそのコマンドが種別コマンド３４で、種別が２かチェックし、ＹＥＳならばステップＳ３４３で文字の登録処理を行ない、ステップＳ３４４で印字処理を行なってからステップＳ３５１へ飛ぶ。ステップＳ３４３の文字の登録処理と、前述のステップＳ３４１の文字の登録処理は同一である。また、ステップＳ３４４の印字処理は、印字プログラム５４によって行なわれる。
【０２４９】
ステップＳ３４２でＮＯならば、ステップＳ３４５でそのコマンドが種別コマンド３４で種別が３かチェックし、ＹＥＳならばステップＳ３４６で文字イメージの印字処理のみを行ない、そのあとステップＳ３５１へ飛ぶ。
【０２５０】
ステップＳ３４５でＮＯならば、ステップＳ３４７でそのコマンドが種別コマンド３４で種別が４かチェックし、ＹＥＳならばステップＳ３４８で印字処理を行ない、そのあとステップＳ３５１へ飛ぶ。ステップＳ３４８の印字処理は、前述のステップＳ３４４の印字処理と同一である。
【０２５１】
ステップＳ３４７でＮＯならば、ステップＳ３４９でそのコマンドが種別コマンド３４で種別が５かチェックし、ＹＥＳならばステップＳ３５０でイメージ伸長回路１６を使用して、圧縮イメージデータの伸長作業をし、伸長したイメージブロックのバンドメモリ７１，７２への貼り付け作業を行なう。その際、変数ｔが１なら、バンドＡ７１への貼り付けを行ない、変数ｔが２ならバンドＢ７２への貼り付けを行なう。そして、ステップＳ３５１へ飛ぶ。
【０２５２】
ステップＳ３３９、ステップＳ３４１、ステップＳ３４４、ステップＳ３４６、ステップＳ３４８、ステップＳ３５０のあとか、あるいはステップＳ３４９でＮＯならば、ステップＳ３５１へ移る。ステップＳ３５１では、バンドｎｐ番目の受信データで、解析していないコマンドがまだ残っているかチェックし、残っているならばステップＳ３３８の直前に戻ってその未解析コマンドの解析処理を行なう。
【０２５３】
ステップＳ３３４でＮＯの場合、あるいはステップＳ３５１でＮＯの場合は、図４２のステップＳ３５２へ飛ぶ。
【０２５４】
ステップＳ３５２以降、ステップＳ３６７まではバンド単位のエンジン部４へのビデオ信号出力処理を示している。
【０２５５】
まず、ステップＳ３５２では、変数ｎｐが１かチェックする。つまり、あるページの最初のバンドかチェックするわけである。最初のバンドであれば、ステップＳ３５３でエンジン部４に給紙開始を指示して、ステップＳ３５４で用紙があるかチェックし、用紙無しならばステップＳ３５５でユーザが用紙を追加セットするまで待ち、それからステップＳ３５８へ飛ぶ。ステップＳ３５４でＮＯならば、つまり、用紙があるなら、そのままステップＳ３５８へ飛ぶ。
【０２５６】
ステップＳ３５２で最初のバンドではないと判断されたならば、ステップＳ３５６で前のバンドのビデオ転送処理が終了するまで待つ。但し、待っている間に、紙ジャム、つまり紙詰まりが発生しているかをステップＳ３５７で常に監視している。仮に紙ジャムが発生しているのならば、ステップＳ３５７からステップＳ３７３へ飛び、紙ジャムからの復帰処理を行なう。
【０２５７】
ステップＳ３５６でＹＥＳなら、つまり前のバンドのビデオ転送が終了したなら、ステップＳ３５８で変数ｔが０かチェックし、ＹＥＳならステップＳ３５９で変数ｎｂの値をバンド高さとして、イメージ伸長・ビデオ転送回路７３に空白バンドの出力処理を指示して、ステップＳ３６７へ飛ぶ。
【０２５８】
ステップＳ３５８でＮＯなら、ステップＳ３６０で変数ｔが１かチェックし、ＹＥＳならステップＳ３６１で変数ｈｂの値をバンド高さとして、イメージ伸長・ビデオ転送回路７３にバンドＡ７１のビデオ信号出力指示を行ない、ステップＳ３６７へ飛ぶ。
【０２５９】
ステップＳ３６０でＮＯならば、ステップＳ３６２で変数ｔが２かチェックし、ＹＥＳならステップＳ３６３で変数ｈｂの値をバンド高さとしてイメージ伸長・ビデオ転送回路７３にバンドＢ７２のビデオ信号出力指示を行ない、ステップＳ３６７へ飛ぶ。
【０２６０】
ステップＳ３６２でＮＯならば、ステップＳ３６４で繰り返しバンド番号が−１以外かチェックし、ＹＥＳならステップＳ３６５で変数ｈｂの値をバンド高さとして、イメージ伸長・ビデオ転送回路７３に繰り返しバンド番号で指示されたバンドの中の単一イメージブロックの圧縮イメージのデータ伸長をしながらのビデオ出力を指示する。そして、ステップＳ３６７へ移る。
【０２６１】
ステップＳ３４６でＮＯならば、ステップＳ３６６で変数ｈｂの値をバンド高さとして、ｎｐ番目のバンドデータに含まれる単一イメージブロックを伸長をしながらビデオ信号を出力することをイメージ伸長・ビデオ転送回路７３に指示してステップＳ３６７へ飛ぶ。
【０２６２】
ステップＳ３６７では変数ｎｐに１を加算してから、ステップＳ３２６の直前に戻り、次のバンドデータのバンドメモリへの展開、及び、ビデオ信号出力処理へ移る。
【０２６３】
ステップＳ３２６でＮＯの場合は、バンド出力処理がすべて終了して、後はステップＳ３６８以降で印刷された用紙の排紙の完了を待つだけとなるが、まずステップＳ３６８では排紙が完了したかチェックし、ＮＯならばステップＳ３７２で紙ジャム、つまり、紙詰まりが発生したかチェックし、ＮＯならばステップＳ３６８の直前に戻りループを形成して、排紙の完了まで待つ。
【０２６４】
ステップＳ３６８で排紙が完了したと判断したならば、ステップＳ３６９でページ管理表１３上の排紙済みページの記録をクリアし、ステップＳ３７０でジョブ終了、つまりひとつの文書の全ページを排紙し終わったかチェックし、ＹＥＳならステップＳ３７１で登録文字管理表１４をクリアし、ステップＳ３２１の直前に戻って次の文書のジョブのデータ受信を待つ。
【０２６５】
ステップＳ３７０でＮＯならば、この時もステップＳ３２１の直前に戻って、その文書の後続のページのデータ受信を待つ。
【０２６６】
ステップＳ３７２でＹＥＳならば、ステップＳ３７３で紙ジャム発生をパネル表示し、ステップＳ３７４でユーザが詰まった紙を取り除くまで待ち、取除いたことがわかればステップＳ３２１の直前まで戻り、もう一度、前回処理を行った受信済みページデータのバンドへの展開、ビデオ出力、排紙処理を試みる。
【０２６７】
なお、ステップＳ３６９では、ページ管理表１３上のページの登録をクリアしているが、受信管理プログラム５１は、この領域がクリアされていることをチェックして、受信部６に対して新しい受信データ書込みの限界値の指示を行なう。＜第３の実施の形態特有の効果＞
（１）本実施の形態では、ドライバがフレームバッファ上のイメージパターンを分析して、バンド単位に同じパターンが繰り返されるときは、繰り返しのバンド部分のデータとして繰り返しのコマンドを送るだけなので、イメージデータの転送量が小さくて済む。また、転送時間が少なくて済む。また、プリンタ側の受信バッファのメモリ消費量も節約できる。
（２）図３５で説明したように、特に、繰り返しパターンの使われることの多い表文書等の印刷時に有効である。
［第４の実施の形態］
次に、図を用いて、第４の実施の形態を説明する。
＜システムの構成＞
第４の実施の形態では、プリンタの受信バッファに納まりきらない巨大なイメージを印刷する場合に、第１〜第３の実施の形態として説明した印刷制御方法のいずれかの代わりに、受信バッファを幾つかの部分に分割し、ひとつの部分から出力している間に他の部分に受信して格納することを繰返して巨大なイメージを印刷する。
【０２６８】
具体的には、本実施形態のシステムは第３の実施の形態を基にしている。文書は全てイメージデータで扱い、プリンタのＲＡＭのほとんどを受信バッファとして使用し、受信バッファ上の巨大イメージページのデータをイメージ伸長・ビデオ転送回路で直接イメージ伸長作業とエンジン部へのビデオ転送作業を行なうことで、巨大イメージページの文書も印刷可能としている。第４の実施の形態の各種構成要素、プログラムの動作等については、ほとんどは第３の実施の形態と同一であるので、以下では主に違いのある部分を説明する。
【０２６９】
なお、以下の説明では、第３の実施の形態での印刷方式を「合成方式」と呼ぶ。これは、ホスト上では文字とイメージを分離して扱い、プリンタ上で文字とイメージの論理和をとって合成して出力するからである。また、巨大イメージを出力する方式を「簡易同期式」と呼ぶ。これは、あまりに１ページのイメージデータが巨大な場合は、ホストからの細かなバンド単位のデータ転送と、プリンタでの用紙の搬送を、成り行きの形で同期させて繰り返すことで印刷を実行するからである。
【０２７０】
図５９，６０は、簡易同期式の原理を説明するための図である。本実施形態のプリンタは受信バッファとして２ＭＢのメモリを備えているものとしている。図５９（ａ）は、圧縮してもその受信バッファ容量を越える巨大イメージを示している。このような巨大イメージは、ホストのプリンタドライバで図５９（ｂ）のように、最初の１ＭＢで区切り、残りを１００ＫＢずつ区切って各ブロックごとにプリンタに送り付ける。
【０２７１】
図６０は、図５９（ｂ）のようにして送られたイメージを、プリンタにおいて受信し、再構成して印刷する様子を示す図である。ホストから受信したイメージは、ＲＡＭ９内にブロックごとに圧縮されて格納される。プリンタでは、それらブロックを、一つのブロックごとに伸長して印刷出力する。２番目以降のブロックは最初のブロックに比べて小さいため、伸張処理を迅速に行えるので、伸張処理時間によってオーバーランを生じることはない。第４の実施の形態は、上記「合成方式」と「簡易同期式」を合体させたものである。
【０２７２】
図４４は、コントローラ部３が、「簡易同期式」で動作する場合の、ブロック構成図である。「合成方式」で動作する場合のブロック構成図は、第２の実施の形態の図１８に相当する。図１８と図４４の違いは、ＲＡＭ９上の内部構成である。
【０２７３】
こういったＲＡＭの構成の相違は、主として受信部６及びイメージ伸張・ビデオ転送回路７３による印刷データの処理手順により規定されるものであり、固定的な枠組が設けられるといったものではない。従って、図１８及び図４４のＲＡＭの構成を、データ処理の手順によって使い分けることは簡単なことである。
【０２７４】
さて、両方式の相違を受信バッファに注目して見てみる。「合成方式」では、受信バッファ１０、バンドＡ７１、バンドＢ７２、ページ管理表１３、登録文字管理表１４、登録文字データ領域１５等で構成される。ＲＡＭ９の容量が２ＭＢとすると、受信バッファ１０として、確保できるのは１ＭＢ程度である。「簡易同期式」では、ＲＡＭ９上には受信バッファ１０、ページ管理表１３があるだけである。ＲＡＭ９上の容量が２ＭＢとすると、受信バッファ１０として、１．７ＭＢ程度確保できる。
【０２７５】
圧縮方式にもよるが、Ａ４の用紙サイズで、１ページ全面に６００ｄｐｉの写真イメージが貼り付けられているとすると、約１．８ＭＢのデータ容量となる。受信バッファ１０が１．７ＭＢあれば、かなり大きなイメージが含まれた文書の場合も、受信バッファ１０内に１ページ分のデータが収まるので、ほとんどの場合、印刷が可能となる。また、１．７ＭＢを多少オーバーするページの場合でも、「簡易同期式」では、成り行きの形で同期して出力するので、ほとんど印刷不可能な事態は起こらない。
【０２７６】
しかし、受信バッファ１０の大きさとして１ＭＢしかない「合成方式」では、文書にもよるが、受信バッファ１０内に１ページ分のデータが収まらずに、印刷不可能な事態がかなり発生すると思われる。
【０２７７】
なお、図１８で記載されているイメージ伸長回路１６、文字伸長回路１７は、図４４では省かれているが、「簡易同期式」では使用しないことを意味している。つまり、あってもなくても良い。まとめれば、ハード的な構成要素としては、第４の実施の形態は第２の実施の形態の図１８の構成要素と同一で良い。
【０２７８】
また、それ以外の図１８と図４４の違いといえば、ホスト１からプリンタ２へ転送されるデータが、図１８の「合成方式」では、文字データとイメージデータなのに対して、図４４の「簡易同期式」ではイメージデータだけである。
【０２７９】
図４５は、ホスト１からプリンタ２へ送られる文字データ、イメージデータのコマンド構造の説明図である。このデータは、ある文書の印刷ジョブデータとして、最初のページは「合成方式」のページとして送られ、２ページ目も「合成方式」のページとして送られたが、イメージが大量にあって、この１ページデータだけでも１ＭＢの大きさの受信バッファ１０があふれそうに思われたので、ページクリアされ、その後改めて「簡易同期式」のページとして出力され、ジョブが終了した場面を示している。
【０２８０】
コマンドの大部分は、第３の実施の形態の図３６と同一であるが、ページ毎にページ種別Ａコマンド９１か、ページ種別Ｂコマンド９２が付け加えられた点と、ページデータの最後にページクリアコマンド９３が添付される場合がある点が異なる。ページクリアコマンド９３が添付されたページは、印刷されず無視される。また、ページ種別Ａコマンド９１が添付されたページは、「合成方式」のページであることを示し、ページ種別Ｂコマンド９２が添付されたページは、「簡易同期式」のページであることを示している。つまり、ページ毎に図１８で示したＲＡＭ９環境と、図４４で示したＲＡＭ９環境に切り替えることを指示している。
【０２８１】
また、「簡易同期式」のページの場合は、ひとつのバンドに、単一イメージブロックがひとつつくだけである。この時、種別コマンド３４は５、つまりイメージブロックコマンドしか有り得ない。
【０２８２】
さらに、「簡易同期式」のページの場合は、１ページの圧縮後のデータ量が１ＭＢに収まってしまう場合は、バンドもひとつ、イメージブロックもひとつだけで済む。１ＭＢを超える部分については、圧縮データが１００ＫＢを超える毎にバンドをひとつ、イメージブロックをひとつ設け、それを繰り返す。
【０２８３】
これらは、全てホスト１上のドライバで行なうプリントコマンド作成処理であるが、１．７ＭＢの大きさの受信バッファ１０を超えるかもしれない、巨大イメージページを、成り行きの同期式で印刷出力可能にするための処理である。
【０２８４】
コントローラ部３のＲＯＭ８に内蔵されているプログラムの名称については、第２の実施の形態の図２１で示された内容と同一である。動作についても、受信管理プログラム５１、解析プログラム５２以外は、第２の実施の形態と同一である。イメージ伸長・ビデオ転送回路７３の動作は、第２の実施の形態と同一なので、説明は省略する。ホスト１上のドライバの動作、受信部６の動作、受信管理プログラム５１の動作、解析プログラム５２の動作は、後述のフローチャートで動作の詳細を説明する。
【０２８５】
図４６は、ページ管理表１３の構造を説明するための図である。
【０２８６】
項目としては、受信した順番を示すページ番号、受信したページデータの開始アドレス、受信したページデータの終了アドレス、大きすぎるページかどうかの印の４項目である。
【０２８７】
解析プログラム５２による処理は番号１から行われる。解析処理、排紙処理が完了すると排紙済みページはクリアされ、番号２のページが番号１へ繰り上がる。そして、そのページの解析処理が開始される。
【０２８８】
図４６（ａ）は、「合成方式」の時の状態、あるいは、「簡易同期式」の時でも１ページごとのデータ量が受信バッファ１０の大きさを越えないときの状態を示している。また、図４６（ｂ）は、１ページのデータ量が受信バッファ１０の大きさを越えた時の状態を示している。受信バッファには、現在受信中の巨大ページだけが存在し、受信管理プログラム５１は解析プログラム５２に対して成り行きによる同期式の印刷出力を指示して、現在その印刷処理が進行中の状態である。
【０２８９】
なお、受信管理プログラム５１による成り行きによる同期式の印刷出力の指示は、巨大なページデータの前の全てのページが排紙出力された後で行われる。それにより、図４６（ｂ）のような巨大ページデータしかない状態になる。
【０２９０】
また、ＲＡＭ９の環境が「合成方式」と「簡易同期式」との間で切り替わる時は、一旦全てのページが排紙出力された後で切り変わりが実行される。切り替えは、受信バッファ１０の大きさの変更も含まれているので、ページデータを残したまま、受信バッファ１０の大きさを小さくすると、消失するページデータも有り得るからである。
＜システムの制御＞
次に、本第４の実施の形態の動作を、フローチャートを用いて説明する。
【０２９１】
第３の実施の形態と違いのあるドライバ、受信部６、受信管理プログラム５１、解析プログラム５２の各動作を説明する。
【０２９２】
（プリンタドライバ）
図４７〜図５１はホスト１上のプリンタドライバの動作を説明するフローチャートである。プリンタドライバは、ユーザが用いるアプリケーションソフトで作成した文書から、図４５で説明した文字やイメージのプリンタコマンドを作成、プリンタ２へ転送する。ユーザがアプリケーションソフトから文書の印刷を指示すると、ホスト１内でプリンタドライバが起動される。
【０２９３】
図示されてはいないが、ドライバは起動時にはホスト１のメモリ上に１ページ分の大きさのフレームバッファを確保し、同時にフレームバッファをクリアする。また、ドライバの文書印刷処理の終了時には、フレームバッファとして使われていたメモリ領域は開放される。
【０２９４】
まず、ステップＳ３８１でジョブ開始コマンド３１をプリンタ２へ転送し、次にステップＳ３８２で、印刷しようとしている文書のページ数に１を加算した値を変数ｍにセットし、ステップＳ３８３で処理中のページ番号を示す変数ｍｐに１をセットする。そして、ステップＳ３８４で変数ｍｐが変数ｍより小さいかチェックし、ＮＯなら文書の全てのページ数の処理が終わったことになるので、ステップＳ３８５でジョブ終了コマンドを転送して、ドライバの処理を終了する。
【０２９５】
ステップＳ３８４でＹＥＳならステップＳ３８６でページ開始コマンド３２をプリンタ２へ転送し、ステップＳ３８７でｍｐページ目のアプリケーションからの文字印字指示を蓄積し、ステップＳ３８８で蓄積した文字印字指示について印字位置によるソーティングを実行し、ステップＳ３８９でｍｐページ目のアプリケーションからの文字印字指示以外の描画指示をホスト１上のフレームバッファに展開する。ここで文字印字指示以外の描画指示とは、罫線や図形描画、イメージの貼り付け等である。この時同時に、イメージの貼り付け面積の合計を計算しておく。
【０２９６】
また、ステップＳ３８８における印字位置によるソーティングとは、先ず、用紙の長手方向によるソーティング、次に、用紙の短手方向によるソーティングを行なうことである。Ａ４サイズの用紙を縦置きした時に印字位置によって上から下へ、さらに左から右へと並べ替えた。
【０２９７】
次に、ステップＳ３９０でイメージの貼り付けの総面積がページの半分を超えたかチェックし、ＹＥＳなら、つまりイメージを主としたページと判断できたなら図５０のステップＳ４２６へ移り、「簡易同期式」の処理を開始する。ステップＳ３９０でＮＯなら、つまり文字を主としたページと判断できたならステップＳ３９１へ移り、ページ種別がＡのコマンド９１をプリンタ２へ転送する。
【０２９８】
そして、ステップＳ３９２でバンド単位でイメージパターンの繰り返しがないか、フレームバッファをパターン認識による分析を行い、ステップＳ３９３でパターンの繰り返しが合ったかチェックし、ＮＯならステップＳ３９４で１ページを均等に１６分割したとしてバンド管理表にバンド番号、各バンドの高さ、パターンを繰り返す場合のバンド番号の欄に−１をセットする。そして、ステップＳ３９８に飛ぶ。
【０２９９】
ステップＳ３９３でＹＥＳなら、図４８のステップＳ３９５でバンドの高さが最大高さ、つまり、バンドＡ７１かバンドＢ７２の高さを超えるバンドがあるかチェックし、あるならステップＳ３９６で最大高さを超えるバンドを最大高さ以内になるよう分割してステップＳ３９７に移る。ステップＳ３９５でＮＯの場合もステップＳ３９７に移るが、ステップＳ３９７ではバンド高さを均等ではなくバンド毎に任意としてバンド管理表にバンド番号、各バンドの高さ、パターンを繰り返す場合のバンド番号の欄をセットしてステップＳ３９８へ移る。
【０３００】
ところで、バンド管理表は、ドライバがバンドに関するプリントコマンドを作成する際に便利なようにホスト１上に設けたもので、項目として、バンド番号、バンド高さ、イメージパターンを繰り返す場合のバンド番号欄の３つが設けられている。
【０３０１】
次に、ステップＳ３９８では、変数ｎにバンド総数に１を加算した値をセットする。そして、ステップＳ３９９でバンド番号を示す変数ｎｐに１をセットし、ステップＳ４００で変数ｎｐが変数ｎより小さいかチェックし、ＮＯなら１ページの全てのバンド処理が終了したことを意味するので、ステップＳ４０１で変数ｍｐに１を加算してステップＳ３８４の直前に戻り、次のページのバンド出力処理に移る。
【０３０２】
ステップＳ４００でＹＥＳなら、ステップＳ４０２でバンド開始コマンド８１をプリンタ２へ転送し、ステップＳ４０３でバンド高さコマンド８２を転送し、ステップＳ４０４で繰り返しバンド番号コマンド８３を転送する。このバンドがイメージの繰り返しでなければ−１をセット、転送する。
【０３０３】
そして、ステップＳ４０５で蓄積したアプリからの印字指示からｎｐバンド目に含まれる文字印字指示をピックアップし、ステップＳ４０６で変数ｓにピックアップした文字数に１を加算した値をセットして、ステップＳ４０７で変数ｓｐヘ１をセットする。
【０３０４】
なお、ステップＳ４０５でピックアップする文字印字指示は、ｎｐバンド目に文字の一部でもかかっているものはすべてピックアップする。よって、文字の印字位置によっては、ふたつのバンドにまたがる場合がある。
【０３０５】
次に、図４９のステップＳ４０８で変数ｓｐが変数ｓより小さいかチェックし、ＮＯならｎｐバンド目に含まれる文字データの転送処理は全て済んだことになるので、図５０のステップＳ４０９以降でｎｐバンド目のイメージデータの転送処理に移る。そして、ステップＳ４０９でこのバンドが繰り返しのバンドかチェックし、ＹＥＳならこれ以上何もせずステップＳ４１７に移る。
【０３０６】
ステップＳ４０９でＮＯならば、ステップＳ４１０ではホスト上のフレームバッファから、ｎｐバンド目の位置と大きさのイメージを切り出し、ステップＳ４１１で空白のバンドかチェックし、ＹＥＳなら何もせずステップＳ４１７に移る。
【０３０７】
ステップＳ４１１でＮＯなら、ステップＳ４１２でイメージが実際に含まれる矩形領域を単一のブロックとして切り出し、ステップＳ４１３でこのブロックを転送したと仮定すると、１ページのデータ量が受信バッファの大きさをオーバーしそうかチェックし、ＮＯならば先ずステップＳ４１５でブロックの貼り付け位置を示す位置移動コマンド３３をプリンタ２へ転送し、ステップＳ４１６で種別５のコマンド列、つまりイメージブロックコマンド４５，４６，４７，４８をプリンタ２へ転送する。当然ながら、イメージブロックデータはデータ圧縮されて転送される。
【０３０８】
そして、ステップＳ４１７で変数ｎｐに１を加算し、図４８のステップＳ４００の直前に戻り、次のバンドの転送処理に移る。
【０３０９】
ステップＳ４１３でＹＥＳなら、ステップＳ４１４でページクリアコマンド９３を転送して、このページの排紙を取り消してからステップＳ４２６へ飛んで、このページの「簡易同期式」での出力に再挑戦する。
【０３１０】
図４９のステップＳ４０８でＹＥＳの場合は、ステップＳ４１８でｓｐ番目の文字はこの文書で初めて現れる文字の印字の指示かチェックし、初めてならばステップＳ４１９で印字位置を示す位置移動コマンド３３をプリンタ２へ転送し、ステップＳ４２０でプリンタ２側が登録可能な文字数の限界に達したかチェックし、限界に達したならステップＳ４２２で種別３のコマンド列、つまり文字イメージ印字のみのコマンド４３，４４をプリンタ２へ転送して、ステップＳ４２５へ移る。
【０３１１】
ステップＳ４２０で限界に達していないとわかれば、ステップＳ４２１で種別２のコマンド列、つまり文字登録＋印字コマンド４１，４２，４３，４４をプリンタ２へ転送してからステップＳ４２５へ移る。当然ながら、プリンタ２へ転送される一文字のドットイメージは、データ圧縮されて転送される。
【０３１２】
ステップＳ４１８でＮＯならば、この文字の印字の指示が文書の中で二度目以降の指示であることを示しているので、ステップＳ４２３で印字位置を示す位置移動命令３３をプリンタ２へ転送し、次に、ステップＳ４２４で種別４のコマンド列、つまり文字コード印字コマンド４１，４２をプリンタ２へ転送する。
【０３１３】
そして、ステップＳ４２５で変数ｓｐに１を加算してステップＳ４０８の直前に戻り、次の文字データのプリンタ２への転送処理を行なう。
【０３１４】
（プリンタドライバ：簡易同期式）
次に、図５０のステップＳ４２６以降の「簡易同期式」によるページ出力について説明する。
【０３１５】
先ず、ステップＳ４２６ではページ種別がＢのコマンド９２をプリンタ２へ転送し、ステップＳ４２７で蓄積した文字印字指示にしたがってフレームバッファ上に全文字をＯＲ書きし、ステップＳ４２８でフレームバッファの先頭からイメージデータの圧縮作業を開始する。
【０３１６】
そして、ステップＳ４２９で圧縮したデータが１ＭＢを越えたかチェックし、ＮＯならステップＳ４３０で１ページ全ての圧縮作業が完了したかチェックし、ここでもＮＯならステップＳ４３１でデータ圧縮作業を続行し、ステップＳ４２９の直前に戻り、ループを形成する。つまり、圧縮作業が１ページ分終わるか、圧縮データが１ＭＢを超えるまで待つ。
【０３１７】
ステップＳ４２９あるいはステップＳ４３０でＹＥＳなら、図５１のステップＳ４３２へ移り、まずバンド開始コマンド８１をプリンタ２へ転送し、ステップＳ４３３でバンド高さコマンド８２をプリンタ２へ転送し、ステップＳ４３４で繰り返しバンド番号コマンド８３をプリンタ２へ転送する。なお、ここではバンドの繰り返しがないものとして、番号に−１をセットして転送する。
【０３１８】
次に、ステップＳ４３５では位置移動コマンド３３を転送し、ステップＳ４３６では種別５のコマンド列、つまりイメージブロックコマンド４５，４６，４７，４８をプリンタ２へ転送する。
【０３１９】
そして、ステップＳ４３７でフレームバッファ上にまだ転送していない残りのイメージがあるかチェックし、残りがないならステップＳ４３８で変数ｍｐに１を加算して、ステップＳ３８４の直前に戻り、次のページのバンド処理を開始する。
【０３２０】
ステップＳ４３７でＹＥＳ、つまり残りがあるなら、ステップＳ４３９ヘ移り、フレームバッファ上の残りのイメージのイメージデータ圧縮作業を開始し、ステップＳ４４０で圧縮したデータが１００ＫＢを越えたかチェックし、ＮＯならステップＳ４４１で１ページ全ての圧縮作業が完了したかチェックし、ここでもＮＯならステップＳ４４２でデータ圧縮作業を続行し、ステップＳ４４０の直前に戻り、ループを形成する。つまり、圧縮作業が１ページ分終わるか、圧縮データが１００ＫＢを超えるまで待つ。
【０３２１】
ステップＳ４４０、あるいはステップＳ４４１でＹＥＳなら、ステップＳ４３２の直前に戻り、バンドデータのプリンタ２への転送処理を行なう。
【０３２２】
（受信部６）
図５２，図５３は、受信部６の動作を説明するためのフローチャートである。もちろん、受信部６はハードウェアの回路であって、通常のプログラムとは異なるが、動作の順序をフローチャートで説明する。
【０３２３】
第１の実施の形態の図１１，図１２で説明した受信部は、ジョブ開始３１からジョブ終了３６までを一単位として連続的に受信した。途中にページ開始コマンド３２があっても、受信プログラム５１へ知らせはするが、途中で受信を中断することなくジョブ終了まで一気に受信した。
【０３２４】
しかし、ページ毎に「合成方式」で出力するか、あるいは「簡易同期式」で出力するか異なることも考えられるので、ページ開始コマンド３２が届いた時点で受信管理プログラム５１からの指示を待つ。
【０３２５】
受信プログラム５１は、出力方式が変わるのであれば、受信済みのページが全て排出されるのを待って、ＲＡＭ９上のメモリマップを「合成方式」用メモリマップか、「簡易同期式」用メモリマップかに変更して、そのあとで新しい受信データの書き込み位置と、限界値の指示を受信部６へ行なってページデータの受信を開始させる。つまり、出力方式が変わる場合は、一旦受信バッファが空になる。
【０３２６】
なお、出力方式が変わらない場合は、受信済みページの排紙を待つ必要はない。つまり、受信バッファ１０が一旦空になるまで待つ必要はない。ページデータは連続的に受信できる。しかし、この場合も、受信部６は受信管理プログラム５１の受信データの書き込み位置と限界値の指示を待ってから次のページの受信を開始する。
【０３２７】
受信部６は、プリンタ２の電源オンと同時に動作を開始するが、先ずステップＳ４５１で受信部６の動作状態を「ホスト１からのデータの受信は可能だが、受信したデータは全て受け捨てる」状態とする。
【０３２８】
そして、ステップＳ４５２で、ユーザがプリンタ２の電源をオフしたかチェックし、ＹＥＳなら受信部６の動作を終了する。ＮＯならステップＳ４５３で受信したデータからページ開始コマンド３２を検知したかチェックし、ＮＯならステップＳ４５２の直前に戻り、ホスト１からのページ開始コマンド３２を待ち受ける。
【０３２９】
ステップＳ４５３でＹＥＳならステップＳ４５４で一旦受信を停止し、ステップＳ４５５でページ開始コマンド３２を検知したことと、ページ種別Ａ９１か、ページ種別Ｂ９２の区別を、受信管理プログラム５１へ知らせる。受信を一旦停止するとは、プリンタ２がビジー状態でホスト１からのデータの受信を拒否している状態である。
【０３３０】
次に、ステップＳ４５６で受信管理プログラム５１から受信バッファ１０への書き込み開始位置と、限界値の指示があるまで待ち、指示があったなら、ステップＳ４５７でホスト１からの受信を行ない、受信したデータは受信バッファ１０上に書込む動作を開始し、続行する。
【０３３１】
そして、ステップＳ４５８でジョブ終了コマンドを検知したかチェックし、ＹＥＳならステップＳ４５９で受信を一旦停止し、ステップＳ４６０で受信管理プログラム５１へジョブ終了を検知したこと、及び、受信バッファ１０への書き込み終了位置を知らせた後、ステップＳ４５１の直前に戻り、次のページデータの受信を待つ。
【０３３２】
ステップＳ４５８でＮＯなら、図５３のステップＳ４６１で受信データの書き込みが限界値に達したかチェックし、ＹＥＳならステップＳ４６２で受信を一旦停止し、ステップＳ４６３で受信管理プログラム５１に限界値に達したことを知らせる。
【０３３３】
そして、ステップＳ４６４で受信管理プログラム５１から新しい書き込み位置、新しい限界値の指示があったかチェックし、ＮＯならばステップＳ４６５で受信管理プログラム５１から書き込み終了の指示があったかチェックし、ここでもＮＯならステップＳ４６４の直前に戻ってループを形成し、どちらかの指示があるまで待つ。
【０３３４】
ステップＳ４６５でＹＥＳなら、このページデータの受信はもう必要ないことを示しているので、ステップＳ４５１の直前に戻って次のページデータの受信を待つ。
【０３３５】
ステップＳ４６４でＹＥＳなら、ステップＳ４５７の直前に戻って、以後新しく指示された書き込み位置、限界値のもとで、受信を再開する。
【０３３６】
ステップＳ４６１でＮＯならば、ステップＳ４６６でページクリアコマンドを検知したかチェックし、ＹＥＳならステップＳ４６７で受信管理プログラム５１へページクリアコマンド９３の検知を知らせる。そして、ステップＳ４５１の直前に戻って、次のページデータの受信を待つ。
【０３３７】
ステップＳ４６６でＮＯならば、ステップＳ４６８でページ開始コマンド３２を検知したかチェックし、ＮＯならステップＳ４５７へ戻り、ページデータの受信を続行する。ステップＳ４６８でＹＥＳならステップＳ４６９で受信を一旦停止し、ステップＳ４７０でページ開始コマンド３２を検知したことと、ページ種別Ａ９１か、ページ種別Ｂ９２の区別を受信処理プログラム５１へ知らせてから、ステップＳ４６５の直前に戻り、受信管理プログラム５１からの書き込み位置、限界値の指示を待つ。そして、指示がきたなら受信バッファ１０への受信データの書き込みが開始される。
【０３３８】
（受信管理プログラム）
図５４，図５５，図５６は、受信管理プログラム５１の動作を説明するためのフローチャートである。前述の受信部６の説明にも関連するが、受信管理プログラム５１は、ページ単位の管理を行なっており、受信部６からページ開始コマンド３２検知の知らせがあるたびに、受信バッファ１０への書き込み位置と、限界値を受信部６へ指示して、受信データの書き込みを開始させる。
【０３３９】
また、ページ毎に「合成方式」の出力か、「簡易同期式」の出力かチェックして、必要があればＲＡＭ９のメモリマップを「合成方式」用メモリマップか、「簡易同期式」のメモリマップか、ページ毎に切り替える。
【０３４０】
受信管理プログラム５１は、プリンタ２の電源オンと同時に起動するが、先ずステップＳ４８１で変数ｍｅｍに０をセットし、ステップＳ４８２でユーザがプリンタ２を電源オフしたかチェックし、ＹＥＳならこのプログラムの処理を終了する。ＮＯならステップＳ４８３で受信部６からページ開始コマンドを検知したとの知らせが来たかチェックし、ＮＯならステップＳ４８２の直前に戻りループを形成して、受信部６からのページ開始の知らせが来るまで待つ。
【０３４１】
ステップＳ４８３でＹＥＳなら、ステップＳ４８４でそのページの種別コマンドがページ種別Ａ９１かチェックし、ＹＥＳならステップＳ４８５で変数ｍｅｍ＿ｎｅｗに１をセットし、ＮＯならステップＳ４８６で変数ｍｅｍ＿ｎｅｗに２をセットした後、ステップＳ４８７に移って変数ｍｅｍが変数ｍｅｍ＿ｎｅｗと一致しているかチェックする。
【０３４２】
ステップＳ４８７でＹＥＳなら、それは前のページも「合成方式」で出力し、今度のページも「合成方式」で出力するか、あるいは、前のページも「簡易同期式」で出力し、今度のページも「簡易同期式」で出力するか、いずれにしてもＲＡＭ９上のメモリマップに変更のない状態であって、図５５のステップＳ４９５へ飛んで本来の受信処理を開始する。
【０３４３】
ステップＳ４８７でＮＯなら、それは前のページと今度のページで出力方式が異なり、ステップＳ４８８以降で先ずＲＡＭ９のメモリマップを「合成方式」用か「簡易同期式」用か、いずれかに変更してから図５５のステップＳ４９５へ飛び、本来の受信処理を開始する。
【０３４４】
その場合、先ずステップＳ４８８で受信が完了したページのデータの残りが受信バッファ１０上にまだ残っているかチェックし、残っているならその残りページが解析プログラム５２によって全て排紙されるまでループを形成して待つ。
【０３４５】
受信済みのページデータが受信バッファ１０からなくなったことを確認したら、ステップＳ４８９で変数ｍｅｍ＿ｅｎｗが１かチェックし、ＹＥＳならステップＳ４９０で「合成方式」用としてＲＡＭ９上に受信バッファ１０、バンドメモリ７１，７２、ページ管理表１３、登録文字管理表１４、登録文字データ領域１５を設け、それぞれをクリアする。ここで言うクリアとは必ずしも０クリアをさしてはいない。初期化すると言う意味である。そして、ステップＳ４９１で変数ｍｅｍに１をセットしてステップＳ４９４に飛ぶ。
【０３４６】
ステップＳ４８９でＮＯの場合は、ステップＳ４９２で「簡易同期式」用として、ＲＡＭ９上に受信バッファ１０、ページ管理表１３だけを設け、それぞれクリアする。そして、ステップＳ４９３で変数ｍｅｍに２をセットして、ステップＳ４９４へ飛ぶ。
【０３４７】
ステップＳ４９４では、新しい書き込み位置は、受信バッファ１０の先頭位置、新しい限界値は受信バッファ１０の最後部として、受信部６に対して指示を行なう。そして、図５５のステップＳ４９５に飛ぶ。
【０３４８】
次に、図５５のステップＳ４９５では、ページ管理表１３に、これから受信を開始するページデータの受信バッファ１０上の開始アドレスをセットし、ステップＳ４９６で受信部６に書き込み位置と書き込みの限界値を知らせ、次にステップＳ４９７で０．２秒待つ。この待っている間は、受信部６により受信バッファ１０への受信データの書き込みが進んでいるはずである。
【０３４９】
そして、ステップＳ４９８で受信部６から受信管理プログラム５１に対して、何らかの知らせが届いていないかチェックし、届いていないのであればステップＳ４９７の直前に戻り、ループを形成して受信部６からの知らせを待つ。
【０３５０】
ステップＳ４９８で受信部６からの知らせが届いたと判断できたのであれば、ステップＳ４９９以降でその知らせの種類に応じて各種の処理を行なう。
【０３５１】
先ず、ステップＳ４４９では、受信部６からの知らせがページ開始コマンド３２を検知したものかチェックし、ＹＥＳならステップＳ５００で受信中の前のページがあったかチェックし、なければそのままステップＳ４８４の直前に戻り、新しいページの受信作業に入る。ステップＳ５００でＹＥＳなら、ステップＳ５０１で受信中であった前のページの終了アドレスをページ管理表１３にセットしてから、ステップＳ４８４の直前に戻り、新しいページの受信作業に入る。
【０３５２】
ステップＳ４９９でＮＯなら、ステップＳ５０２で受信部６からの知らせがページクリアコマンドを検知したものであるかチェックし、ＹＥＳならステップＳ５０３で受信中だったページをページ管理表１３からクリアする。そして、ステップＳ４８２の直前に戻り、次のページ開始の知らせを待つ。
【０３５３】
ステップＳ５０４でＮＯならば、受信部６からの知らせが受信バッファ１０への受信データの書き込みが限界に達したことを意味するので、先ず、ステップＳ５０６でページ管理表をチェックして受信バッファ１０に受信データの書き込み可能な空きがあるか調べる。
【０３５４】
空きがあるなら、新しい限界値が設定可能なので、ステップＳ４９６へ飛んで、受信部６に対して新しい書き込み位置と新しい限界値を知らせて、受信作業を続行する。
ステップＳ５０６で空きがないとわかったら、ステップＳ５０７で受信バッファ１０には現在受信中のページデータしか存在しなくて、受信バッファ１０全てに書込んでもまだそのページのデータが続く状況にあるのかチェックし、つまり、１ページのデータが大きすぎるのかチェックし、大きすぎるわけではないのであれば、ステップＳ５０８で１秒待つ。
【０３５５】
この待っている間は、解析プログラム５２による受信完了済みのページデータの排紙作業と、排紙済みのページデータの受信バッファ１０上からのクリアを待つ。ステップＳ５０８の後は、ステップＳ５０６の直前に戻ってループを形成して、とにかく、解析プログラム５２の解析処理、排紙処理の進行を待つ。
【０３５６】
ステップＳ５０７で、１ページデータが大きすぎると判断できたなら、図５６のステップＳ５０９で変数ｍｅｍが１かチェックする。変数ｍｅｍが１なら、現在のＲＡＭ９上のメモリマップは、「合成方式」であることを示しており、「合成方式」では、大きすぎる１ページデータ、つまり巨大ページの出力は不可能なので、ステップＳ５１５以降で受信中止処理に移る。
【０３５７】
ステップＳ５０９でＮＯの場合は、ステップＳ５１０以降で解析プログラム５２と共同で、巨大ページの「簡易同期式」での排紙出力処理に移る。
【０３５８】
先ず、ステップＳ５１０でページ管理表１３に大きなページであることを示す印をつけ、ステップＳ５１１で解析プログラム５２に巨大ページを受信中であることを知らせ、また、受信バッファ１０上への最後の書き込み位置を知らせる。
【０３５９】
そして、ステップＳ５１２でループを形成して、解析プログラム５２からの知らせを待つ。解析プログラム５２からの知らせの中身は、受信済みイメージブロックをエンジンにビデオ転送したので、その空いた場所に、次のイメージブロックの受信を催促する知らせか、あるいは、紙ジャムエラーが発生した知らせか、あるいは、エンジンへのビデオ転送にイメージブロックの受信が追いつかない状態になった「オーバーランエラー」が発生した知らせかの３つのうちひとつである。
【０３６０】
解析プログラム５２からの知らせがあったならステップＳ５１３へ飛んで、知らせの中身がエラーかどうかチェックし、ＮＯなら、つまりエラーでなくて次のイメージブロックの受信の催促なら、ステップＳ５１４でページ管理表１３のページ開始アドレスを修正した後で、ステップＳ４９６の直前に戻り、巨大ページのイメージブロックの受信を続行する。
【０３６１】
ステップＳ５０９でＹＥＳの場合、あるいはステップＳ５１３でＹＥＳの場合は、ページデータ受信の中止処理に入るが、先ずステップＳ５１５で受信部６に書き込み終了の指示をし、ステップＳ５１６で受信中だったページをページ管理表１３上からクリアし、ステップＳ５１７でＲＡＭ９上の各バッファ、ワーク領域等をクリアする。「合成方式」であるなら、バンドメモリや、登録文字管理表１４、登録文字データ領域１５のクリアを含む。
【０３６２】
ステップＳ５１７の後は、ステップＳ４８２の直前に戻り、次のページ開始の知らせを待つ。
【０３６３】
（解析プログラム）
図５７，図５８は、解析プログラム５２の動作を説明するためのプログラムである。第３の実施の形態の図４０〜図４３で説明した解析プログラム５２の動作の先頭部分に、ステップＳ５２１以降の処理を追加した形になっている。
【０３６４】
図５７，図５８では、追加した部分だけを説明する。その他の部分は、図４０〜図４３と同様であるので、説明は省略する。
【０３６５】
解析プログラム５２は、プリンタ２の電源オンと同時に動作を開始するが、先ず、ステップＳ３２１でユーザによってプリンタ２が電源オフされたかチェックし、ＹＥＳならこのプログラムの動作を終了する。
【０３６６】
ステップＳ３２１でＮＯなら、ステップＳ３２２で受信済みのページデータが受信バッファ１０上にあるかチェックし、あるなら図４０のステップＳ３２３以降の処理に進む。
【０３６７】
ステップＳ３２２でＮＯなら、ステップＳ５２１で受信管理プログラム５１から受信バッファ１０に蓄えるには大きすぎるページがあるとの知らせがあったかチェックし、ＮＯならステップＳ３２１の直前に戻りループを形成してページデータの受信完了を待つ。
【０３６８】
ステップＳ５２１でＹＥＳなら、ステップＳ５２２以降で受信バッファ１０に収まりきらない巨大なページデータの「簡易同期式」での出力作業に移る。
【０３６９】
ステップＳ５２２では、エンジン部４に対して、給紙開始の指示を送り、ステップＳ５２３でエンジン部４が用紙なしを検知したかチェックし、用紙が無いならステップＳ５２４でループを形成して、ユーザが用紙をセットするまで待つ。用紙がセットされたか、あるいは、ステップＳ５２３でＮＯなら、ステップＳ５２５でこのページの先頭バンドに所属する単一イメージブロックの圧縮イメージデータの伸長作業と、エンジン部４へのビデオ転送作業をイメージ伸長・ビデオ転送回路７３に対して指示する。
【０３７０】
そして、ステップＳ５２６でビデオ転送作業が終了したかチェックし、ＹＥＳなら、ステップＳ５２７で受信管理プログラム５１に対してビデオ転送作業が終了したので、受信バッファ１０上に空きができたことを知らせる。つまり、後述するバンド群のデータの受信を催促する。
【０３７１】
次に、ステップＳ５２８で１ページ全てのビデオ送信作業が完了したかチェックし、ＹＥＳならステップＳ５２９でページ管理表１３上の排紙済みページをクリアし、ステップＳ３２１の直前に戻り、次のページの解析処理に移る。
【０３７２】
ステップＳ５２８でＮＯならば、ステップＳ５３０で次の受信済みバンドが受信バッファ１０に存在するかチェックし、ＹＥＳならステップＳ５３１でイメージ伸長・ビデオ転送回路７３に対して転送を完了したバンドの次のバンドに所属する単一イメージブロックの圧縮イメージデータの伸長作業と、エンジン部４へのビデオ転送作業を指示する。そしてステップＳ５２６の直前に戻って、ビデオ転送の完了を待つ。
【０３７３】
ステップＳ５３０でＮＯの場合は、１ページ分のビデオ転送が完了したわけではなく、しかも、次のバンドのデータはまだ受信完了していないと言うことで、ステップＳ５３２でプリンタ２に「オーバーランエラー発生」のパネル表示を行い、ステップＳ５３５へ飛んでエラー処理を実行する。
【０３７４】
ステップＳ５２６でＮＯの場合は、ステップＳ５３３で紙ジャム、つまりエンジン部４で紙詰まりが発生したかチェックし、ＮＯならばステップＳ５２６の直前に戻ってループを形成して、ビデオ転送の終了を待つ。
【０３７５】
ステップＳ５３３でＹＥＳなら、ステップＳ５３４で「紙詰りが発生しました」とパネル表示をし、ステップＳ５３５では、受信管理プログラム５１に「エラー発生」を知らせる。この知らせるべき「エラー」の種類としては、「紙ジャムエラー」及び「オーバーランエラー」が含まれる。
【０３７６】
そして、ステップＳ５３６でユーザが詰まった紙を取り除くまでチェックを繰り返し、その後、ステップＳ３２１の直前まで戻って、次のページの解析に移る。
【０３７７】
もちろん、ステップＳ５３２で「オーバーランエラー」が発生した時は、紙が詰まったわけではないので、ステップＳ５３６でのチェックは素通りする。なお、「オーバーラン」発生時は、オーバーランの発生したバンド位置以下の部分が白いままのページが排紙出力される。
＜第４の実施の形態特有の効果＞
（１）本実施の形態では、第３の実施の形態の「合成方式」による出力と、「簡易同期式」による出力とをプリンタドライバで自動判断して切り換えるので、ユーザは特に切り替えの操作が不要である。
（２）（１）の前提の上で、文字を主体とした文書ページは、「合成方式」によって文字はほとんどコードで出力できるので、すばやく排紙出力できる。
（３）（１）の前提の上で、写真等のイメージを主体とした文書ページは、受信バッファ１０の大きさを超えるページデータでも、「簡易同期式」によって容量限界を超えて排紙出力できる。
［第５の実施の形態］
第５の実施の形態として、第１〜第４の実施の形態において説明した、ホストのドライバにおいて、文字とその他の画像とを区別して、文字は文字コードで、その他はビットマップ画像データでプリンタに送信するという方式と、従来の、すべての印刷データをビットマップ画像データでプリンタに送信するという方式とを組み合わせた方式を本実施の形態で説明する。
【０３７８】
図６１，６２は、本実施の形態のプリンタドライバのフローチャートである。なお、このドライバが制御できるプリンタは、第１の実施の形態において説明したプリンタである。
【０３７９】
プリンタドライバは、ユーザが用いるアプリケーションソフトで作成した文書データから図２０で説明した文字やイメージのプリンタコマンドを作成、プリンタ２へ転送する。ユーザがアプリケーションソフトから文書の印刷を指示すると、ホスト１内でプリンタドライバが起動される。
【０３８０】
図示されてはいないが、ドライバは起動時にはホスト１のメモリ上に１ページ分の大きさのイメージ展開領域としてのフレームバッファを確保し、同時にフレームバッファをクリアする。また、ドライバの文書印刷処理の終了時には、フレームバッファとして使われていたメモリ領域は開放される。
【０３８１】
処理としては、まずステップＳ６１０１でジョブ開始コマンド３１をプリンタ２へ転送し、次にステップ６１０２で変数ｍに印刷しようとしている文書のページ数に１を加算した値をセットし、ステップＳ６１０３で、処理中のページ番号を示す変数ｍｐに１をセットする。そして、ステップＳ６１０４で変数ｍｐが変数ｍより小さいかチェックし、ＮＯなら文書の全てのページ数の処理が終わったので、ステップＳ１７２でジョブ終了コマンドを転送して、ドライバの処理を終了する。
【０３８２】
ステップＳ６１０４でＹＥＳなら、ステップＳ６１０５でページ開始コマンド３２をプリンタ２へ転送し、ステップＳ６１０６でｍｐページ目のアプリケーションからの文字印字指示を蓄積し、ステップＳ６１０７で、蓄積された文字印字指示の数を、別途定義された所定値ｐと比較する。もし文字印字指示の数が所定数ｐよりも大きいならば、ステップＳ６１０８に進んで、蓄積された文字印字指示に基づいて、そのページに出現した文字については、文字登録及び文字コードにより、その他はビットマップ画像データとしてプリンタへと送信する。文字印字指示の数が所定数ｐよりも小さい場合には、ステップＳ６１２１に進み、そのページの描画指示を文字も含めてすべてビットマップ画像データに展開する。その後、後述するステップＳ６１２２に進んでプリンタへと展開されたイメージの送信を行う。
【０３８３】
ステップＳ６１０８では、ｍｐページ目のアプリケーションからの文字印字指示以外の描画指示をホスト１上のフレームバッファに展開する。ここで文字印字指示以外の描画指示とは、罫線や図形描画、イメージの貼り付け等である。
【０３８４】
次に、ステップＳ６１０９で、変数ｓに蓄積された文字数に１を加算した値をセットして、ステップＳ６１１０で、処理中の文字が１つのバンドにおいて何番目であるか示す変数ｓｐヘ１をセットする。
【０３８５】
次にステップＳ６１１１で変数ｓｐが変数ｓより小さいかチェックし、ＮＯならｍｐページ目に含まれる文字データの転送処理は全て済んだことになるので、ステップＳ６１２２以降でｎｐバンド目のイメージデータの転送処理に移る。つまり、ステップＳ６１２２では、空白のページかチェックし、ＹＥＳなら何もせずステップＳ６１２６に移る。
【０３８６】
ステップＳ６１２２でＮＯなら、ステップＳ６１２３でイメージが実際に含まれる矩形領域を、単一のブロックとして切り出し、ステップＳ６１２４でブロックの貼り付け位置を示す位置移動コマンド３３をプリンタ２へ転送し、ステップＳ６１２５で種別５に対応するコマンド、つまりイメージブロックコマンド４５，４６，４７，４８をプリンタ２へ転送する。当然ながら、イメージブロックデータはデータ圧縮されて転送される。
【０３８７】
そして、ステップＳ６１２６で処理中のページ番号を示す変数ｍｐに１を加算し、ステップＳ６１０４の直前に戻り、次のページの転送処理に移る。
【０３８８】
ステップＳ６１１１でＹＥＳの場合は、ステップＳ６１１６でｓｐ番目の文字はこの文書で初めて現れる文字の印字の指示かチェックし、初めてならばステップＳ６１１７でその文字の印字位置を示す位置移動コマンド３３をプリンタ２へ転送し、ステップＳ６１１４で、プリンタ２側が登録可能な文字数の限界に達したかチェックし、限界に達したならステップＳ６１１９で種別３に対応するコマンド、つまり、ｓｐ番目の文字の文字イメージ印字のみのコマンド４３，４４をプリンタ２へ転送して、ステップＳ６１１５へ移る。
【０３８９】
ステップＳ６１１７で限界に達していないと分かれば、ステップＳ６１１８で種別２に対応するコマンド、つまり文字登録＋印字コマンド４１，４２，４３，４４をプリンタ２へ転送してからステップＳ６１１４ヘ移る。当然ながら、プリンタ２へ転送される一文字のドットイメージは、データ圧縮されて転送される。
【０３９０】
ステップＳ６１１２でＮＯならば、この文字の印字の指示が文書の中で二度目以降の指示であることを示しているので、ステップＳ６１１３でその文字の印字位置を示す位置移動命令３３をプリンタ２へ転送し、次にステップＳ６１１４で、その文字についての種別コマンド３４が４、つまり文字コード印字コマンド４１，４２をプリンタ２へ転送する。
【０３９１】
そして、ステップＳ６１１５で何番目の文字かを示す変数ｓｐに１を加算してステップＳ６１１１の直前に戻り、次の文字データのプリンタ２への転送処理を行なう。
【０３９２】
以上の手順により、１ページに含まれる文字数が所定数以上であれば文字とその他のデータとを区別して、文字を文字登録と文字コードとでプリンタに送信してプリンタにおいてイメージに展開させ、１ページに含まれる文字数が所定数より小さければ、文字も含めてそのページの画像データを全てビットマップ画像に展開してプリンタに送り付ける。こうすることで、わずかの数の文字が含まれている場合に、その文字について、ドライバで文字を抽出して文字登録及び文字を除いてイメージへの展開を行うことと、プリンタにおいて文字をイメージに展開するという、双方における処理のオーバーヘッドを小さくすることができる。
【０３９３】
また、上述の第１〜第４の実施形態におけるプリンタは、従来のすべての印刷データをイメージとしてホストコンピュータから受信した場合でも対応できるため、本実施形態のように、両方式が混在していても特別にプリンタ側の処理手順を変更する必要がない。
【０３９４】
上記手順は１ページを単位とする場合に行われる手順であるが、第２の実施の形態におけるように、バンド単位でホストコンピュータからプリンタへと印刷データが送信される場合であっても、上述の要領でデータ転送の方式を変更することができる。
【０３９５】
図６３は、この方式に係るプリンタドライバによる制御手順の一部である。なお、このプリンタドライバにより送信されるデータを適正に処理できるプリンタは、第２の実施の形態に記載されたプリンタである。
【０３９６】
このドライバの手順は、そのほとんどが第２の実施形態におけるドライバのフローチャートである図２２〜２４と共通であるため、共通な部分については図２２〜２４と同一の符号を付し、説明を省略する。第２の実施形態とことなるのは、図６３のステップＳ１４６とステップＳ１４７との間に、ステップＳ６３０１〜ステップＳ６３０２が挿入されているという点である。
【０３９７】
ステップＳ６３０１では、蓄積された文字印字指示の数を、別途定義された所定値ｐと比較する。もし文字印字指示の数が所定数ｐよりも大きいならば、ステップＳ１４７に進んで、それ以降の処理により、蓄積された文字印字指示に基づいて、そのページに出現した文字については、文字登録及び文字コードにより、その他はビットマップ画像データとしてプリンタへと送信する。文字印字指示の数が所定数ｐよりも小さい場合には、ステップＳ６３０２に進み、そのページの描画指示を文字も含めてすべてビットマップ画像データに展開する。その後、ステップＳ１５８に進んでプリンタへと展開されたイメージの送信を行う。
【０３９８】
以上のようにプリンタドライバが処理を行うことで、１ページに含まれる文字数が所定数以上であれば文字とその他のデータとを区別して、文字を文字登録と文字コードとでプリンタに送信してプリンタにおいてイメージに展開させ、１ページに含まれる文字数が所定数より小さければ、文字も含めてそのページの画像データを全てビットマップ画像に展開してプリンタに送り付ける。こうすることで、わずかの数の文字が含まれている場合に、その文字について、ドライバで文字を抽出して文字登録及び文字を除いてイメージへの展開を行うことと、プリンタにおいて文字をイメージに展開するという、双方における処理のオーバーヘッドを小さくすることができる。
【０３９９】
なお、図６３の手順では、１ページ含まれる文字数を所定の数と比較しているが、１つのバンドごとにそれに含まれる文字数を所定の数と比較し、１ページに含まれる文字数が所定数以上であれば、文字は文字コードとして、その他はイメージとしてそのバンドをプリンタに送信、そうでなければそのバンドのすべての印刷データおイメージとしてプリンタに送信する。
【０４００】
そのためには、図６４に示すように、第２の実施形態の図２３におけるステップＳ１５４とステップＳ１５５との間にステップＳ６４０１，Ｓ６４０２を挿入する。ステップＳ６４０１においては、ピックアップされたｎｐバンド目の文字印字指示の数を所定数ｐ’と比較し、文字の数の方が多ければステップＳ１５５に進み、そうでなければ、ステップＳ６４０２において、そのバンドの印刷データを全てイメージに展開し、ステップＳ１４８で展開されたフレームバッファ上のイメージと合成してステップＳ１５８に分岐することになる。こうすることで、バンド単位で本発明に係る印刷制御方式と従来の印刷制御方式とを切り替えることができる。
【０４０１】
【他の実施形態】
なお、本発明は、複数の機器（例えばホストコンピュータ，インタフェイス機器，リーダ，プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機，ファクシミリ装置など）に適用してもよい。
【０４０２】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、ホストあるいはプリンタに供給し、そのホストあるいはプリンタのＣＰＵやＭＰＵが記憶媒体に格納されたプログラムコードを読出し実行することによっても達成される。
【０４０３】
この場合、記憶媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成する。
【０４０４】
プログラムコードを供給するための記憶媒体としては、例えば、フロッピディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，磁気テープ，不揮発性のメモリカード，ＲＯＭなどを用いることができる。
【０４０５】
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【０４０６】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【０４０７】
【発明の効果】
以上説明したように、本発明によれば、文字部分については、ほとんど文字コードによる処理なので、ホスト上では文字展開時間がそれほどいらないし、データ量も小さいので文書データの高速出力ができるという効果がある。
【０４０８】
また、フレームメモリの代わりにバンドメモリを備えることで、必要とするメモリ容量を小さく押さえられるという効果がある。
【０４０９】
また、バンド内で実際にイメージが含まれる矩形部分だけをイメージデータとして扱い、イメージを全く含まないバンドはイメージデータをプリンタに送らないことで、イメージデータの転送量を小さく抑えられるという効果がある。
【０４１０】
また、文字を含まないイメージだけのバンド部分の出力については、ハードウェア回路によって圧縮イメージデータの伸長作業とエンジンへのビデオ転送作業を行ない、バンドメモリへの展開作業を省略してプリンタのコントローラの負荷を小さくすることで、「オーバーラン」等のエラーを発生しにくくできるという効果がある。
【０４１１】
また、ホスト上のパターン分析でバンド単位に同じパターンのあるバンドが存在する場合はそのバンドのイメージデータは以前転送済みのバンドのイメージデータと同一であることを示すコマンドをプリンタへ転送することで、イメージデータの転送量を小さく抑えられるという効果がある。
【０４１２】
また、受信バッファにデータが納まる場合には、文字を文字コードとしてプリンタで展開する方式で印刷出力するが、データは全てイメージであり、受信バッファに納まりきらない場合には、イメージを所定の大きさに区切ってホストから送信し、プリンタでは受信する都度印刷するような方式に自動切り換えすることで、巨大なイメージデータを含んだページも出力できるという効果がある。
【０４１３】
【図面の簡単な説明】
【図１】第１の実施の形態のシステム全体のブロック構成図である。
【図２】イメージデータと文字データの合成の原理の説明図である。
【図３】コマンドの構造の説明図である。
【図４】コマンド列の構造の説明図である。
【図５】ＲＯＭに内蔵されたプログラムの図である。
【図６】受信バッファのポインタの説明図である。
【図７】プリンタドライバの動作のフローチャートである。
【図８】プリンタドライバの動作のフローチャートである。
【図９】受信管理プログラムの動作のフローチャートである。
【図１０】受信管理プログラムの動作のフローチャートである。
【図１１】受信部の動作のフローチャートである。
【図１２】受信部の動作のフローチャートである。
【図１３】解析プログラムの動作のフローチャートである。
【図１４】解析プログラムの動作のフローチャートである。
【図１５】登録プログラムの動作のフローチャートである。
【図１６】印字プログラムの動作のフローチャートである。
【図１７】排紙プログラムの動作のフローチャートである。
【図１８】第２の実施の形態のシステム全体のブロック構成図である。
【図１９】コントローラ部のバンド処理の原理の説明図である。
【図２０】コマンドの構造の説明図である。
【図２１】ＲＯＭに内蔵されてたプログラムの図である。
【図２２】プリンタドライバの動作のフローチャートである。
【図２３】プリンタドライバの動作のフローチャートである。
【図２４】プリンタドライバの動作のフローチャートである。
【図２５】解析プログラムの動作のフローチャートである。
【図２６】解析プログラムの動作のフローチャートである。
【図２７】解析プログラムの動作のフローチャートである。
【図２８】解析プログラムの動作のフローチャートである。
【図２９】印字プログラムの動作のフローチャートである。
【図３０】バンドのビデオ出力をする際の各変数の説明図である。
【図３１】イメージ伸長・ビデオ転送回路の動作のフローチャートである。
【図３２】イメージ伸長・ビデオ転送回路の動作のフローチャートである。
【図３３】イメージ伸長・ビデオ転送回路の動作のフローチャートである。
【図３４】第３の実施の形態のイメージバンドの繰り返しの原理の説明図である。
【図３５】イメージバンドの繰り返しの例の説明図である。
【図３６】コマンドの構造の説明図である。
【図３７】プリンタドライバの動作のフローチャートである
【図３８】プリンタドライバの動作のフローチャートである
【図３９】プリンタドライバの動作のフローチャートである
【図４０】解析プログラムの動作のフローチャートである。
【図４１】解析プログラムの動作のフローチャートである。
【図４２】解析プログラムの動作のフローチャートである。
【図４３】解析プログラムの動作のフローチャートである。
【図４４】第４の実施の形態のシステム全体のブロック構成図である。
【図４５】コマンドの構造の説明図である。
【図４６】ページ管理表の構造の説明図である。
【図４７】プリンタドライバの動作のフローチャートである。
【図４８】プリンタドライバの動作のフローチャートである。
【図４９】プリンタドライバの動作のフローチャートである。
【図５０】プリンタドライバの動作のフローチャートである。
【図５１】プリンタドライバの動作のフローチャートである。
【図５２】受信部の動作のフローチャートである。
【図５３】受信部の動作のフローチャートである。
【図５４】受信管理プログラムの動作のフローチャートである
【図５５】受信管理プログラムの動作のフローチャートである
【図５６】受信管理プログラムの動作のフローチャートである
【図５７】解析プログラムの動作のフローチャートである。
【図５８】解析プログラムの動作のフローチャートである。
【図５９】巨大イメージを出力する手順の原理を示す図である。
【図６０】巨大イメージを出力する際のプリンタのようすを示す図である。
【図６１】第５の実施の形態に係るプリンタドライバの動作のフローチャートである。
【図６２】第５の実施の形態に係るプリンタドライバの動作のフローチャートである。
【図６３】第５の実施の形態に係るプリンタドライバの動作のフローチャートである。
【図６４】第５の実施の形態に係るプリンタドライバの動作のフローチャートである。
【符号の説明】
１  ホストコンピュータ
２  プリンタ
３  コントローラ
４  エンジン
５，２１  ＣＰＵ
６  受信部
７  ビデオ転送回路
９  ＲＡＭ
１０  受信バッファ
１１  フレームバッファ
１２  ワーク領域
１３  ページ管理表
１４  登録文字管理表
１５  登録文字データ
１６  イメージ伸長回路
１７  文字伸長回路
２５  ビデオ受信部
２６  給紙部
２７  現像定着部
２８  排紙部
【図１】
0003814373.tif 000002
【図２】
0003814373.tif 000003
【図３】
0003814373.tif 000004
【図４】
0003814373.tif 000005
【図５】
0003814373.tif 000006
【図６】
0003814373.tif 000007
【図７】
0003814373.tif 000008
【図８】
0003814373.tif 000009
【図９】
0003814373.tif 000010
【図１０】
0003814373.tif 000011
【図１１】
0003814373.tif 000012
【図１２】
0003814373.tif 000013
【図１３】
0003814373.tif 000014
【図１４】
0003814373.tif 000015
【図１５】
0003814373.tif 000016
【図１６】
0003814373.tif 000017
【図１７】
0003814373.tif 000018
【図１８】
0003814373.tif 000019
【図１９】
0003814373.tif 000020
【図２０】
0003814373.tif 000021
【図２１】
0003814373.tif 000022
【図２２】
0003814373.tif 000023
【図２３】
0003814373.tif 000024
【図２４】
0003814373.tif 000025
【図２５】
0003814373.tif 000026
【図２６】
0003814373.tif 000027
【図２７】
0003814373.tif 000028
【図２８】
0003814373.tif 000029
【図２９】
0003814373.tif 000030
【図３０】
0003814373.tif 000031
【図３１】
0003814373.tif 000032
【図３２】
0003814373.tif 000033
【図３３】
0003814373.tif 000034
【図３４】
0003814373.tif 000035
【図３５】
0003814373.tif 000036
【図３６】
0003814373.tif 000037
【図３７】
0003814373.tif 000038
【図３８】
0003814373.tif 000039
【図３９】
0003814373.tif 000040
【図４０】
0003814373.tif 000041
【図４１】
0003814373.tif 000042
【図４２】
0003814373.tif 000043
【図４３】
0003814373.tif 000044
【図４４】
0003814373.tif 000045
【図４５】
0003814373.tif 000046
【図４６】
0003814373.tif 000047
【図４７】
0003814373.tif 000048
【図４８】
0003814373.tif 000049
【図４９】
0003814373.tif 000050
【図５０】
0003814373.tif 000051
【図５１】
0003814373.tif 000052
【図５２】
0003814373.tif 000053
【図５３】
0003814373.tif 000054
【図５４】
0003814373.tif 000055
【図５５】
0003814373.tif 000056
【図５６】
0003814373.tif 000057
【図５７】
0003814373.tif 000058
【図５８】
0003814373.tif 000059
【図５９】
0003814373.tif 000060
【図６０】
0003814373.tif 000061
【図６１】
0003814373.tif 000062
【図６２】
0003814373.tif 000063
【図６３】
0003814373.tif 000064
【図６４】
0003814373.tif 000065