以下、適宜図面を参照して本発明の実施形態について説明する。なお、以下に説明される実施形態は開示例にすぎず、本発明の要旨を変更しない範囲で適宜変更できることは言うまでもない。例えば、後述する各処理の実行順序は、本発明の要旨を変更しない範囲で、適宜変更することができる。
本実施形態では、図1に示されるプリンタ10を説明する。プリンタ10は、パーソナルコンピュータなどの情報処理装置に実装されたプリンタドライバが生成した印刷データを受け付けて印刷を実行可能なだけでなく、圧縮された画像データである圧縮画像データを受け付けて印刷を実行可能なプリンタである。すなわち、プリンタ10は、プリンタドライバが実装された情報処理装置だけでなく、プリンタドライバが実装されていない情報処理装置からも、印刷の実行指示を受け付けることができる。
プリンタ10は、インク滴をシートに吐出してシートに印刷を行う、いわゆるインクジェットプリンタであってもよいし、ドラムに付着させたトナーをシートに押圧して印刷を行う、いわゆるレーザプリンタであってもよいし、フィルムインクを用いてシートに印刷を行う、いわゆるサーマルプリンタであってもよい。すなわち、プリンタ10がシートに対して印刷を行う方式は、どのような方式であってもよい。以下では、プリンタ10が、いわゆるインクジェットプリンタである例を説明する。
プリンタ10は、コントローラ11と、通信I/F12と、ディスプレイ13と、操作スイッチ14と、印刷エンジン15と、を備える。「I/F」は、インタフェースを意味する。
通信I/F12は、不図示の通信回線と接続されている。通信回線は、情報処理装置を接続されている。すなわち、通信I/F12は、通信回線を通じて情報処理装置と接続されている。通信回線は、USBケーブルや、有線LANや、無線LANや、WANや、インターネットなどである。すなわち、通信回線は、情報処理装置からプリンタ10に圧縮画像データを送信可能であれば、どのような種類の通信回線であってもよい。なお、USBメモリなどの可搬記憶媒体をプリンタ10に装着して圧縮画像データをプリンタ10に入力可能であれば、プリンタ10は、通信回線に接続されていなくてもよい。
ディスプレイ13は、文字や図形などを表示する表示パネルと、表示パネルに重畳された透明な膜状のタッチセンサと、を有する。すなわち、ディスプレイ13は、いわゆるタッチパネルである。なお、ディスプレイ13は、表示パネルのみを有していてもよい。
操作スイッチ14は、ユーザの操作入力を受け付けるスイッチである。なお、プリンタ10は、操作スイッチ14と、ディスプレイ13のタッチセンサとの一方のみを有していてもよい。操作スイッチ14及びディスプレイ13のタッチセンサは、ユーザインタフェースの一例である。
印刷エンジン15は、給紙トレイと、ヘッド31と、給送ローラ32と、搬送ローラ33と、排紙ローラ34と、排紙トレイと、駆動回路35と、駆動モータ36と、を有する。駆動モータ36は、給送ローラ32、搬送ローラ33、及び排紙ローラ34を回転駆動させる。給紙トレイに載置されたシートは、回転駆動された給送ローラ32によって給紙トレイから給送され、次いで、回転駆動された搬送ローラ33によって搬送される。シートは、搬送ローラ33によって搬送されつつ、ヘッド31からインク滴を吐出され、画像を印刷される。すなわち、印刷エンジン15は、シートを搬送し、搬送するシートに印刷を行い、印刷を行ったシートを排紙トレイに排出する。
ヘッド31は、インク滴を吐出する駆動素子37を有する。駆動素子37は、例えば、圧電素子やヒータである。圧電素子は、直流電圧を印加されることによって変形し、変形することによってインク滴を吐出する。ヒータは、直流電圧を印加されることによってインクを加熱して突沸させ、インク滴を吐出させる。
駆動回路35は、駆動素子37を駆動させる回路である。駆動回路35は、入力された印刷データに応じたタイミング及び電圧値で駆動素子37に直流電圧を印加する。印刷データは、コントローラ11によって、駆動回路35に入力される。
コントローラ11は、中央演算処理装置であるCPU21と、プログラムや情報やデータを記憶するメモリ22と、通信バス23と、を備える。CPU21は、コンピュータの一例である。
コントローラ11は、例えば、パターン回路基板と、パターン回路基板に実装されたマイクロコンピュータや種々のICやコンデンサやダイオードなどの種々の電子部品によって実現される。
CPU21及びメモリ22は、通信バス23と接続されている。CPU21は、メモリ22に記憶された後述のOS26及び制御プログラム27を実行する。CPU21によって実行されるOS26や制御プログラム27は、データや情報をメモリ22から読み出し、或いはメモリ22に書き込む。詳しくは後述される。
また、通信バス23は、上述の通信I/F12、ディスプレイ13、操作スイッチ14、印刷エンジン15の駆動モータ36、及び駆動回路35と接続されている。すなわち、後述のOS26及び制御プログラム27を実行するCPU21は、通信I/F12を通じて情報やデータを情報処理装置から受信可能であり、ディスプレイ13に文字や画像を表示可能であり、ディスプレイ13のタッチセンサや操作スイッチ14を通じてユーザの指示を受付可能であり、印刷エンジン15の駆動モータ36や駆動回路35に情報やデータを入力可能である。
メモリ22は、ROM24及びRAM25を有している。ただし、メモリ22は、ROM24及びRAM25の他、EEPROM、HDD、USBメモリ等の可搬記憶媒体、CPU21が備えるバッファ等を有していてもよい。
メモリ22は、コンピュータが読み取り可能なストレージ媒体であってもよい。コンピュータが読み取り可能なストレージ媒体とは、non-transitoryな媒体である。non-transitoryな媒体には、上記の例の他に、CD-ROM、DVD-ROM等の記録媒体も含まれる。また、non-transitoryな媒体は、tangibleな媒体でもある。一方、インターネット上のサーバなどからダウンロードされるプログラムを搬送する電気信号は、コンピュータが読み取り可能な媒体の一種であるコンピュータが読み取り可能な信号媒体であるが、non-transitoryなコンピュータが読み取り可能なストレージ媒体には含まれない。
ROM24は、オペレーティングシステムであるOS26及び制御プログラム27を記憶している。
また、ROM24は、プリンタ10の仕様を示すモデル情報28を記憶する。モデル情報28は、例えば、プリンタ10のモデル名や、プリンタ10が印刷を実行可能なシートのサイズを示す情報や、カラー印刷を実行可能であることを示す情報や、両面印刷を実行可能であることを示す情報や、搬送するシートの向きを示す情報などの情報を含む。搬送するシートの向きを示す情報とは、例えば、A4サイズのシートを搬送する場合、シートの長手方向が搬送向きに沿う縦給紙を行うことを示す情報や、シートの短手方向が搬送向きに沿う横給紙を行うことを示す情報などである。モデル情報28は、例えば、MIB(Management Information Baseの略)情報としてROM24に記憶される。なお、モデル情報28は、EEPROMに記憶されていてもよい。
RAM25は、OS26や制御プログラム27の実行に用いられ、また、圧縮画像データから印刷データを生成するための処理の実行に用いられる。詳しくは後述する。
制御プログラム27は、圧縮された画像データである圧縮画像データを受け付け、受け付けた圧縮画像データを印刷データに変換し、印刷データを駆動回路35及び駆動モータ36に出力して印刷エンジン15に印刷を実行させるプログラムである。
制御プログラム27は、図1(B)に示されるように、複数のモジュールと、複数のモジュールの上位に位置するプロトコル階層であるアプリケーション51と、を有する。複数のモジュールは、受付モジュール52、解析モジュール53、ジョブ管理モジュール54である。ジョブ管理モジュール54の下位には、分割モジュール55、解凍モジュール56、変換モジュール57、及び印刷制御モジュール58が設けられている。以下では、受付モジュール52、解析モジュール53、ジョブ管理モジュール54、分割モジュール55、解凍モジュール56、変換モジュール57、及び印刷制御モジュール58を、受付モジュール52等と記載して説明することがある。また、分割モジュール55、解凍モジュール56、変換モジュール57、及び印刷制御モジュール58を分割モジュール55等と記載して説明することがある。
アプリケーション51及び受付モジュール52等は、疑似的に並行して実行される。すなわち、アプリケーション51及び受付モジュール52等は、いわゆるマルチタスク処理によって実行される。
受付モジュール52は、画像データを圧縮したデータである圧縮画像データ(図5)を受け付ける受付処理を実行するモジュールである。受付モジュール52は、通信I/F12を通じて情報処理装置から、圧縮画像データを受け付け、或いは、プリンタ10に装着されたUSBメモリ等から圧縮画像データを受け付ける。受付モジュール52は、受け付けた圧縮画像データを、RAM25の、アプリケーション51が指定する所定の記憶領域に記憶させる。
解析モジュール53は、受付モジュール52がメモリ22に記憶させた圧縮画像データを解析してジョブ登録及びページジョブ登録を行うモジュールである。解析モジュール53は、受付モジュール52が圧縮画像データを受け付けたことに応じて、印刷ジョブを後述のジョブ管理モジュール54に登録する。そして、解析モジュール53は、圧縮画像データを解凍することなく、圧縮画像データに含まれるページを見つけ出す解析処理(図3)を実行する。解析モジュール53は、ページを発見したことに応じて、ジョブ管理モジュールにページジョブを登録する。詳しくは後述する。解析モジュール53は、モジュールの一例である。
ジョブ管理モジュール54は、分割モジュール55等に後述の処理を実行させて、印刷エンジン15に対して印刷データを出力する処理を実行する。すなわち、ジョブ管理モジュール54は、登録された印刷ジョブ及びページジョブを管理及び処理するモジュールである。
分割モジュール55は、圧縮画像データに基づいて、圧縮画像データを解凍することなく、1ページ分の画像データを圧縮した部分圧縮データ(図5)を生成するモジュールである。詳しく説明すると、複数のページを含む圧縮画像データを解凍して得られるデータは、ページ数や、当該データが示す画像の解像度によっては、メモリ22が有するRAM25の容量では処理できないことが考えられる。分割モジュール55は、圧縮画像データの全てを後述の解凍モジュール56が解凍しないように、圧縮画像データから1ページ分ずつの部分圧縮データを生成する。
解凍モジュール56は、分割モジュール55が生成した部分圧縮データを解凍して解凍ページデータを生成するモジュールである。
変換モジュール57は、解凍モジュール56が生成した解凍ページデータを印刷データに変換するモジュールである。変換は、例えば、回転、色変換、誤差拡散、5値化などである。
回転は、解凍ページデータが示す画像を90°や180°や270°(-90°でもよい)などの回転角度で回転させて画像の向きを変える変換を意味する。
色変換は、解凍ページデータが有するRGBの色データを、印刷エンジン15が印刷を実行可能なBMCYなどの色データに変換することを意味する。BMCYとは、ブラック、マゼンタ、シアン、イエローを意味する。
誤差拡散は、2値化手法の1つであって、画質を高めるために実行される変換である。
5値化は、解凍ページデータから、駆動素子37に印加する直流電圧の電圧値に応じた駆動信号を生成する変換を意味する。電圧値は、例えば、「小」「中」「大」「特大」「ゼロ」である。
印刷制御モジュール58は、印刷データを駆動回路35及び駆動モータ36に対して出力して、印刷エンジン15に印刷を実行させるモジュールである。
以下、図2から図6を参照して、制御プログラム27が、圧縮画像データから印刷データを生成して出力し、印刷エンジン15に印刷を実行させる処理について説明する。なお、受付モジュール52、解析モジュール53、及びジョブ管理モジュール54は、アプリケーション51からの指示を受けて以下に説明する各処理を実行する。
本明細書では、基本的に、制御プログラム27に記述された命令に従ったCPU21の処理を説明する。すなわち、以下の説明における「判断」、「抽出」、「選択」、「算出」、「決定」、「特定」、「取得」、「受付」、「制御」、「設定」等の処理は、CPU21の処理を表している。CPU21による処理は、OS26などのコントローラを介したハードウェア制御も含む。なお、「取得」は要求を必須とはしない概念で用いる。すなわち、CPU21が要求することなくデータを受信するという処理も、「CPU21がデータを取得する」という概念に含まれる。また、本明細書中の「データ」とは、コンピュータに読取可能なビット列で表される。そして、実質的な意味内容が同じでフォーマットが異なるデータは、同一のデータとして扱われるものとする。本明細書中の「情報」についても同様である。「命令」「応答」「要求」等の処理は、「命令」「応答」「要求」等を示す情報を通信することにより行われる。また、「命令」「応答」「要求」等の文言を、「命令」「応答」「要求」等を示す情報そのものという意味で記載してもよい。
また、制御プログラム27に記述された命令に従ったCPU21の処理を、省略した文言で記載することがある。例えば、「CPU21が行う」「コントローラ11が行う」「制御プログラム27が行う」のように記載することがある。
また、CPU21による、情報Aは事柄Bであることを示しているか否かを判断する処理を、「情報Aから、事柄Bであるか否かを判断する」のように概念的に記載することがある。CPU21による、情報Aが事柄Bであることを示しているか、事柄Cであるかを示しているかを判断する処理を、「情報Aから、事柄Bであるか事柄Cであるかを判断する」のように概念的に記載することがある。
また、本明細書中の「データ」と「情報」とは、コンピュータによって取り扱い可能なビット或いはビット列である点において共通する。「データ」とは、各ビットが示す意味内容をコンピュータが考慮することなく取り扱えるものを指す。これに対して、「情報」とは、各ビットが示す意味内容によってコンピュータの動作が分岐するものを指す。さらに、「指示」は、送信先の装置に対して次の動作を促すための制御信号であって、情報を含んでいることもあるし、それ自体が情報としての性質を有していることもある。
また、「データ」及び「情報」は、形式(例えば、テキスト形式、バイナリ形式、フラグ形式等)がコンピュータ毎に変更されたとしても、同一の意味内容と認識される限り、同一のデータ及び情報として取り扱われる。例えば、「2つ」であることを示す情報が、あるコンピュータではASCIIコードで”0x32”というテキスト形式の情報として保持され、別のコンピュータでは二進数表記で”10”というバイナリ形式の情報として保持されてもよい。
但し、上記の「データ」及び「情報」の区別は厳密なものではなく、例外的な取り扱いも許容される。例えば、データが一時的に情報として扱われてもよいし、情報が一時的にデータとして扱われてもよい。また、ある装置ではデータとして扱われるものが、他の装置では情報として扱われてもよい。さらには、データの中から情報が取り出されてもよいし、情報の中からデータが取り出されてもよい。
また、本明細書中の「に応じて」は、当該文字列の前に記載された条件が満たされた場合に、当該文字列の後に記載された処理が実行されることを示す。なお、処理が実行されるタイミングは、条件が満たされた後であればよく、当該条件が満たされた直後である必要は必ずしもない。
なお、図2において破線で示されたステップS25については、変形例6において説明する。
受付モジュール52は、図2に示されるように、情報処理装置から、ドキュメント情報、ページヘッダ情報、及び圧縮データを含む圧縮画像データ(図6)の入力を受け付ける(S10)。ステップS10の処理は、受付処理の一例である。
ドキュメント情報、ページヘッダ情報、及び圧縮データは、1つのまとまったデータである。図5に示される例では、圧縮画像データは、ドキュメント情報、第1ページヘッダ情報、第1ページ画像の圧縮データ、第2ページヘッダ情報、第2ページ画像の圧縮データ、第3ページヘッダ情報、及び第3ページ画像の圧縮データを有する。
ドキュメント情報は、データの種類を判定するためのコマンドなどである。ページヘッダ情報は、印刷設定や解像度を含む情報である。印刷設定は、A4やA5などのシートのサイズを示す情報や、普通紙や光沢紙などのシートの種類を示す情報や、片面印刷や両面印刷などの印刷面を示す情報や、モノクロ印刷やカラー印刷などの印刷色を示す情報などである。解像度は、ページの縦方向における画素数及び横方向における画素数を示す情報である。解像度は、例えば、400(横)×400(縦)や、600(横)×600(縦)である。
受付モジュール52は、図2に示されるように、受け付けた圧縮画像データをメモリ22のRAM25に記憶させる(S11)。ステップS11の処理は、第1記憶処理の一例である。
解析モジュール53は、圧縮画像データがRAM25に記憶されたか否かを判断する(S12)。解析モジュール53は、例えば、圧縮画像データが記憶されるRAM25の所定の領域を監視することにより(S12:No)、圧縮画像データがRAM25に記憶されたか否かを判断する。
解析モジュール53は、圧縮画像データがRAM25に記憶されたと判断すると(S12:Yes)、印刷ジョブをジョブ管理モジュール54に登録する(S13)。そして、解析モジュール53は、圧縮画像データに含まれるドキュメント情報を読み込んで取得する。解析モジュール53は、取得したドキュメント情報に含まれる印刷設定を含むジョブ情報をジョブ管理モジュール54に通知する(S14)。
次に、解析モジュール53は、圧縮画像データに含まれるページの情報(以下、ページ情報と記載する)を取得する解析処理を実行する(S15)。ページ情報は、ジョブ管理モジュール54にページジョブを登録するために必要である。ステップS15の解析処理は、第1特定処理及び特定処理の一例である。
ページ情報とは、圧縮画像データに含まれる第1ページや第2ページや第3ページ等を特定する情報である。ページ情報は、例えば、圧縮画像データが有する複数の単位データにおいて、各ページの最後の画素を示す単位データを特定する情報である。例えば、圧縮画像データにおける1バイトから300バイトまでが第1ページを示し、301バイトから500バイトまでが第2ページを示し、501バイトから800バイトまでが第3ページを示す場合、例えば「300」、「500」、「800」がページ情報となる。なお、ページ情報は、圧縮画像データにおける「300」や「500」や「800」などのデータサイズに限定されるものではなく、各ページを特定可能であれば、他の情報やデータであってもよい。
なお、圧縮画像データに含まれるページの総数や、上述のページ情報は、圧縮画像データのドキュメント情報には含まれていない。また、解析モジュール53は、解析処理において、圧縮画像データの全体の解凍によって生成される画像データ全てを保持する必要なく、ページ情報を取得する。すなわち、圧縮画像データの全体の解凍で得られる画像データすべてを記憶可能なほど大容量のRAMを必要としない。以下、図3を参照して、解析処理について詳しく説明する。
以下では、図6(A)に示す画像を有するページの圧縮画像データを解析する場合を例にして、解析処理を説明する。画像の解像度は、8(横)×10(縦)である。すなわち、横方向における画素数が「8」で、縦方向における画素数が「10」である。横方向に並ぶ8個の画素で1つの列が構成され、縦方向に10個の列が並んでいる。各列を、上から順に第1列、第2列、第3列、第4列、第5列、第6列、第7列、第8列、第9列、第10列と記載して説明する。
また、以下では、画像データが、packbitsの圧縮方法で圧縮された圧縮画像データである場合について説明する。なお、図3において破線で示されたステップS31、S32については、変形例2において説明する。
図3に示されるように、解析モジュール53は、解析データサイズKを初期値のゼロにする(S33)。解析データサイズKは、読み込んで解析が終了した単位データの数を示す。
次に、解析モジュール53は、圧縮画像データを読み込んでドキュメント情報を取得し、ドキュメント情報に含まれる解像度を取得する(S34)。そして、解析モジュール53は、取得した解像度に基づいて、縦値B及び横値Cを決定する(S35)。縦値Bは、解像度が示す縦方向の画素数であり、横値Cは、解像度が示す横方向の画素数である。図6(A)に示す例では、縦値Bは「10」であり、横値Cは「8」である。解析モジュール53がドキュメント情報を取得するステップS34の処理は、取得処理の一例である。縦値Bは、第1閾値の一例である。解析モジュール53が縦値Bを決定するステップS35の処理は、閾値決定処理の一例である。
次に、解析モジュール53は、解析高さDを初期値のゼロにする(S36)。解析高さDは、解析が終了した解析データサイズKが示す総画素数が示す縦方向における画素の数を示す。すなわち、解析高さDは、ページの何列目まで解析したかを示す値である。解析が終了した解析データサイズKが示す総画素は、カウント値の一例である。
解析モジュール53は、解析高さDが縦値B未満か否かを判断する(S37)。図6(A)に示す例では、解析モジュール53は、解析高さDが縦値B=10に達して、第10列まで解析が終了したか否かを判断する。すなわち、ステップS24では、1ページ分の解析が終了したか否かを判断する。
解析モジュール53は、解析高さDが縦値B未満であると判断したことに応じて(S37:Yes)、すなわち、1ページ分の解析が終了していないと判断したことに応じて、次の列以降の解析を開始する。
具体的には、解析モジュール53は、未だ解析していない単位データを読み込む(S38)。そして、読み込んだ単位データから、連続ライン数Eを決定する(S39)。図6(A)に示す例では、第4列と第5列と第6列とが同内容の画素で構成されおり、第8列と第9列とが同内容の画素で構成されている。解析モジュール53は、連続ライン数E=1やE=2やE=3を決定する。
解析モジュール53は、決定したライン数Eを解析高さDに加算する(S40)。例えば、連続ライン数E=3である場合、解析高さDに「3」を加える。また、解析モジュール53は、単位データを読み込んだことに応じて、解析データサイズKに「1」を加える(S41)。
次に、解析モジュール53は、解析幅Fを初期値のゼロにする(S42)。解析幅Fは、解析する単位データが示す横方向における画素数を示す。解析モジュール53は、解析幅Fが横値C未満であるか否かを判断する(S43)。すなわち、ステップS43では、解析する単位データが示す画素が図6(A)における右端の画素まで到達したか否かが判断される。
解析モジュール53は、解析幅Fが横値C以上であると判断すると(S43:No)、ステップS37以降の処理を実行する。解析モジュール53は、解析幅Fが横値C未満であると判断すると(S43:Yes)、単位データを読み込んで、読み込んだ単位データのデータ長を取得する(S44)。データ長は、同じ色の画素が続くこと、及び、異なる色の画素が続くことを示す。また、解析モジュール53は、単位データを読み込んだことに応じて、解析データサイズKに「1」を加える(S45)。
解析モジュール53は、ステップS44で取得したデータ長が指定値未満であるか否かを判断する(S46)。すなわち、ステップS46では、同じ色の画素が続くか、異なる色の画素が続くかが判断される。具体的には、解析モジュール53は、単位データが8ビットである場合、データ長が指定値である128未満であるか否かを判断する。指定値は、メモリ22のROM24やEEPROMに予め記憶される。
解析モジュール53は、ステップS44で取得したデータ長が指定値未満であって、同じ色の画素が続くと判断すると(S46:Yes)、ステップS44で取得したデータ長が示す同じ色の画素の数に応じた数だけ単位データを読み込む(S47)。そして、解析モジュール53は、読み込んだ単位データの数だけ解析データサイズKを加算する(S48)。また、解析モジュール53は、ステップS44で取得したデータ長が示す同じ色の画素の数だけ解析幅Fを加算する(S49)。
一方、解析モジュール53は、ステップS44で取得したデータ長が指定値以上であって、異なる色の画素が続くと判断すると(S46:No)、ステップS44で取得したデータ長が示す異なる色の画素の数に応じた数だけ単位データを読み込む(S50)。そして、解析モジュール53は、読み込んだ単位データの数だけ解析データサイズKを加算する(S51)。また、解析モジュール53は、ステップS44で取得したデータ長が示す異なる色の画素の数だけ解析幅Fを加算する(S52)。
解析モジュール53は、ステップS49、S52の処理の実行後、ステップS43以降の処理を再度実行する。
解析モジュール53は、ステップS37において、解析高さDが縦値B以上であって、読み込んだ単位データが示す画素数が1ページ分の総画素数に到達したと判断すると(S37:No)、読み込んだ単位データの総数を示す解析データサイズKをメモリ22のRAM25或いはEEPROMに保存する(S53)。図5に示す例では、解析モジュール53は、第1ページの最後の画素を示す単位データまでの第1解析データサイズKと、第2ページの最後の画素を示す単位データまでの第2解析データサイズKと、第3ページの最後の画素を示す単位データまでの第3解析データサイズKと、をメモリ22に記憶させる。解析データサイズKをメモリ22に記憶させるステップS53の処理は、第2記憶処理の一例である。
次に、解析モジュール53は、圧縮画像データが、未だ読み込んでいない単位データを有するか否かを判断する(S54)。すなわち、ステップS54では、圧縮画像データが次のページを有するか否かが判断される。
解析モジュール53は、次のページがあると判断すると(S54:Yes)、ステップS36以降の処理を再度実行する。解析モジュール53は、次のページがないと判断すると(S54:No)、解析処理を終了する。
解析モジュール53は、図2に示されるように、解析処理(S15)の終了後、発見したページの数だけページジョブをジョブ管理モジュール54に要録する(S16)。なお、解析モジュール53は、解析処理において、ページを発見するごとに、ページジョブをジョブ管理モジュール54に登録してもよい。
また、解析モジュール53は、登録したページジョブのページ情報をジョブ管理モジュール54に通知する(S17)。ページ情報は、解析処理のステップS53で保存した解析データサイズKなどである。
ジョブ管理モジュール54は、解析モジュール53によってページジョブが登録されたことに応じて、メモリ22のRAM25に、印刷キューを記憶させる(S18)。すなわち、ジョブ管理モジュール54は、印刷キューを生成する。そして、ジョブ管理モジュール54は、生成した順に印刷キューの処理を開始する(S18)。すなわち、登録されたページジョブを順に処理する。以下、詳しく説明する。
まず、ジョブ管理モジュール54は、第1ページなど一のページの印刷データを圧縮画像データから生成する印刷データ生成処理を実行する(S19)。図4を参照して印刷データ生成処理について詳しく説明する。なお、以下では、第1ページの印刷データを生成する場合を例として説明する。また、図4において破線で示されたステップS70については、変形例6において説明する。
ジョブ管理モジュール54は、分割指示コマンドを分割モジュール55に入力する(S61)。分割指示コマンドは、メモリ22のRAM25に記憶された圧縮画像データを分割して第1ページの部分圧縮データを生成し、生成した第1ページの部分圧縮データをRAM25に記憶させることを指示するコマンドである。分割指示コマンドは、ステップS17で解析モジュール53から通知されたページ情報に含まれる上述の第1解析データサイズKと、RAM25の記憶領域を指定する領域指定情報とを付帯する。
分割モジュール55は、分割指示コマンドを受け付けると(S61)、分割処理を実行する(S62)。詳しく説明すると、分割モジュール55は、圧縮画像データをメモリ22のRAM25から読み出す。そして、分割モジュール55は、第1解析データサイズKを用いて、図5に示されるように、第1ページ画像の圧縮データと第2ページヘッダ情報との間で圧縮画像データを分割し、第1ページの部分圧縮データとその余のデータとを生成する。そして、分割モジュール55は、生成した第1ページの部分圧縮データを、ジョブ管理モジュール54に指定されたRAM25の記憶領域に記憶させる(S63)。その余のデータは、メモリ22に記憶されることなく、破棄される。
なお、ジョブ管理モジュール54は、第2ページに対するページジョブ処理を実行する場合、例えば、第1解析データサイズK及び第2解析データサイズKと、RAM25の記憶領域を指定する領域指定情報とを付帯する分割指示コマンドを分割モジュール55に入力する。分割モジュール55は、第1解析データサイズK及び第2解析データサイズKを用いて、図5に示されるように、第1ページ画像の圧縮データと第2ページヘッダ情報との間、及び、第2ページ画像の圧縮データと第3ページヘッダ情報との間で圧縮画像データを分割し、さらに、ドキュメント情報を付加して、第2ページの部分圧縮データと、その余のデータとを生成する。ジョブ管理モジュール54は、生成した第2ページの部分圧縮データをメモリ22のRAM25の所定の記憶領域に記憶させる(S63)。その余のデータは、メモリ22に記憶されることなく、破棄される。
ジョブ管理モジュール54は、第3ページに対するページジョブ処理を実行する場合、例えば、第2解析データサイズK及び第3解析データサイズKと、RAM25の記憶領域を指定する領域指定情報とを付帯する分割指示コマンドを分割モジュール55に入力する。分割モジュール55は、第2解析データサイズK及び第3解析データサイズKを用いて、図6に示されるように、第2ページ画像の圧縮データと第3ページヘッダ情報との間で圧縮画像データを分割し、さらに、ドキュメント情報を付加して、第3ページの部分圧縮データと、その余のデータとを生成する。ジョブ管理モジュール54は、生成した第3ページの部分圧縮データをメモリ22のRAM25の所定の記憶領域に記憶させる(S63)。その余のデータは、メモリ22に記憶されることなく、破棄される。
分割モジュール55が、第1ページや第2ページや第3ページの部分圧縮データをメモリ22に記憶させるステップS63の処理は、第2記憶処理の一例である。
ジョブ管理モジュール54は、分割指示コマンドを分割モジュール55に入力した後、分割モジュール55が分割処理及び記憶処理(S63)を実行したか否かを判断する。例えば、ジョブ管理モジュール54は、分割指示コマンドで指示したRAM25の記憶領域をポーリングなどを用いて監視し、当該記憶領域に部分圧縮データが記憶されたことにより、分割処理及び記憶処理が実行されたと判断する。或いは、ジョブ管理モジュール54は、分割処理を実行した分割モジュール55から、分割指示コマンドに対する応答を受け付けたことにより、分割処理及び記憶処理が実行されたと判断する。
ジョブ管理モジュール54は、分割処理及び記憶処理が実行されたと判断すると、解凍を行うことを指示する解凍指示コマンドを解凍モジュール56に入力する(S64)。解凍指示コマンドは、部分圧縮データが記憶されたRAM25の記憶領域と、解凍後の解凍ページデータを記憶するRAM25の記憶領域と、を示す領域指定情報を付帯する。
解凍モジュール56は、解凍指示コマンドを受け付けると(S64)、解凍処理を実行する(S65)。詳しく説明すると、解凍モジュール56は、部分圧縮データをメモリ22のRAM25から読み出す。そして、解凍モジュール56は、RAM25から読み出した部分圧縮データを解凍して解凍ページデータを生成する。解凍モジュール56は、解凍ページデータを、ジョブ管理モジュール54に指定されたRAM25の記憶領域に記憶させる(S66)。
なお、ジョブ管理モジュール54は、分割処理が実行されたか否かを判断することなく解凍指示コマンドを出力してもよい。その場合、解凍指示コマンドを受け付けた解凍モジュール56は、ポーリングなどによって、メモリ22のRAM25に部分圧縮データが記憶されたか否かを監視し、部分圧縮データがRAM25に記憶されたことに応じて、解凍処理(S65)を実行する。
ジョブ管理モジュール54は、解凍指示コマンドを解凍モジュール56に入力した後、解凍モジュール56が解凍処理及び記憶処理(S66)を実行したか否かを判断する。例えば、ジョブ管理モジュール54は、解凍指示コマンドで指示したRAM25の記憶領域をポーリングなどを用いて監視し、当該記憶領域に解凍ページデータが記憶されたことにより、解凍処理及び記憶処理が実行されたと判断する。或いは、ジョブ管理モジュール54は、解凍処理を実行した解凍モジュール56から、解凍指示コマンドに対する応答を受け付けたことにより、解凍処理及び記憶処理が実行されたと判断する。
ジョブ管理モジュール54は、解凍処理及び記憶処理が実行されたと判断すると、変換指示コマンドを変換モジュール57に入力する(S67)。変換指示コマンドは、解凍ページデータが記憶されたRAM25の記憶領域と、印刷データを記憶するRAM25の記憶領域と、を示す領域指定情報を付帯する。
変換モジュール57は、変換指示コマンドを受け付けると(S67)、変換処理を実行する(S68)。詳しく説明すると、変換モジュール57は、解凍ページデータをメモリ22のRAM25から読み出す。そして、変換モジュール57は、RAM25から読み出した解凍ページデータに、回転や色変換や誤差拡散や5値化の変換を行って、1ページ分の印刷データを生成する。そして、変換モジュール57は、生成した1ページ分の印刷データを、ジョブ管理モジュール54に指定されたRAM25の記憶領域に記憶させる(S69)。変換モジュール57が、解凍ページデータを変換して印刷データを生成するステップS68の処理は、第1生成処理及び生成処理の一例である。
なお、ジョブ管理モジュール54は、解凍処理が実行されたか否かを判断することなく変換指示コマンドを出力してもよい。その場合、変換指示コマンドを受け付けた変換モジュール57は、ポーリングなどによって、メモリ22のRAM25に解凍ページデータが記憶されているか否かを監視し、解凍ページデータがRAM25に記憶されたことに応じて、変換処理(S68)を実行する。
ジョブ管理モジュール54は、変換指示コマンドを変換モジュール57に入力した後、変換モジュール57が変換処理及び記憶処理(S69)を実行したか否かを判断する。例えば、ジョブ管理モジュール54は、変換指示コマンドで指示したRAM25の記憶領域をポーリングなどを用いて監視し、当該記憶領域に印刷データが記憶されたことにより、変換処理及び記憶処理が実行されたと判断する。或いは、ジョブ管理モジュール54は、変換処理及び記憶処理を実行した変換モジュール57から、変換指示コマンドに対する応答を受け付けたことにより、変換処理及び記憶処理が実行されたと判断する。
ジョブ管理モジュール54は、変換処理及び記憶処理が実行されたと判断すると、図2に示されるように、印刷データを駆動回路35及び駆動モータ36に出力する印刷データ出力処理を実行する(S20)。具体的には、ジョブ管理モジュール54は、変換処理及び記憶処理が実行されたと判断すると、出力指示コマンドを印刷制御モジュール58に入力する。出力指示コマンドは、印刷データが記憶されたRAM25の記憶領域を示す領域指定情報を付帯する。
印刷制御モジュール58は、出力指示コマンドを受け付けると、印刷データをメモリ22のRAM25から読み出す。そして、印刷制御モジュール58は、RAM25から読み出した印刷データを、駆動回路35及び駆動モータ36に対して出力する。ステップS20の処理は、第1出力処理及び出力処理の一例である。
印刷データを受け付けた印刷エンジン15は、シートに画像を印刷する(S21)。
また、ジョブ管理モジュール54は、印刷エンジン15がシートに第1ページの画像を印刷したことに応じて、第1ページのページジョブを終了させる(S22)。そして、ジョブ管理モジュール54は、未処理のページジョブがメモリ22に記憶されているか否かを判断する(S23)。すなわち、ステップS23では、印刷すべきページがあるか否かが判断される。
ジョブ管理モジュール54は、未処理のページジョブがメモリ22に記憶されていると判断すると(S23:Yes)、ステップS18以降の処理を再度実行し、第2ページや第3ページの印刷データを生成して印刷エンジン15に出力する。
なお、フローチャートには示されていないが、ジョブ管理モジュール54は、印刷エンジン15が1ページの印刷を終了したことに応じて、印刷を終了したページの印刷キューをメモリ22から削除する。
ジョブ管理モジュール54は、ステップS23において、未処理のページジョブがないと判断すると(S23:No)、印刷ジョブを終了させて(S24)、処理を終了する。
[実施形態の作用効果]
コントローラ11は、一の部分圧縮データを解凍し(S65)、解凍によって得られた解凍ページデータに基づいて、1ページ分の印刷データを生成し(S68)、生成した1ページ分の印刷データを出力する(S20)。そして、コントローラは、1ページ分の印刷データの生成と出力とを繰り返す(S23:Yes)。したがって、解凍された複数ページの画像データ全体を処理することができるだけの容量を有さないメモリ22を備えたプリンタ10であっても、複数ページを含む圧縮画像データの印刷を行うことができる。或いは、プリンタ10が備えるメモリ22のRAM25の容量を低減することができる。
本実施形態では、解析高さDが縦値B以上であることに応じて、ページの最後の画素を示す単位データを特定する解析データサイズKがメモリ22に記憶され、メモリ22に記憶された解析データサイズKを用いて、圧縮画像データが部分圧縮データに分割される。したがって、圧縮画像データを解凍することなく、ページの区切りとなる単位データを特定して、圧縮画像データを部分圧縮データに分割することができる。
[変形例1]
上述の実施形態では、圧縮画像データが、ジョブ管理モジュール54の分割モジュール55によって分割される例を説明した。しかしながら、圧縮画像データは、解析モジュール53において分割されてもよい。この場合、分割モジュール55は、ジョブ管理モジュール54に設けられない。解析モジュール53は、ステップS15(図2)の解析処理の実行後、ステップS62の分割処理(図4)を実行し、第1ページの部分圧縮データ、第2ページの部分圧縮データ、及び第3ページの部分圧縮データをメモリ22のRAM25に記憶させる。具体的には、解析モジュール53は、アプリケーション51がRAM25に確保した第1記憶領域に第1ページの部分圧縮データを記憶させ、アプリケーション51がRAM25に確保した第2記憶領域に第2ページの部分圧縮データを記憶させ、アプリケーション51がRAM25に確保した第3記憶領域に第3ページの部分圧縮データを記憶させる。ジョブ管理モジュール54は、第1記憶領域に記憶された部分圧縮データを第1ページの部分圧縮データとして取り扱い、第2記憶領域に記憶された部分圧縮データを第2ページの部分圧縮データとして取り扱い、第3記憶領域に記憶された部分圧縮データを第3ページの部分圧縮データとして取り扱う。すなわち、ジョブ管理モジュール54は、部分圧縮データが記憶されている記憶領域によって、部分圧縮データがいずれのページの部分圧縮データであるかを判断する。解析モジュール53が、第1ページの部分圧縮データを第1記憶領域に記憶させ、第2ページの部分圧縮データを第2記憶領域に記憶させ、第3ページの部分圧縮データを第3記憶領域に記憶させる処理は、第2記憶処理の一例である。
このように、解析モジュール53において圧縮画像データを複数の部分圧縮データに分割する場合、第1ページの部分圧縮データ、第2ページの部分圧縮データ、及び第3ページの部分圧縮データを記憶するだけの容量のRAM25が必要になる。すなわち、第1ページの部分圧縮データと、第2ページの部分圧縮データと、第3ページの部分圧縮データとを個々に記憶するだけの容量のRAM25があればよい上述の実施形態に比べ、大きな容量のRAM25が必要になる。しかしながら、上述の実施形態では、第1ページの部分圧縮データを生成するための分割処理、第2ページの部分圧縮データを生成するための分割処理、及び第3ページの部分圧縮データを生成するための分割処理の3回の分割処理の実行が必要であるのに対し、圧縮画像データを解析モジュール53において分割する場合、1回の分割処理で全ての部分圧縮データを生成することができる。すなわち、圧縮画像データを解析モジュール53において分割する場合、実施形態に比べ大きな容量のRAM25が必要になるが、印刷データの生成に要する時間をさらに短くすることができる。
[変形例2]
図3に示されるように、解析モジュール53は、圧縮画像データのデータ量が、メモリ22に記憶された基準値未満であるか否かを判断する(S31)。基準値は、例えば、圧縮画像データを分割して部分圧縮データを生成しても、生成した部分圧縮画像データから印刷データを生成する処理を実行できないほど、部分圧縮データのデータ量が大きいか否かを判断する値であって、メモリ22のRAM25の容量に応じて、メモリ22のROM24やEEPROMに予め記憶される値である。基準値は、第2閾値の一例である。ステップS31の処理は、データ量判断処理の一例である。
解析モジュール53は、圧縮画像データのデータ量が、基準値未満であると判断すると(S31:Yes)、ステップS33以降の処理を実行する。
解析モジュール53は、圧縮画像データのデータ量が、基準値未満でないと判断すると(S31:No)、圧縮画像データを解凍しつつ、圧縮画像データが示す画像を縮小し、解凍及び縮小した解凍縮小データをメモリ22のRAM25に記憶させ(S32)、解析処理を終了する。圧縮画像データの縮小は、例えば、画像を示す画素を間引くことによって行われる。縮小率は、例えば、予め決められてメモリ22に記憶され、或いは、圧縮画像データのデータ量によって、解析モジュール53が決定する。ステップS32の処理は、縮小ページデータ取得処理の一例である。解凍縮小データは、縮小ページデータの一例である。
図2のフローチャートには示されていないが、ジョブ管理モジュール54は、ステップS32の処理を実行した場合、ステップS17の処理をスキップし、ステップS18において、第1ページの解凍縮小データを、変換モジュール57を用いて回転変換や色変換や誤差拡散や5値化を行った後、拡大させて、第1ページの印刷データを生成する。そして、生成した第1ページの印刷データを印刷エンジン15に対して出力する(S20)。ジョブ管理モジュール54が、解凍縮小データに変換及び拡大を行って第1ページの印刷データを生成する処理は、第2生成処理の一例である。第2生成処理で生成した第1ページの印刷データを出力するステップS20の処理は、第2出力処理の一例である。
ジョブ管理モジュール54は、第2ページや第3ページなど、印刷データを生成していないページがあると判断すると(S23:Yes)、第1ページと同様にして、第2ページの印刷データや第3ページの印刷データを生成し、生成した印刷データを順に出力する(S20)。すなわち、圧縮画像データに含まれるページ数分だけ、解凍縮小データから各ページの印刷データを生成する第2生成処理及び生成した印刷データを出力する第2出力処理が繰り返し実行される。
本変形例では、圧縮画像データのデータサイズが、圧縮画像データを分割して各ページごとの部分圧縮データを生成しても、生成した部分圧縮画像データから印刷データを生成する処理を実行できないほど大きい場合であっても、圧縮画像データが示す画像をシートに印刷することができる。
なお、ステップS31の処理は、ジョブ管理モジュール54が実行してもよい。その場合、解析モジュール53は、実施形態と同様に解析処理を実行し、発見した各ページをジョブ管理モジュール54にそれぞれ登録する。ジョブ管理モジュール54は、圧縮画像データのデータ量が基準値未満でないと判断すると、分割指示コマンド(S61)に代えて、ステップS32の処理の実行を分割モジュール55に指示する。分割モジュール55は、ジョブ管理モジュール54からの指示にしたがって、ステップS32の処理を実行して解凍縮小データを生成し、生成した解凍縮小データをメモリ22に記憶させる。
[変形例3]
上述の変形例2では、圧縮画像データのデータ量が、メモリ22に記憶された基準値未満である場合に、ステップS32の処理が実行されて解凍縮小データが生成される例を説明した。しかしながら、上述の実施形態或いは変形例2において、解析処理のステップS53で解析データサイズKをメモリ22に記憶させることができなかったことに応じて、ステップS32の処理が実行されてもよい。
[変形例4]
本変形例では、画像の印刷に認証情報の入力が必要な、いわゆるセキュアプリントについて説明する。
ステップS11で受付モジュール52が取得する圧縮画像データは、認証情報、及び認証情報の入力が必要であるか否かを示す確認情報を含む。アプリケーション51は、確認情報に基づいて、受付モジュール52が取得した圧縮画像データが、認証情報の入力が必要な圧縮画像データであるか否かを判断する。アプリケーション51は、受付モジュール52が取得した圧縮画像データが、認証情報の入力が必要な圧縮画像データでないと判断すると、実施形態と同様にしてジョブ管理モジュール54に印刷データを生成させ、生成された印刷データを印刷エンジン15に出力してシートに画像を印刷させる。
アプリケーション51は、受付モジュール52が取得した圧縮画像データが、認証情報の入力が必要な圧縮画像データであると判断すると、実施形態と同様にしてジョブ管理モジュール54に印刷データを生成させる。そして、アプリケーション51は、生成された印刷データをメモリ22に記憶させて、認証情報の入力を待つ。認証情報は、出力指示の一例である。アプリケーション51が、生成された印刷データをメモリ22に記憶させて、認証情報の入力を待つ処理は、待機処理の一例である。
認証情報は、例えば、ユーザによって設定されたPINである。認証情報は、例えば、情報処理装置からプリンタ10に入力される。或いは、認証情報は、ディスプレイ13に設けられたタッチセンサや、操作スイッチ14によって、プリンタ10に直接入力される。
アプリケーション51は、認証情報が入力されると、入力された認証情報である入力認証情報と、圧縮画像データに含まれる認証情報とが一致するか否かを判断する。アプリケーション51は、入力認証情報と、圧縮画像データに含まれる認証情報とが一致しないと判断すると、一致しない旨を示す画像をディスプレイ13に表示させ、或いは、一致しない旨を示す画像を、通信I/F12を通じて情報処理装置に送信する。
アプリケーション51は、入力認証情報と、圧縮画像データに含まれる認証情報とが一致すると判断すると、ジョブ管理モジュール54に指示を入力し、メモリ22に記憶された印刷データを印刷エンジン15に対して出力させる。
本変形例のプリンタ10は、いわゆるセキュアプリントにおいても、圧縮画像データが示す画像をシートに印刷することができる。
なお、本変形例では、いわゆるセキュアプリントを、蓄積印刷の例として説明した。しかしながら、蓄積印刷は、認証情報などの出力指示の入力を必要とする印刷であれば、他の印刷であってもよい。
[変形例5]
本変形例では、制御プログラム27が、図6(B)に示されるリプリント処理を実行する例を説明する。リプリント処理は、印刷エンジン15において、シートの詰まりなどが生じた場合に、制御プログラム27が印刷データを印刷エンジン15に対して再度出力して、詰まりが生じたシートに印刷される予定であった画像を、新たなシートに印刷させる処理である。
ジョブ管理モジュール54は、ステップS20(図2)において、印刷データを印刷エンジン15に対して出力した後、出力した印刷データが示す画像がシートに印刷されたか否かを判断する(S71)。例えば、ジョブ管理モジュール54は、搬送ローラ33に設けられたロータリエンコーダから入力された検出信号によって、搬送ローラ33の回転量を算出し、算出した搬送ローラ33の回転量が示すシートの搬送量が、1ページ分の搬送量に到達したことに応じて、出力した印刷データが示す画像がシートに印刷されたと判断する(S71:Yes)。なお、出力した印刷データが示す画像がシートに印刷されたか否かを判断可能であれば、ジョブ管理モジュール54は、どのような方法を用いて判断してもよい。ステップS71の処理は、終了判断処理の一例である。
ジョブ管理モジュール54は、出力した印刷データが示す1ページ分の画像がシートに印刷されたと判断すると(S71:Yes)、出力した印刷データであって、メモリ22に記憶された印刷データの上書きを許可し(S76)、リプリント処理を終了する。
一方、ジョブ管理モジュール54は、出力した印刷データが示す1ページ分の画像を印刷エンジン15が印刷中であると判断すると(S71:No)、出力した印刷データであって、メモリ22に記憶された印刷データの上書きを禁止する(S72)。すなわち、印刷エンジン15に対して出力された1ページ分の印刷データは、印刷データが示す画像がシートに印刷されるまでは、メモリ22において上書きされない。
次に、ジョブ管理モジュール54は、エラーが発生したか否かを判断する(S73)。例えば、ジョブ管理モジュール54は、算出した搬送ローラ33の回転量が示すシートの搬送量が、印刷データが示す予定の搬送量と一致しないことに応じて、シートの詰まりを示すエラーが発生したと判断する。或いは、ジョブ管理モジュール54は、センサから所定の検出信号が入力したことに応じて、エラーが発生したと判断する。センサは、例えば、印刷エンジン15を覆うカバーの開閉を検出する開閉センサや、給紙トレイの着脱を検出する着脱センサや、搬送されるシートを検出するシートセンサなどである。開閉センサが出力する信号の値は、カバーの開閉に応じて変化する。着脱センサが出力する信号の値は、給紙トレイがプリンタ10に装着されている場合と、給紙トレイがプリンタ10から外されている場合とで、変化する。シートセンサが出力する信号の値は、シートが搬送されている場合と、シートが搬送されていない場合とで、変化する。ジョブ管理モジュール54は、センサから入力した信号の変化により、閉じられていたカバーが開かれたと判断すると、或いは、装着されていた給紙トレイがプリンタ10から外されたと判断すると、さらに或いは、給紙トレイにシートがなく、シートが搬送されていないと判断すると、印刷を続行できないエラーが発生したと判断する。なお、エラーの例は、上述の例に限られない。印刷を続行できないようなエラーであれば、どのようなエラーであってもよい。
ジョブ管理モジュール54は、印刷エンジン15が印刷データに対する印刷を実行中である間(S71:No)、エラーの発生を監視する(S73:No)。
ジョブ管理モジュール54は、エラーが発生したと判断すると(S73:Yes)、エラーが解消したか否かを判断する(S74)。例えば、ジョブ管理モジュール54は、ユーザが上述のカバーを開いて、詰まったシートを印刷エンジン15から除去した後、カバーを閉じたことにより、エラーが解消したと判断する。具体的には、ジョブ管理モジュール54は、上述の開閉センサが出力する信号の変化により、カバーが開かれたことを検出した後、開閉センサが出力する信号の変化により、カバーが閉じられたことを検出すると、エラーが解消したと判断する(S74:Yes)。
或いは、ジョブ管理モジュール54は、給紙トレイがプリンタ10から外されて、ユーザによって給紙トレイに新たなシートが給紙トレイに追加された後、給紙トレイがプリンタ10に装着されたことにより、エラーが解消したと判断する。具体的には、ジョブ管理モジュール54は、上述の着脱センサが出力する信号の変化により、給紙トレイがプリンタから外されたことを検出した後、着脱センサが出力する信号の変化により、給紙トレイがプリンタ10に装着されたことを検出すると、エラーが解消したと判断する(S74:Yes)。
さらに或いは、ジョブ管理モジュール54は、ディスプレイ13のタッチセンサや、操作スイッチ14によって、印刷再開を示す指示の入力を受け付けたことに応じて、エラーが解消したと判断する(S74:Yes)。エラーが解消したことを示すセンサからの信号や、印刷再開を示す指示は、再開可能入力の一例である。エラーが解消したことを示すセンサからの信号や、印刷再開を示す指示を受け付けるステップS74の処理は、再開可能入力受付処理の一例である。
ジョブ管理モジュール54は、エラーが解消するまで、ステップS74の処理を実行する(S74:No)。ジョブ管理モジュール54は、エラーが解消したと判断すると(S74:Yes)、再出力処理を実行する(S75)。再出力処理は、メモリ22に記憶された1ページ分の印刷データを印刷エンジン15に再度出力する処理である。
ジョブ管理モジュール54は、再出力処理(S75)の実行後、ステップS71以降の処理を再度実行する。
本変形例では、シートの詰まりやシートが無くなって印刷ができない等のエラーが発生した場合、分割処理、解凍処理、変換処理を再度実行することなく、1ページ分の印刷データを印刷エンジン15に対して即座に出力することができる。したがって、再出力処理において、印刷データが再度生成される場合に比べ、印刷に要する時間が短くなる。
[変形例6]
本変形例では、1ページ分の部分圧縮データを複数の分割部分圧縮データにさらに分割して印刷データを生成する例を説明する。本変形例は、例えば、圧縮画像データを各ページごとに分割しただけでは、印刷データを生成できない場合に実行される。例えば、解像度が高い場合に、本変形例が実行される。
各分割部分圧縮データは、図8(A)に示される分割画像をそれぞれ示す。図8(A)に示す例では、1ページ分の部分圧縮データが4つの分割部分圧縮データに分割されている。そして、4つの分割部分圧縮データは、第1分割画像、第2分割画像、第3分割画像、及び第4分割画像をそれぞれ示す。以下では、図6(A)に示される画像が、図8(A)に示されるように縦横に2分割される場合を例に説明する。具体的には、横8画素、縦10画素の解像度の画像が、等分に4つに分割される場合を説明する。分割画像は、部分画像の一例である。
フローチャートには示されていないが、解析モジュール53は、圧縮画像データから取得したドキュメント情報に含まれる解像度が、メモリ22に予め記憶された閾値以上であることに応じて、図3に示される解析処理に代えて、図7に示される解析処理を実行する。なお、図3に示される解析処理において説明した処理については、図3と同一の符号を付して説明を省略する。解像度は、圧縮画像データが示す値の一例である。解析モジュール53が、解像度が閾値以上であるか否かを判断する処理は、実行判断処理の一例である。
解析モジュール53は、図7に示すように、ステップS31からS35までの処理を実行する。そして、解析モジュール53は、縦値Bと、縦方向の分割数=2に基づいて、分割縦閾値Gを決定し、横値C及び横方向の分割数=2に基づいて、分割横閾値Hを決定する(S81)。具体的には、解析モジュール53は、縦値B=10を「2」で除した値である「5」を分割縦閾値Gとし、横値C=8を「2」で除した値である「4」を分割横閾値Hとして決定する。分割数は、メモリ22に予め記憶され、或いは、圧縮画像データのデータ量に基づいて、解析モジュール53或いはアプリケーション51が決定する。なお、画像を縦方向のみ、或いは、横方向にのみ分割する場合は、ステップS81において、分割縦閾値Gのみ、或いは、分割横閾値Hのみが決定される。
解析モジュール53は、解析高さDをゼロにした後(S36)、解析高さDが分割縦閾値G=5に到達したか否かを判断する(S82)。解析モジュール53は、解析高さDが分割縦閾値G=5に到達したと判断すると(S82:Yes)、読み込んだ単位データの個数を示す解析データサイズKをメモリ22に記憶させて保存する(S83)。すなわち、ステップS83では、縦方向における分割位置を示す単位データを特定する解析データサイズKがメモリ22に記憶される。
解析モジュール53は、解析高さDが分割縦閾値G=5に到達していない、或いは、解析高さDが分割閾値G=5に既に到達した後であると判断したことに応じて(S82:No)、ステップS83の処理をスキップし、解析高さDが縦値Bに到達したか否かを判断する(S84)。すなわち、ステップS84では、1ページ分の画像の解析が終了したか否かが判断される。
解析モジュール53は、解析高さDが縦値Bに到達したと判断すると(S84:Yes)、ステップS53、S54の処理を実行する。一方、解析モジュール53は、解析高さDが縦値Bに到達していないと判断すると(S84:No)、ステップS38からS42までの処理を実行する。
次に、解析モジュール53は、解析幅Fが分割横閾値H=4に到達したか否かを判断する(S85)。解析モジュール53は、解析幅Fが分割横閾値H=4に到達したと判断すると(S85:Yes)、解析データサイズKをメモリ22に記憶させて保存する(S86)。すなわち、ステップS86では、横方向における分割位置を示す単位データを特定する解析データサイズKがメモリ22に記憶される。
解析モジュール53は、解析幅Fが分割横閾値H=4に到達していない、或いは、解析幅Fが分割横閾値H=4に既に到達した後であると判断すると(S85:No)、ステップS86の処理をスキップし、解析幅Fが横値Cに到達したか否かを判断する(S87)。すなわち、ステップS87では、画像の右端まで解析が終了したか否かが判断される。
解析モジュール53は、解析幅Fが横値Cに到達したと判断すると(S87:Yes)、解析データサイズKをメモリ22に記憶させて保存し(S88)、ステップS82以降の処理を再度実行する。すなわち、ステップS88では、横方向における分割位置を示す単位データを特定する解析データサイズKがメモリ22に記憶される。
解析モジュール53は、解析幅Fが横値Cに到達していないと判断すると(S87:No)、ステップS44からS52までの処理を実行した後、ステップS85の処理を再度実行する。
解析モジュール53が解析データサイズをメモリ22に記憶させるステップS83、S86、S88の処理は、第2特定処理及び第3記憶処理の一例である。
ジョブ管理モジュール54は、ステップS19で説明した印刷データ生成処理(図4)に代えて、以下で説明する印刷データ生成処理を実行する。
ジョブ管理モジュール54は、実施形態で説明した分割指示(S61)に代えて、圧縮画像データを分割して分割部分圧縮データを生成する分割指示を分割モジュール55に対して行う。分割モジュール55は、実施形態で説明した分割処理(S62)に代えて、分割部分圧縮データを生成する分割処理を実行する。
詳しく説明すると、分割モジュール55は、圧縮画像データをメモリ22のRAM25から読み出す。そして、分割モジュール55は、解析データサイズKを用いて、第1分割画像を示す分割部分圧縮データである第1分割部分圧縮データと、その余のデータとに圧縮画像データを分割する。そして、その余のデータを破棄し、第1分割部分圧縮データをメモリ22のRAM25に記憶させる。
さらに詳しく説明する。図8(B)に示されるグレー表示の単位データは、解析データサイズKが示す単位データであって、分割位置の画素を示す単位データである。当該単位データは、複数の画素を示す。この複数の画素間の分割位置で第1分割画像と第2分割画像とに画像が分割される。分割位置は、図8(B)における一点鎖線で示されている。
分割モジュール55は、解析データサイズKが示す単位データが示す複数の画素であって、分割位置よりも図における左方の複数の画素からなる第1画素列と、分割位置よりも図における右方の複数の画素からなる第2画素列とのうち、いずれの画素列が第1分割画像に含まれるかを判断する。そして、第1分割画像に含まれる方の画素列を、圧縮画像データと同じ圧縮方法で圧縮し、第1単位データを生成する。そして、分割モジュール55は、生成した第1単位データを、解析データサイズKが示すグレー表示の単位データと置き換える。分割モジュール55は、第1単位データまでの複数の単位データ、或いは、第1単位データ以降の複数の単位データを、第1分割部分圧縮データに含める。なお、第2分割画像を示す第2分割部分圧縮データが生成される場合、第1単位データと同様にして、第2単位データが生成される。
分割モジュール55は、解析データサイズKが示す単位データにおいて第1分割画像とその他の分割画像とに画像が分割されると判断すると、第1単位データや第2単位データを生成することなく、解析データサイズKが示す単位データまでの単位データを第1分割部分圧縮データに含め、或いは、解析データサイズKが示す単位データ以降の単位データを第1分割部分圧縮データに含める。
なお、第1単位データや第2単位データを生成する方法は一例であり、他の方法によって第1単位データ及び第2単位データが生成されてもよい。
分割モジュール55は、分割位置情報に含まれる複数の解析データサイズKが示す複数の分割位置について、それぞれ上述の処理を実行し、第1部分圧縮データと、その余のデータとに圧縮画像データを分割する。
分割モジュール55は、分割処理の実行後、分割処理で生成した第1分割部分圧縮データをメモリ22のRAM25の所定の記憶領域に記憶させる。所定の記憶領域は、分割指示において、ジョブ管理モジュール54によって指定された領域である。RAM25の所定の記憶領域に第1分割部分圧縮データを記憶させる処理は、第3記憶処理の一例である。
ジョブ管理モジュール54は、ステップS64の解凍指示に代えて、RAM25の所定の記憶領域に記憶された第1分割部分圧縮データを解凍して第1分割部分解凍データを生成することを指示する解凍指示コマンドを解凍モジュール56に対して行う。解凍モジュール56は、解凍指示コマンドが示すRAM25の記憶領域をポーリング等によって監視し、RAM25に第1分割部分圧縮データが記憶されたことに応じて、第1分割部分圧縮データをRAM25から読み出して解凍する。そして、解凍によって得られた第1分割部分解凍データを、解凍指示コマンドにおいて指定されたRAM25の記憶領域に記憶させる。分割部分解凍データは、解凍部分画像データの一例である。
ジョブ管理モジュール54は、ステップS67の変換指示コマンドに代えて、RAM25の所定の記憶領域に記憶された第1分割部分解凍データを第1部分印刷データに変換することを指示する変換指示コマンドを変換モジュール57に入力する。変換モジュール57は、変換指示コマンドが示すRAM25の記憶領域をポーリング等によって監視し、RAM25に第1分割部分解凍データが記憶されたことに応じて、第1分割部分解凍データをRAM25から読み出して第1部分印刷データに変換して生成する。変換モジュール57が第1部分印刷データを生成する処理は、部分印刷データ生成処理の一例である。
ジョブ管理モジュール54は、第1部分印刷データを出力するために変換が必要な分割部分圧縮データがあるか否かを判断する(図4:S70)。詳しく説明すると、ヘッド31(図1)は、図8(A)に示す走査方向においてシートを走査してシートに画像を印刷する。したがって、ヘッド31がシートに画像を印刷するためには、第1部分印刷データだけなく、第2分割画像を示す部分印刷データである第2部分印刷データが必要となる。ジョブ管理モジュール54は、モデル情報及び分割情報に基づいて、印刷データを出力するために変換が必要な部分圧縮データがあるか否かを判断する。
ジョブ管理モジュール54は、印刷データを出力するために変換が必要な部分圧縮データがあると判断すると(S70:Yes)、印刷データを出力するために変換が必要な分割部分圧縮データを生成するための分割指示コマンドを分割モジュール55に入力する。
分割モジュール55は、上述と同様にして、第2分割画像を示す第2分割部分圧縮データと、その余のデータとに圧縮画像データを分割し、その余のデータを破棄して、第2分割部分圧縮データのみをメモリ22のRAM25の所定の記憶領域に記憶させる。
ジョブ管理モジュール54は、上述と同様にして、解凍指示コマンドや変換指示コマンドを解凍モジュール56や変換モジュール57に入力し、第2分割画像を示す第2部分印刷データを変換モジュール57に生成させる。
ジョブ管理モジュール54は、印刷データを出力するために変換が必要な分割部分圧縮データがないと判断すると(S70:No)、印刷データ生成処理を終了する。そして、ジョブ管理モジュール54は、図2に示されるように、生成した第1部分印刷データ及び第2部分印刷データを印刷エンジン15の駆動回路35及び駆動モータ36に出力する(S20)。第1部分印刷データ及び第2部分印刷データを出力するステップS20の処理は、部分出力処理の一例である。
ジョブ管理モジュール54は、ステップS20の処理の実行後、部分印刷データに変換していない分割画像があるか否かを判断する(S25)。ジョブ管理モジュール54は、部分印刷データに変換していない分割画像である第3分割画像及び第4分割画像があると判断すると(S25:Yes)、上述の印刷データ生成処理を実行し、第3分割画像を示す第3部分印刷データ及び第4分割画像を示す第4部分印刷データを生成する。そして、ジョブ管理モジュール54は、生成した第3部分印刷データ及び第4部分印刷データを印刷エンジン15に対して出力する(S20)。すなわち、ジョブ管理モジュール54は、分割画像の数に応じた回数だけ部分印刷データの生成と出力とを繰り返して実行する。
本変形例では、解像度が高くても、圧縮画像データが示す画像をシートに印刷することができる。
[その他の変形例]
上述の実施形態では、解析処理において、解析高さDが縦値B未満か否かにより(S24)、1ページの解析が終了したか否かを判断する例を説明した。すなわち、ドキュメント情報が示す縦方向の解像度を示す縦値Bが第1閾値である例を説明した。しかしながら、解析した単位データが示す総画素数が、解像度が示す1ページ分の総画素数に到達したか否かにより、1ページの解析が終了したか否かが判断されてもよい。解像度が示す1ページ分の総画素数は、例えば、解像度が600×600である場合、360000である。すなわち、ドキュメント情報が示す解像度によって決まる総画素数が、第1閾値であってもよい。