データ処理装置
【課題】 二段階に亘ってデータを変換する処理のための新規なメモリ管理技術を提供すること。
【解決手段】 プリンタ10の制御部16は、プログラム20,22の処理のためのメモリ管理を統括して実行しながら、以下の処理を実行する。
(1)PDLデータから中間言語データを作成する。
(2)次のPDLデータが存在するのか否かを判断する。
(3)(2)でYESの場合、次のPDLデータから中間言語データが作成されたら中間言語データの合計データサイズが所定値以上になるのか否かを判断する。
(4)(3)でNOの場合、次のPDLデータから中間言語データを作成する。
(5)(3)でYESの場合、中間言語データから多値BMPデータを作成するとともに、その中間言語データを削除する。
(6)多値BMPデータを圧縮する。
(7)(2)でNOの場合、中間言語データから多値BMPデータを作成する。
【解決手段】 プリンタ10の制御部16は、プログラム20,22の処理のためのメモリ管理を統括して実行しながら、以下の処理を実行する。
(1)PDLデータから中間言語データを作成する。
(2)次のPDLデータが存在するのか否かを判断する。
(3)(2)でYESの場合、次のPDLデータから中間言語データが作成されたら中間言語データの合計データサイズが所定値以上になるのか否かを判断する。
(4)(3)でNOの場合、次のPDLデータから中間言語データを作成する。
(5)(3)でYESの場合、中間言語データから多値BMPデータを作成するとともに、その中間言語データを削除する。
(6)多値BMPデータを圧縮する。
(7)(2)でNOの場合、中間言語データから多値BMPデータを作成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、第1データから第2データを作成し、第2データから第3データを作成するデータ処理に関する。
【背景技術】
【0002】
様々な処理を実行する過程において、メモリフルのエラーが生じないようにメモリ管理を行なう必要がある。例えば、下記の特許文献1には、印刷用データを作成するための2つの処理(ジョブ)を並列的に実行する場合に、各ジョブの状態情報(印刷枚数等の情報)及び優先度情報(コピー優先、プリンタ優先等の情報)に基づいて、一方のジョブのためのメモリ回路と他方のジョブのためのメモリ回路についてメモリ量の配分を修正する技術が開示されている。
【0003】
【特許文献1】特開2006−174247号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
上記の特許文献1のメモリ管理技術は確かに有用かもしれないが、その手法をあらゆるデータ処理技術に適用することはできない。本発明者は、二段階に亘ってデータが変換されるデータ処理装置の開発に携わっている。即ち、この種のデータ処理装置では、第1データから第2データを作成し、その第2データから第3データを作成する。本明細書では、このような二段階に亘ってデータを変換する処理のための新規なメモリ管理技術を提供する。
【課題を解決するための手段】
【0005】
本明細書によって開示される1つの技術は、第1データから第2データを作成し、その第2データから第3データを作成するデータ処理装置である。このデータ処理装置は、第1データ入力手段と、第1プログラム記憶手段と、第2プログラム記憶手段と、メモリと、制御手段とを有する。第1データ入力手段は、第1データを入力する。例えば、第1データが他のデバイスから送信される場合、第1データ入力手段は、他のデバイス(パーソナルコンピュータ、サーバ、ポータブルメモリ等)から送信された第1データを入力してもよい。第1プログラム記憶手段は、第1データから第2データを作成するための第1プログラムを記憶している。第2プログラム記憶手段は、第2データから第3データを作成するための第2プログラムを記憶している。メモリは、第2データと第3データの両方を格納するために利用される。制御手段は、第1プログラムに従って処理を実行することが可能であり、第2プログラムに従って処理を実行することが可能であり、それらの両処理のためのメモリ管理を統括して実行する。
【0006】
具体的に言うと、制御手段は、以下の各処理を実行する。
(1)第1データを構成するデータから第2データを作成する。
(2)第1データを構成する次のデータが存在するのか否かを判断する。
(3)上記の(2)で肯定的に判断された場合に、第1データを構成する次のデータから第2データが作成されたら第2データの合計データサイズが所定値以上になるのか否かを判断する。
(4)上記の(3)で否定的に判断された場合に、上記の(1)を実行させる。
(5)第2データから第3データを作成する。
(6)第3データを圧縮することによって圧縮第3データを作成する。
(7)第2データを削除する。
(8)上記の(3)で肯定的に判断された場合に、上記の(5)と(6)と(7)を実行させる。
(9)圧縮第3データを伸張する。
(10)上記の(2)で否定的に判断された場合に、圧縮第3データが存在することを条件として上記の(9)を実行させる。
【0007】
なお、上記の(3)の処理は、様々な手法を利用して実行することができる。例えば、以下の(A)及び(B)のいずれかの手法を利用することができる。
(A)例えば、制御手段は、第2データを記憶するための第2データ用メモリサイズが予め決められている場合、第1データを構成する次のデータから第2データが作成されたら第2データの合計データサイズが第2データ用メモリサイズ以上になるのか否かを判断してもよい。この場合、第2データ用メモリサイズが上記の(3)の「所定値」になる。
(A’)なお、この例において圧縮第3データが存在している場合、制御手段は、第2データの合計データサイズのみが第2データ用メモリサイズ以上になるのか否かを判断してもよいし、第2データの合計データサイズと圧縮第3データのデータサイズとの和が第2データ用メモリサイズ以上になるのか否かを判断してもよい。後者の場合、上記の(3)の所定値は、第2データ用メモリサイズから圧縮第3データのデータサイズが減算された値になる。即ち、上記の(3)の所定値は、変動値であってもよい(逆に上記の(A)のように固定値でもよい)。
【0008】
(B)また、例えば、制御手段は、第3データを記憶するための第3データ用メモリサイズが予め決められている場合、第1データを構成する次のデータから第2データが作成されたら上記の第3データ用メモリサイズを圧迫することになることになるのか否かを判断してもよい。即ち、制御手段は、第2データの合計データサイズが増加することに起因して、残存メモリサイズが上記の第3データ用メモリサイズ以下になるのか否かを判断してもよい。この例の構成も、「第2データの合計データサイズが所定値以上になるのか否かを判断する」ことに等しい。即ち、「第1データを構成する次のデータから第2データが作成されたら第2データの合計データサイズが所定値以上になるのか否かを判断する」ことは、「第1データを構成する次のデータから第2データが作成されたら第2データの合計データサイズが増加することに起因して、残存メモリサイズが所定値以下になるのか否かを判断する」ことに等しい。この点については、後述の実施例においてさらに詳しく説明する。
【0009】
このデータ処理装置は、第1プログラムと第2プログラムのそれぞれの処理のメモリ管理を統括的に実行しながら、上記の(1)〜(10)の処理を実行する。メモリを効率的に利用しながら二段階に亘ってデータを変換することができる。仮に、メモリ管理を個別に行なうと、各プログラムの処理のためにメモリを分配する必要がある。この場合、一方のプログラムの処理ではメモリが余っているにもかかわらず、他方のプログラムの処理でメモリがフルになると、その時点でエラーになってしまう。例えば、第2データ用メモリと第3データ用メモリとを個別に管理すると、以下の事象が生じることがある。例えば、上記の(3)で肯定的に判断された場合に、第2データから第3データを作成すると、第3データ用メモリがメモリフルになる可能性がある。第2データ用メモリが余っている状況であっても、第3データ用メモリがメモリフルになると、エラーになってしまう。これに対し、本技術のように各プログラムの処理のためのメモリ管理を統括的に実行すると、各プログラムの処理でメモリを共用することができる。このために、メモリの一部が余っているにもかかわらずメモリフルのエラーが生じてしまうという事象が発生することを避けることができる。上記の例の場合、第2データ用メモリが余っている状況であるのであれば、その余っているメモリを利用して第3データを作成し、その第3データを圧縮することができる(メモリフルのエラーを回避できる)。本技術によると、二段階に亘ってデータを変換する処理においてメモリフルのエラーの発生を抑制することができる。
【0010】
上記の制御手段は、以下の処理を実行するようにしてもよい。即ち、制御手段は、圧縮第3データが存在する状態において上記の(3)で肯定的に判断された場合に、上記の(9)を実行させるとともに、上記の(5)で作成された第3データと上記の(9)で伸張された第3データとを含む新たな第3データについて上記の(6)を実行させてもよい。
【0011】
上記の第1データは、例えば、ページ記述言語で記述されたデータ(例えばベクタデータ)であってもよい。また、上記の第2データは、例えば、ページ記述言語と異なる種類の言語で記述されたデータ(例えばベクタデータ)であってもよい。また、上記の第3データは、例えば、ビットマップデータであってもよい。この構成によると、ページ記述言語のデータを異なる種類の言語のデータに変換し、変換後のデータをビットマップデータに変換する処理において、メモリフルのエラーの発生を抑制することができる。なお、本明細書で使用する「ページ記述言語」という用語は、ページという概念を利用してデータを記述するためのあらゆる言語を含む概念である。ページ記述言語の例として、例えば、PDF(Portable document Format)、PS(Post Script)等を挙げることができる。また、ワープロソフト、表計算ソフト、描画ソフト等で利用されている言語の中でページという概念を利用してデータを記述する言語も、ページ記述言語と呼ぶことができる。なお、以下では、ページ記述言語のことをPDL(Page Description Language)と呼ぶことがある。また、この技術は、印刷用ビットマップデータを作成するための技術に限定されることはなく、表示用ビットマップデータを作成するための技術にも利用することができる。上記の「ビットマップデータ」は、多諧調ビットマップデータであってもよいし、印刷用ビットマップデータ(例えば「0」と「1」の二値)であってもよい。
【0012】
なお、制御手段が、上記の(2)の判断を行なうために利用する第1データの単位は、特に限定されない。例えば、制御手段は、上記の(2)において、1ページ分の第1データの中に次のデータが存在するのか否かを判断してもよい。この場合、ページ単位で上記の(2)の判断が行なわれる。即ち、制御手段は、1ページ分のPDLのデータから上記の異なる言語のデータが作成された場合に、上記の(2)で肯定的に判断することになる。一方において、制御手段は、例えば、複数ページ単位(例えば2ページ単位)で上記の(2)の判断を行なってもよいし、所定量のデータサイズを単位として上記の(2)の判断を行なってもよい。
【0013】
本明細書では、上記のデータ処理装置を実現するためのコンピュータプログラムも提供する。このコンピュータプログラムは、第1データから第2データを作成するための第1プログラムと、第2データから第3データを作成するための第2プログラムとを含んでいる。さらに、このコンピュータプログラムは、第1プログラムに従って第1データから第2データを作成する処理と、第2プログラムに従って第2データから第3データを作成する処理と、それらの両処理のためのメモリのメモリ管理を統括して実行する処理とを含む制御処理をコンピュータに実行させる。この制御処理では、上記の(1)〜(10)の処理が実行される。このコンピュータプログラムによると、二段階に亘ってデータを変換する処理においてメモリフルのエラーの発生を抑制することができるデータ処理装置を実現することができる。
【発明を実施するための最良の形態】
【0014】
ここでは、以下の実施例に記載の技術の特徴の一部をまとめておく。
(形態1)第1データは、複数のコマンドを含んでいてもよい。上記の(1)の処理では、第1データを構成するコマンドから第2データを作成してもよい。上記の(2)の処理では、第1データを構成する次のコマンドが存在するのか否かを判断してもよい。
(形態2)制御手段は、1ページ分の第1データから中間言語データが作成されたことを条件として、そのページのビットマップデータを作成することを開始してもよい。
(形態3)制御手段は、ビットマップデータをバンド単位で順に作成してもよい。「バンド」は、1ページより小さい単位である。即ち、1ページは、複数のバンドの集合である。制御手段は、先頭のバンドのビットマップデータを作成する第1処理と、次のバンドのビットマップデータを作成する第2処理とを実行し、1ページ分の全てのビットマップデータが作成されるまで上記の第2処理を繰り返す。
【0015】
(形態4)制御手段は、使用可能なメモリサイズを特定する処理を実行してもよい。
(形態5)制御手段は、第3データを記憶するためのメモリサイズを特定する処理を実行してもよい。
(形態6)制御手段は、第2データを記憶するためのメモリサイズを特定する処理を実行してもよい。
(形態7)制御手段は、形態4〜形態6のいずれかで特定されたメモリサイズに基づいて、上記の(3)の処理を実行してもよい。
【実施例】
【0016】
図面を参照して実施例を説明する。図1は、本実施例のプリンタネットワークシステム2を示す。プリンタネットワークシステム2は、プリンタ10とPC60とを備える。プリンタ10とPC60は、LAN回線70を介して相互に通信可能である。PC60は、データファイル群(図示省略)を記憶している。PC60は、ユーザの操作に応じて、データファイルを印刷するようにプリンタ10に指示することができる。この場合、PC60は、ユーザの指示に応じてデータファイルをPDLに変換し、PDLで記述されたデータファイルをプリンタ10に送信する。
【0017】
(プリンタの構成)
図1では、プリンタ10の構成を簡単に示している。プリンタ10は、ネットワークインターフェイス12と、インターフェイス用バッファ13と、PDLデータ変換処理部14と、印刷部40等を有する。ネットワークインターフェイス12には、LAN回線70が接続されている。LAN回線70は、PC60に接続されている。プリンタ10は、ネットワークインターフェイス12とLAN回線70とを介してPC60と通信することができる。インターフェイス用バッファ13は、ネットワークインターフェイス12に入力されたデータを一時的に記憶するためのバッファである。
【0018】
PDLデータ変換処理部14は、制御部16と、プログラム記憶領域18と、共通メモリ28等を有する。制御部16は、プログラム記憶領域18に記憶されているプログラムに従って様々な処理を実行する。制御部16が実行する処理の内容については、後で詳しく説明する。プログラム記憶領域18は、中間言語データ作成プログラム20と、多値BMPデータ作成プログラム22と、メモリ管理プログラム24と、その他のプログラム26とを記憶している。
【0019】
中間言語データ作成プログラム20は、PDLで記述されたデータ(以下では「PDLデータ」と呼ぶことがある)を中間言語で記述されたデータ(以下では「中間言語データ」と呼ぶことがある)に変換するためのプログラムである。中間言語データ作成プログラム20は、複数種類のPDLのそれぞれに対応するプログラムを含んでいる。例えば、中間言語データ作成プログラム20は、PDFで記述されたデータを中間言語データに変換するためのプログラムと、PSで記述されたデータを同じ中間言語データに変換するためのプログラムとを記憶している。また、本実施例の中間言語では、色を表現するためにCMYKを利用する。PDLデータにおいてRGBを利用して色が表現されている場合、中間言語に変換する際にCMYKに変換される。
【0020】
PDLデータから中間言語データを介してビットマップデータを作成する手法(以下では「前者の手法」と呼ぶ)は、PDLデータから直接的にビットマップデータを作成する手法(以下では「後者の手法」と呼ぶ)と比べて、以下の点において効果的である。多くのPDLは、同じタイプのデータを記述することができる。例えば、多くのPDLは、線型グラデーションやテキストを記述することができる。第1PDLと第2PDLのそれぞれによって同じ線型グラデーション(例えば左から右に向かって赤色から青色に変わっていくグラデーション)が記述されている場合を例として説明する。
【0021】
上記の例の場合、後者の手法を採用するためには、第1PDLのフォーマットで記述された線型グラデーションのベクタデータからビットマップデータを作成するためのプログラムと、第2PDLのフォーマットで記述された線型グラデーションのベクタデータからビットマップデータを作成するためのプログラムとが必要になる。
【0022】
これに対し、上記の例の場合、前者の手法を採用すると、第1PDLの線型グラデーションのベクタデータから中間言語データが作成され、第2PDLの線型グラデーションのベクタデータから中間言語データ(ベクタデータ)が作成される。この場合、2つの中間言語データは同じになる。そうすると、この中間言語データをビットマップデータに変換するためのプログラムがあれば、第1PDLと第2PDLのどちらで記述された線型グラデーションであっても、ビットマップデータを作成することができる。即ち、前者の手法を採用するためには、第1PDLの線型グラデーションのベクタデータから中間言語データを作成するための第1プログラムと、第2PDLの線型グラデーションのベクタデータから中間言語データを作成するための第2プログラムと、その中間言語データからビットマップデータを作成するための第3プログラムとが必要になる。即ち、第1PDLと第2PDLを処理するためのプログラムにおいて、線型グラデーションのベクタデータからビットマップデータを作成するための第3プログラム(図1の例では多値BMPデータ作成プログラム22)を共通化することができる。確かに、後者の手法と比べると、上記の第1プログラムと第2プログラムが新たに必要になる。しかしながら、ベクタデータ(PDL)をベクタデータ(中間言語)に変換するためのプログラムは、それほど大きなプログラム量を必要としない。ベクタデータをビットマップデータに変換するためのプログラムの方が大きなプログラム量を要する。第1プログラムと第2プログラムが新たに必要にはなるが、第3プログラムを共通化することができるために、全体のプログラム量は後者の手法よりも少なくて済む。
【0023】
多値BMPデータ作成プログラム22は、中間言語データを多諧調(本実施例ではCMYKの256階調)のビットマップデータに変換するためのプログラムである。なお、以下では、多諧調のビットマップデータのことを「多値BMPデータ」と呼ぶことがある。本実施例では、PDLデータから中間言語データを作成する処理と、中間言語データから多値BMPデータを作成する処理との両方において、共通メモリ28が使用される。これらの両処理で利用される共通メモリ28を管理するために、メモリ管理プログラム24が用意されている。即ち、メモリ管理プログラム24は、上記の両処理のメモリ管理を統括して実行するためのプログラムである。共通メモリ28を利用して上記の両処理がどのようにして実行されるのかについては、後で詳しく説明する。プログラム26は、PDLデータ変換処理において必要な他の処理を実行するためのプログラムである。
【0024】
印刷部40は、プログラム記憶領域42と、バッファ48と、バンドメモリ50と、印刷機構52等を有する。なお、本実施例では、PDLデータ変換処理部14の制御部16が、印刷部40の制御部を兼用している。即ち、プログラム記憶領域42に記憶されているプログラム44,46に従って制御部16が処理を実行する。しかしながら、PDLデータ変換処理部14の制御部16とは別の専用の制御部を印刷部40に設けてもよい。
【0025】
プログラム記憶領域42は、二値BMPデータ作成プログラム44と、その他のプログラム46とを記憶している。二値BMPデータ作成プログラム44は、PDLデータ変換処理部14で作成された多値BMPデータから印刷用の低階調(本実施例では「0」と「1」の二階調)のビットマップデータを作成するためのプログラムである。なお、以下では、印刷用のビットマップデータのことを「二値BMPデータ」と呼ぶことがある。プログラム46は、印刷処理において必要な他の処理を実行するためのプログラム(例えば印刷機構52を制御するためのプログラム)である。
【0026】
バッファ48は、PDLデータ変換処理部14から送信された多値BMPデータを一時的に記憶するためのバッファである。バンドメモリ50は、少なくとも1バンド分の二値BMPデータを記憶するためのメモリである。「バンド」について簡単に説明しておく。PC60から印刷するように指示された全てのPDLデータに対応する多値BMPデータを作成し、その後に全ての多値BMPデータから全ての二値BMPデータを作成し、その後に印刷を開始するという手法が考えられる。しかしながら、この場合、全てのPDLデータに対応する多値BMPデータ及び二値BMPデータを記憶するための大容量のメモリが必要になる。本実施例のプリンタ10は、多値BMPデータ及び二値BMPデータを記憶するためのメモリ容量を圧縮するために、「バンド」という概念を用いて多値BMPデータ及び二値BMPデータを少しずつ作成して順に印刷する手法を採用する。本実施例では、1つのバンドのバンド幅は、例えば、インクジェットヘッドが1回の走査によって印刷することが可能である範囲(1ページより少ない範囲)に基づいて設定される。
【0027】
詳しくは後述するが、本実施例では、PDLデータ変換処理部14は、1ページ分のPDLデータから1ページ分の中間言語データを作成する。PDLデータ変換処理部14は、1ページ分の中間言語データからページの先頭の1バンド分の多値BMPデータを作成する。1バンド分の多値BMPデータは、PDLデータ変換処理部14から印刷部40に送信される。PDLデータ変換処理部14は、送信された多値BMPデータを削除する。PDLデータ変換処理部14は、これらの処理をバンド単位で繰り返す。例えば、PDLデータ変換処理部14は、1バンド分の多値BMPデータを作成し、それを全て送信し終えてから多値BMPデータを削除し、その後に次のバンドの多値BMPデータを作成してもよい。この場合、PDLデータ変換処理部14は、1バンド分のメモリサイズを共通メモリ28に確保すれば足りる。しかしながら、本実施例では、PDLデータ変換処理部14は、1バンド分の多値BMPデータを印刷部40に送信している間に、次のバンドの多値BMPデータを作成することを開始する。これにより、多値BMPデータを高速で作成して印刷部40に提供することを実現している。この処理を実行する場合、PDLデータ変換処理部14は、少なくとも2バンド分の多値BMPデータを記憶するためのメモリサイズを共通メモリ28に確保する必要がある。1バンド分の多値BMPデータを削除する前に、次のバンドの多値BMPデータを作成することを開始するからである。
【0028】
印刷部40は、PDLデータ変換処理部14から送信された1バンド分の多値BMPデータを受信する。印刷部40は、1バンド分の多値BMPデータから1バンド分の二値BMPデータを作成する。印刷部40は、1バンド分の二値BMPデータに従って印刷する。印刷部40は、印刷が終了した二値BMPデータを削除する。例えば、印刷部40は、1バンド分の二値BMPデータを作成し、それを全て印刷し終えてから二値BMPデータを削除し、その後に次のバンドの二値BMPデータを作成してもよい。この場合、バンドメモリ50は、1バンド分のメモリサイズがあれば足りる。しかしながら、本実施例では、印刷部40は、1バンド分の二値BMPデータに従って印刷している間に、次のバンドの二値BMPデータを作成することを開始する。これにより、高速で印刷することを実現している。この処理を実行する場合、バンドメモリ50は、少なくとも2バンド分のBMPデータを記憶するためのメモリサイズが必要である。1バンド分の二値BMPデータを削除する前に、次のバンドの二値BMPデータを作成することを開始するからである。
【0029】
印刷機構52は、印刷媒体を搬送するための機構と、印刷媒体に印刷するための機構(例えばインクジェットタイプやレーザタイプの印刷機構)とを有する。制御部16は、プログラム記憶領域42に記憶されているプログラム46とバンドメモリ50の記憶内容に従って、印刷機構52の駆動制御を実行する。
【0030】
(PDLデータ変換処理)
続いて、制御部16が実行するPDLデータ変換処理の内容について説明する。制御部16は、プログラム20,22,24,26に従ってPDLデータ変換処理を実行する。図2〜図4は、PDLデータ変換処理のフローチャートを示す。PDLデータ変換処理は、PC60からの印刷指示及びPDLデータがネットワークインターフェイス12に入力されたことをトリガとして開始される。ネットワークインターフェイス12に入力されたPDLデータは、インターフェイス用バッファ13に格納される。インターフェイス用バッファ13は、PC60からの全てのPDLデータを同時に記憶することができる程度の大きなメモリサイズを有している必要はなく、少ないメモリサイズを有している。制御部16は、インターフェイス用バッファ13に格納されたPDLデータに対して後述の処理を実行するとPDLデータを削除し、その後に次のPDLデータをPC60からダウンロードすることを繰り返す。
【0031】
まず、制御部16は、共通メモリ28の中の使用可能なメモリサイズを特定する(S10)。次いで、制御部16は、多値BMPデータを作成するために必要なメモリサイズ(以下では「多値BMPデータ用メモリサイズ」と呼ぶことがある)を特定する(S12)。本実施例のS12の処理では、制御部16は、2バンド分の多値BMPデータを作成するために必要なメモリサイズを特定する。しかしながら、制御部16は、2バンド分以上の多値BMPデータを作成するために必要なメモリサイズを特定してもよい。なお、S10で使用可能なメモリサイズを特定するとともにS12で多値BMPデータ用メモリサイズを特定するということは、「PDLデータから中間言語を作成するための処理で使用可能なメモリサイズ(以下では「中間言語データ用メモリサイズ」と呼ぶことがある)を特定する」と言うこともできる。
【0032】
次いで、制御部16は、処理対象ページPNとして「1」を特定する(S14)。即ち、1ページ目のPDLデータに基づいて以下の各処理を実行する。制御部16は、処理対象ページ(現段階では1ページ目)のPDLデータがインターフェイス用バッファ13に存在するのか否かを判断する(S16)。ここでNOの場合、図4のS50に進む。一方において、ここでYESの場合、S18に進む。
【0033】
実際のPDLデータは、複数のコマンド(ベクタデータ)によって構成される。1ページ分のPDLデータの中にも複数のコマンドが含まれている。図5は、PDLデータ100の構成を簡単に示す。PDLデータ100は、複数ページ分のデータを含んでいる。第1ページは、複数のコマンドCP1,CP2,CP3、・・・CPnによって構成されている(図5においてはCP1〜CP3のみを記載している)。即ち、第1ページの先頭のコマンドがCP1であり、2番目のコマンドがCP2であり、3番目のコマンドがCP3である。同様に、第2ページ以降も、複数のコマンド(図示省略)によって構成されている。以下の各処理は、1つのコマンドを単位として実行される。即ち、図5の例の場合、コマンドCP1についてS18以降の処理が実行され、次いでコマンドCP2についてS18以降の処理が実行される。第1ページに含まれる最後のコマンドCP3についてS18以降の処理が実行されるまで、このルーチンが繰り返される。
【0034】
S18では、制御部16は、インターフェイス用バッファ13に格納されているPDLデータの1つのコマンド(現段階ではコマンドCP1)のデータサイズに基づいて、そのコマンドを中間言語に変換したら多値BMPデータ用のメモリサイズを圧迫してしまうのか否かを判断する。具体的には、以下の処理を行なって判断する。
【0035】
まず、制御部16は、PDLデータのコマンドのデータサイズを特定する。制御部16は、特定されたデータサイズに基づいて、コマンドから作成されるべき中間言語データのデータサイズを特定する。本実施例では、制御部16は、コマンドのデータサイズと、コマンドから作成されるべき中間言語データのデータサイズとが等しくなるものと推定して、中間言語データのデータサイズを特定する。例えば、コマンドCP1のデータサイズが「XXバイト」である場合、制御部16は、中間言語データのデータサイズとして「XXバイト」を特定する。なお、制御部16は、上記と異なる手法を利用して、PDLデータのコマンドから作成されるべき中間言語データのデータサイズを特定してもよい。例えば、プリンタ10は、PDLデータの各コマンドについて、当該コマンドから作成されるべき中間言語データのデータサイズを記憶していてもよい。この場合、制御部16は、上記の記憶内容を読み込むことによって中間言語データのデータサイズを特定してもよい。また、例えば、プリンタ10は、PDLデータのコマンドのデータサイズに乗算するべき比率を記憶しておいてもよい。この場合、制御部16は、PDLデータのコマンドのデータサイズに上記の比率を乗算することによって、中間言語データのデータサイズを特定してもよい。
【0036】
次いで、制御部16は、上記のようにして特定されたデータサイズと、共通メモリ28内に存在する中間言語データのデータサイズとの和(以下では「合計データサイズ」と呼ぶ)とを算出する。例えば、図5のPDLデータ100のコマンドCP1について本処理が実行されている場合、共通メモリ28内に中間言語データは存在しない。この場合、コマンドCP1から作成されるべき中間言語データのデータサイズが上記の合計データサイズになる。続いて、制御部16は、上記の合計データサイズが中間言語データ用メモリサイズ(S10で特定された使用可能なメモリサイズからS12で特定された多値BMP用データサイズを減算した値)を超えるのか否かを判断する。これにより、S18の処理が実行される。なお、S18の処理を実行するための手法は、上記の手法に限られない。他の手法を採用することができる。他の手法については、後で述べる。
【0037】
図6は、共通メモリ28を概略的に示す。符号120は、S10で特定された使用可能なメモリサイズを示す。符号130は、S12で特定された多値BMPデータ用のメモリサイズを示す。符号140は、中間言語データ用メモリサイズを示す。上記のS18の処理では、PDLデータ100のコマンド(現時点ではCP1)を中間言語データに変換したら中間言語データの合計データサイズが中間言語データ用のメモリサイズ140を超えてしまうのか否かを判断する。ここでNOと判断された場合、S20に進む。
【0038】
S20では、制御部16は、PDLデータ100のコマンドCP1から作成されるべき中間言語データのデータサイズを共通メモリ28内に確保する。次いで、制御部16は、中間言語データ作成プログラム20に従って、PDLデータ100のコマンドCP1を中間言語データに変換する(S22)。制御部16は、この中間言語データを共通メモリ28に書き込む。図7は、コマンドCP1から作成された中間言語データCM1が共通メモリ28に格納されている様子を示す。
【0039】
続いて、制御部16は、S16に戻って次のコマンドCP2を読み込む。次いで、制御部16は、コマンドCP2を中間言語に変換したら多値BMPデータ用のメモリサイズ130を圧迫してしまうのか否かを判断する(S18)。図7に示すように、コマンドCP2から作成されるべき中間言語データCM2を共通メモリ28に書き込むと、合計データサイズが中間言語データ用メモリサイズ140を超えてしまう。この場合、制御部16は、S18でYESと判断し、図3のS30に進む。
【0040】
S30では、制御部16は、共通メモリ28内に圧縮された多値BMPデータ(以下では「圧縮多値BMPデータ」と呼ぶことがある)が存在するのか否かを判断する。コマンドCP2を処理する時点では、圧縮多値BMPデータは存在しない。この場合、制御部16は、S30でNOと判断し、S32をスキップし、S34に進む。S34では、制御部16は、多値BMPデータ作成プログラム22に従って、中間言語データCM1を多値BMPデータに変換する。制御部16は、この多値BMPデータを共通メモリ28に書き込む。図8は、中間言語データCM1から作成された多値BMPデータCB1が共通メモリ28に格納されている様子を示す。
【0041】
次いで、制御部16は、S34で作成された多値BMPデータCB1を圧縮することによって、圧縮多値BMPデータCB1’を作成する(S36)。図9は、圧縮多値BMPデータCB1’が共通メモリ28に格納されている様子を示す。続いて、制御部16は、中間言語データCM1を共通メモリ28から削除する(S38)。この場合、図9に示されるように、中間言語データCM1を格納していた部分が開放される。S38を終えると、制御部16は、図2のS20及びS22を実行する。これにより、コマンドCP2から中間言語データCM2に変換され、中間言語データCM2が共通メモリ28に書き込まれる。図10は、中間言語データCM2が共通メモリ28に格納されている様子を示す。
【0042】
続いて、制御部16は、S16に戻って次のコマンドCP3を読み込む。次いで、制御部16は、コマンドCP3を中間言語に変換したら多値BMPデータ用のメモリサイズ130を圧迫してしまうのか否かを判断する(S18)。図10に示すように、コマンドCP3から作成されるべき中間言語データCM3を共通メモリ28に書き込むと、合計データサイズ(CM2とCM3の合計データサイズ)が中間言語データ用メモリサイズ140を超えてしまう。この場合、制御部16は、S18でYESと判断し、図3のS30に進む。なお、S18の判断処理は、圧縮多値BMPデータCB1’を考慮して実行してもよい。即ち、制御部16は、CM2とCM3の合計データサイズと圧縮多値BMPデータCB1’のデータサイズとの和が、中間言語データ用メモリサイズ140を超えるのか否かを判断してもよい。即ち、この場合、共通メモリ28内のフリーのメモリサイズが多値BMPデータ用メモリサイズ130以下になるのか否かを判断することに等しい。
【0043】
圧縮多値BMPデータCB1’が存在するために、制御部16は、S30でYESと判断する。この場合、制御部16は、圧縮多値BMPデータCB1’を伸張することによって、多値BMPデータCB1を作成する(S32)。図11は、多値BMPデータCB1が共通メモリ28に格納されている様子を示す。次いで、制御部16は、中間言語データCM2を多値BMPデータCB2に変換する(S34)。なお、図11に示されるように、本実施例では、多値BMPデータCB2を作成すると、多値BMPデータの合計データサイズ(CB1とCB2の合計データサイズ)が多値BMPデータ用メモリサイズ130を超えてしまう。しかしながら、中間言語データ用メモリサイズ140が余っているために、その部分も利用しながら多値BMPデータを作成する。即ち、この時点でメモリフルのエラーにならない。S34を実行することによって、多値BMPデータCB1と多値BMPデータCB2とから新たな多値BMPデータCB1,CB2が作成される。
【0044】
次いで、制御部16は、S34で作成された多値BMPデータCB1,CB2を圧縮することによって、圧縮多値BMPデータCB1’+CB2’を作成する(S36)。図12は、圧縮多値BMPデータCB1’+CB2’が共通メモリ28に格納されている様子を示す。次いで、制御部16は、中間言語データCM2を共通メモリ28から削除する(S38)。S38を終えると、制御部16は、図2のS20及びS22を実行する。これにより、コマンドCP3から中間言語データCM3に変換され、中間言語データCM3が共通メモリ28に書き込まれる。図12は、中間言語データCM3が共通メモリ28に格納されている様子を示す。
【0045】
図5のPDLデータ100のコマンドCP1,CP2,CP3についてS18以降の処理が実行されると、制御部16は、S16でNOと判断する。この場合、図4のS50に進む。S50では、制御部16は、処理対象バンドBNとして「1」を特定する(S50)。制御部16は、処理対象バンド(現時点では「1」)に含まれる圧縮多値BMPデータが共通メモリ28に存在するのか否かを判断する(S52)。例えば、図12に示される圧縮多値BMPデータCB1’+CB2’が処理対象バンドに含まれる場合、制御部16は、S52でYESと判断し、S54に進む。S54では、制御部16は、圧縮多値BMPデータCB1’+CB2’を伸張することによって、多値BMPデータCB1+CB2を作成する。多値BMPデータCB1+CB2は、共通メモリ28に書き込まれる。
【0046】
次いで、制御部16は、処理対象バンド(現時点では「1」)に含まれる中間言語データが共通メモリ28に存在するのか否かを判断する(S56)。例えば、図12に示される中間言語データCM3が処理対象バンドに含まれる場合、制御部16は、S56でYESと判断し、S58に進む。S58では、制御部16は、中間言語データCM3を多値BMPデータCB3に変換する。多値BMPデータCB3は、共通メモリ28に書き込まれる。これにより、上記の多値BMPデータCB1+CB2と多値BMPデータCB3とから新たな多値BMPデータが作成される。制御部16は、多値BMPデータに変換された中間言語データCM3を共通メモリ28から削除する(S60)。
【0047】
続いて、制御部16は、処理対象バンド(現時点では「1」)の多値BMPデータを印刷部40に送信する(S62)。これにより、印刷部40(制御部16)は、処理対象バンドの多値BMPデータから二値BMPデータを作成し、その二値BMPデータに従って印刷を開始する。制御部16は、S62で多値BMPデータの送信を開始するとすぐにS64以降の処理を実行する。まず、制御部16は、処理対象バンドBNをインクリメントする(S64)。現時点では、処理対象バンドBNが「2」になる。次いで、制御部16は、処理対象バンドBNが1ページの最終バンドを超えたのか否かを判断する(S66)。ここでNOの場合、制御部16は、S52以降の処理を繰り返す。なお、制御部16は、S62で1バンド分の多値BMPデータが送信された後に、その多値BMPデータを共通メモリ28から削除する。
【0048】
一方において、S66でYESの場合、即ち、1ページ分の全てのバンドについて処理を終えた場合、制御部16は、処理対象ページPN(現時点では「1」)の次のページのPDLデータがインターフェイス用バッファ13に存在するのか否かを判断する(S68)。例えば、図5のPDL100の場合、第2ページ以降が存在する。この場合、制御部16は、S68でYESと判断し、処理対象ページPNをインクリメントする(S70)。現時点では、処理対象ページPNが「2」になる。次いで、制御部16は、S18に戻って、2ページ目以降について同様に処理を実行する。
【0049】
上記のプリンタ10は、中間言語データ作成プログラム20と多値BMPデータ作成プログラム22のそれぞれの処理のメモリ管理を統括的に実行する。メモリを効率的に利用しながら二段階に亘ってデータを変換することができる。仮に、メモリ管理を個別に行なうと、各プログラム20,22の処理のためにメモリを分配する必要がある。この場合、例えば、図11に示すように、中間言語データ用メモリサイズ140ではメモリが余っているにもかかわらず、多値BMPデータ用メモリサイズ130がフルになると、その時点でエラーになってしまう。これに対し、本実施例のプリンタ10のように各プログラム20,22の処理のためのメモリ管理を統括的に実行すると、各プログラム20,22の処理で共通メモリ28を共用することができる。このために、メモリの一部が余っているにもかかわらずメモリフルのエラーが生じてしまうという事象が発生することを避けることができる。本実施例によると、二段階に亘ってデータを変換する処理においてメモリフルのエラーの発生を抑制することができる。
【0050】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
【0051】
(1)上述したように、図2のS18の判断処理の手法は様々である。以下の各手法を採用してもよい。例えば、図2のS10において使用可能なメモリサイズとして10000キロバイトが特定され、図2のS12において多値BMPデータ用メモリサイズとして2000キロバイトが特定されたものとする(即ち中間言語データ用及びその他で使用可能なメモリサイズは8000キロバイトである)。この例に基づいて、各手法について説明する。
【0052】
(1−1)上記の(1)の例において、7000キロバイトの中間言語データのみが共通メモリ28に存在し、PDLデータの次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが9000キロバイトになる場合、制御部16は、S18でYESと判断してもよい。即ち、この例の場合、中間言語データの合計データサイズ(9000キロバイト)と中間言語データ用メモリサイズ(8000キロバイト)とを比較することによって、S18の処理を実行することになる。これが上記の実施例の手法である。
【0053】
(1−2)上記の(1)の例において、6000キロバイトの中間言語データと1000キロバイトの圧縮多値BMPデータとが共通メモリ28に存在し、次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが7500キロバイトになる場合、制御部16は、S18でNOと判断してもよい。中間言語データの合計データサイズが7500キロバイトであり、中間言語データ用メモリサイズ(8000キロバイト)を超えないからである。この例の場合、中間言語データの合計データサイズ(7500キロバイト)と中間言語データ用メモリサイズ(8000キロバイト)とを比較することによって、S18の処理を実行することになる。これも上記の実施例の手法である。
【0054】
(1−3)一方において、上記の(1−2)の例において、制御部16は、S18でYESと判断してもよい。中間言語データの合計データサイズ(7500キロバイト)と圧縮多値BMPデータのデータサイズ(1000キロバイト)との和が8500キロバイトであり、中間言語データ用メモリサイズ(8000キロバイト)を超えるからである。即ち、この例の場合、中間言語データの合計データサイズ(7500キロバイト)と、中間言語データ用メモリサイズ(8000キロバイト)から圧縮多値BMPデータのデータサイズ(1000キロバイト)が減算された値(7000キロ)とを比較することによって、S18の処理を実行することになる。
【0055】
(1−4)また、上記の(1)の例において、5000キロバイトの中間言語データと他の処理で作成された1000キロバイトの他処理データと1000キロバイトの圧縮多値BMPデータとが共通メモリ28に存在し、次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが6500キロバイトになる場合、制御部16は、S18でNOと判断してもよい。この例の場合、中間言語データの合計データサイズ(6500キロバイト)と中間言語データ用メモリサイズ(8000キロバイト)とを比較することによって、S18の処理を実行することになる。これは、上記の(1−2)と同様の手法である。
【0056】
(1−5)一方において、上記の(1−4)の例において、制御部16は、S18でYESと判断してもよい。中間言語データの合計データサイズ(6500キロバイト)と上記の他処理データのデータサイズ(1000キロバイト)と圧縮多値BMPデータのデータサイズ(1000キロバイト)との和が8500キロバイトであり、中間言語データ用メモリサイズ(8000キロバイト)を超えるからである。即ち、この例の場合、中間言語データの合計データサイズ(6500キロバイト)と、中間言語データ用メモリサイズ(8000キロバイト)から上記の他処理データ及び圧縮多値BMPデータのデータサイズ(1000+1000キロバイト)が減算された値(6000キロ)とを比較することによって、S18の処理を実行することになる。なお、メモリ容量が不足する場合、上記の他処理データにより占有されているメモリを開放する構成を採用することもできる。
【0057】
上記の(1−1)〜(1−5)のいずれの手法であっても、PDLデータの次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが第1所定値以上になるのか否かを判断することになる。即ち、上記の(1−1)、(1−2)、及び、(1−4)では、上記の第1所定値が8000キロバイトである。上記の(1−3)では、上記の第1所定値が7000キロバイトである。上記の(1−5)では、上記の第1所定値が6000キロバイトである。
【0058】
なお、上記の(1−3)及び(1−5)の手法は、PDLデータの次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが増加することに起因して、共通メモリ内の残存メモリサイズが第2所定値以下になるのか否か判断することに等しい。即ち、上記の(1−3)では、上記の残存メモリサイズが1500キロバイト(10000−7500−1000)になり、上記の第2所定値が2000キロバイト(多値BMPデータ用メモリサイズ)になる。また、上記の(1−5)でも、上記の残存メモリサイズが1500キロバイトになり(10000−6500−1000−1000)、上記の第2所定値が2000キロバイトになる。
【0059】
(2)上記の実施例では、プリンタ10は、中間言語データから多値BMPデータを作成し、多値BMPデータから二値BMPデータを作成する。しかしながら、プリンタ10は、中間言語データから直接的に二値BMPデータを作成してもよい。この場合、図2〜図4の各処理において、二値BMPデータが作成されることになる。
【0060】
(3)また、上記の実施例では、プリンタ10は、PDLデータから中間言語データを作成し、中間言語データからBMPデータを作成する。しかしながら、上記の実施例の技術は、二段階に亘ってデータを変換するあらゆる技術に適用することができる。例えば、PDLデータから所定種類のPDLデータ(例えばPDF)を作成し、その所定種類のPDLデータからBMPデータを作成する技術にも適用することができる。
【0061】
(4)上記の実施例では、多値BMPデータをバンド単位で作成するとともに、二値BMPデータをバンド単位で作成する(バンドメモリ50を利用する)。これに代えて、PDLデータ変換処理部14は、1ページ分の多値BMPデータを作成した後に、多値BMPデータを印刷部40に送信するようにしてもよい。この場合、印刷部40は、バンドメモリ50に代えて、少なくとも1ページ分の二値BMPデータを記憶することができるページメモリを利用する。
【0062】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【図面の簡単な説明】
【0063】
【図1】プリンタネットワークシステムの構成の一例を示す。
【図2】PDL変換処理のフローチャートを示す。
【図3】図2の続きのフローチャートを示す。
【図4】図2の続きのフローチャートを示す。
【図5】PDLデータの構成を簡単に示す。
【図6】共通メモリを示す。
【図7】中間言語データが格納されている状態の共通メモリを示す。
【図8】中間言語データと多値BMPデータが格納されている状態の共通メモリを示す。
【図9】圧縮多値BMPデータが格納されている状態の共通メモリを示す。
【図10】中間言語データと圧縮多値BMPデータが格納されている状態の共通メモリを示す。
【図11】中間言語データと多値BMPデータが格納されている状態の共通メモリを示す。
【図12】中間言語データと圧縮多値BMPデータが格納されている状態の共通メモリを示す。
【符号の説明】
【0064】
10:プリンタ
12:ネットワークインターフェイス
13:インターフェイス用バッファ
14:PDLデータ変換処理部
16:制御部
18:プログラム記憶領域
20:中間言語データ作成プログラム
22:多値BMPデータ作成プログラム
24:メモリ管理プログラム
28:共通メモリ
40:印刷部
42:プログラム記憶領域
44:二値BMPデータ作成プログラム
48:バッファ
50:バンドメモリ
52:印刷機構
70:LAN回線
100:PDLデータ
120:使用可能なメモリサイズ
130:多値BMPデータ用メモリサイズ
140:中間言語データ用メモリサイズ
CP1,CP2,CP3:PDLデータのコマンド
CM1,CM2,CM3:中間言語データ
CB1,CB2,CB3:多値BMPデータ
CB1’,CB2’,CB3’:圧縮多値BMPデータ
【技術分野】
【0001】
本発明は、第1データから第2データを作成し、第2データから第3データを作成するデータ処理に関する。
【背景技術】
【0002】
様々な処理を実行する過程において、メモリフルのエラーが生じないようにメモリ管理を行なう必要がある。例えば、下記の特許文献1には、印刷用データを作成するための2つの処理(ジョブ)を並列的に実行する場合に、各ジョブの状態情報(印刷枚数等の情報)及び優先度情報(コピー優先、プリンタ優先等の情報)に基づいて、一方のジョブのためのメモリ回路と他方のジョブのためのメモリ回路についてメモリ量の配分を修正する技術が開示されている。
【0003】
【特許文献1】特開2006−174247号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
上記の特許文献1のメモリ管理技術は確かに有用かもしれないが、その手法をあらゆるデータ処理技術に適用することはできない。本発明者は、二段階に亘ってデータが変換されるデータ処理装置の開発に携わっている。即ち、この種のデータ処理装置では、第1データから第2データを作成し、その第2データから第3データを作成する。本明細書では、このような二段階に亘ってデータを変換する処理のための新規なメモリ管理技術を提供する。
【課題を解決するための手段】
【0005】
本明細書によって開示される1つの技術は、第1データから第2データを作成し、その第2データから第3データを作成するデータ処理装置である。このデータ処理装置は、第1データ入力手段と、第1プログラム記憶手段と、第2プログラム記憶手段と、メモリと、制御手段とを有する。第1データ入力手段は、第1データを入力する。例えば、第1データが他のデバイスから送信される場合、第1データ入力手段は、他のデバイス(パーソナルコンピュータ、サーバ、ポータブルメモリ等)から送信された第1データを入力してもよい。第1プログラム記憶手段は、第1データから第2データを作成するための第1プログラムを記憶している。第2プログラム記憶手段は、第2データから第3データを作成するための第2プログラムを記憶している。メモリは、第2データと第3データの両方を格納するために利用される。制御手段は、第1プログラムに従って処理を実行することが可能であり、第2プログラムに従って処理を実行することが可能であり、それらの両処理のためのメモリ管理を統括して実行する。
【0006】
具体的に言うと、制御手段は、以下の各処理を実行する。
(1)第1データを構成するデータから第2データを作成する。
(2)第1データを構成する次のデータが存在するのか否かを判断する。
(3)上記の(2)で肯定的に判断された場合に、第1データを構成する次のデータから第2データが作成されたら第2データの合計データサイズが所定値以上になるのか否かを判断する。
(4)上記の(3)で否定的に判断された場合に、上記の(1)を実行させる。
(5)第2データから第3データを作成する。
(6)第3データを圧縮することによって圧縮第3データを作成する。
(7)第2データを削除する。
(8)上記の(3)で肯定的に判断された場合に、上記の(5)と(6)と(7)を実行させる。
(9)圧縮第3データを伸張する。
(10)上記の(2)で否定的に判断された場合に、圧縮第3データが存在することを条件として上記の(9)を実行させる。
【0007】
なお、上記の(3)の処理は、様々な手法を利用して実行することができる。例えば、以下の(A)及び(B)のいずれかの手法を利用することができる。
(A)例えば、制御手段は、第2データを記憶するための第2データ用メモリサイズが予め決められている場合、第1データを構成する次のデータから第2データが作成されたら第2データの合計データサイズが第2データ用メモリサイズ以上になるのか否かを判断してもよい。この場合、第2データ用メモリサイズが上記の(3)の「所定値」になる。
(A’)なお、この例において圧縮第3データが存在している場合、制御手段は、第2データの合計データサイズのみが第2データ用メモリサイズ以上になるのか否かを判断してもよいし、第2データの合計データサイズと圧縮第3データのデータサイズとの和が第2データ用メモリサイズ以上になるのか否かを判断してもよい。後者の場合、上記の(3)の所定値は、第2データ用メモリサイズから圧縮第3データのデータサイズが減算された値になる。即ち、上記の(3)の所定値は、変動値であってもよい(逆に上記の(A)のように固定値でもよい)。
【0008】
(B)また、例えば、制御手段は、第3データを記憶するための第3データ用メモリサイズが予め決められている場合、第1データを構成する次のデータから第2データが作成されたら上記の第3データ用メモリサイズを圧迫することになることになるのか否かを判断してもよい。即ち、制御手段は、第2データの合計データサイズが増加することに起因して、残存メモリサイズが上記の第3データ用メモリサイズ以下になるのか否かを判断してもよい。この例の構成も、「第2データの合計データサイズが所定値以上になるのか否かを判断する」ことに等しい。即ち、「第1データを構成する次のデータから第2データが作成されたら第2データの合計データサイズが所定値以上になるのか否かを判断する」ことは、「第1データを構成する次のデータから第2データが作成されたら第2データの合計データサイズが増加することに起因して、残存メモリサイズが所定値以下になるのか否かを判断する」ことに等しい。この点については、後述の実施例においてさらに詳しく説明する。
【0009】
このデータ処理装置は、第1プログラムと第2プログラムのそれぞれの処理のメモリ管理を統括的に実行しながら、上記の(1)〜(10)の処理を実行する。メモリを効率的に利用しながら二段階に亘ってデータを変換することができる。仮に、メモリ管理を個別に行なうと、各プログラムの処理のためにメモリを分配する必要がある。この場合、一方のプログラムの処理ではメモリが余っているにもかかわらず、他方のプログラムの処理でメモリがフルになると、その時点でエラーになってしまう。例えば、第2データ用メモリと第3データ用メモリとを個別に管理すると、以下の事象が生じることがある。例えば、上記の(3)で肯定的に判断された場合に、第2データから第3データを作成すると、第3データ用メモリがメモリフルになる可能性がある。第2データ用メモリが余っている状況であっても、第3データ用メモリがメモリフルになると、エラーになってしまう。これに対し、本技術のように各プログラムの処理のためのメモリ管理を統括的に実行すると、各プログラムの処理でメモリを共用することができる。このために、メモリの一部が余っているにもかかわらずメモリフルのエラーが生じてしまうという事象が発生することを避けることができる。上記の例の場合、第2データ用メモリが余っている状況であるのであれば、その余っているメモリを利用して第3データを作成し、その第3データを圧縮することができる(メモリフルのエラーを回避できる)。本技術によると、二段階に亘ってデータを変換する処理においてメモリフルのエラーの発生を抑制することができる。
【0010】
上記の制御手段は、以下の処理を実行するようにしてもよい。即ち、制御手段は、圧縮第3データが存在する状態において上記の(3)で肯定的に判断された場合に、上記の(9)を実行させるとともに、上記の(5)で作成された第3データと上記の(9)で伸張された第3データとを含む新たな第3データについて上記の(6)を実行させてもよい。
【0011】
上記の第1データは、例えば、ページ記述言語で記述されたデータ(例えばベクタデータ)であってもよい。また、上記の第2データは、例えば、ページ記述言語と異なる種類の言語で記述されたデータ(例えばベクタデータ)であってもよい。また、上記の第3データは、例えば、ビットマップデータであってもよい。この構成によると、ページ記述言語のデータを異なる種類の言語のデータに変換し、変換後のデータをビットマップデータに変換する処理において、メモリフルのエラーの発生を抑制することができる。なお、本明細書で使用する「ページ記述言語」という用語は、ページという概念を利用してデータを記述するためのあらゆる言語を含む概念である。ページ記述言語の例として、例えば、PDF(Portable document Format)、PS(Post Script)等を挙げることができる。また、ワープロソフト、表計算ソフト、描画ソフト等で利用されている言語の中でページという概念を利用してデータを記述する言語も、ページ記述言語と呼ぶことができる。なお、以下では、ページ記述言語のことをPDL(Page Description Language)と呼ぶことがある。また、この技術は、印刷用ビットマップデータを作成するための技術に限定されることはなく、表示用ビットマップデータを作成するための技術にも利用することができる。上記の「ビットマップデータ」は、多諧調ビットマップデータであってもよいし、印刷用ビットマップデータ(例えば「0」と「1」の二値)であってもよい。
【0012】
なお、制御手段が、上記の(2)の判断を行なうために利用する第1データの単位は、特に限定されない。例えば、制御手段は、上記の(2)において、1ページ分の第1データの中に次のデータが存在するのか否かを判断してもよい。この場合、ページ単位で上記の(2)の判断が行なわれる。即ち、制御手段は、1ページ分のPDLのデータから上記の異なる言語のデータが作成された場合に、上記の(2)で肯定的に判断することになる。一方において、制御手段は、例えば、複数ページ単位(例えば2ページ単位)で上記の(2)の判断を行なってもよいし、所定量のデータサイズを単位として上記の(2)の判断を行なってもよい。
【0013】
本明細書では、上記のデータ処理装置を実現するためのコンピュータプログラムも提供する。このコンピュータプログラムは、第1データから第2データを作成するための第1プログラムと、第2データから第3データを作成するための第2プログラムとを含んでいる。さらに、このコンピュータプログラムは、第1プログラムに従って第1データから第2データを作成する処理と、第2プログラムに従って第2データから第3データを作成する処理と、それらの両処理のためのメモリのメモリ管理を統括して実行する処理とを含む制御処理をコンピュータに実行させる。この制御処理では、上記の(1)〜(10)の処理が実行される。このコンピュータプログラムによると、二段階に亘ってデータを変換する処理においてメモリフルのエラーの発生を抑制することができるデータ処理装置を実現することができる。
【発明を実施するための最良の形態】
【0014】
ここでは、以下の実施例に記載の技術の特徴の一部をまとめておく。
(形態1)第1データは、複数のコマンドを含んでいてもよい。上記の(1)の処理では、第1データを構成するコマンドから第2データを作成してもよい。上記の(2)の処理では、第1データを構成する次のコマンドが存在するのか否かを判断してもよい。
(形態2)制御手段は、1ページ分の第1データから中間言語データが作成されたことを条件として、そのページのビットマップデータを作成することを開始してもよい。
(形態3)制御手段は、ビットマップデータをバンド単位で順に作成してもよい。「バンド」は、1ページより小さい単位である。即ち、1ページは、複数のバンドの集合である。制御手段は、先頭のバンドのビットマップデータを作成する第1処理と、次のバンドのビットマップデータを作成する第2処理とを実行し、1ページ分の全てのビットマップデータが作成されるまで上記の第2処理を繰り返す。
【0015】
(形態4)制御手段は、使用可能なメモリサイズを特定する処理を実行してもよい。
(形態5)制御手段は、第3データを記憶するためのメモリサイズを特定する処理を実行してもよい。
(形態6)制御手段は、第2データを記憶するためのメモリサイズを特定する処理を実行してもよい。
(形態7)制御手段は、形態4〜形態6のいずれかで特定されたメモリサイズに基づいて、上記の(3)の処理を実行してもよい。
【実施例】
【0016】
図面を参照して実施例を説明する。図1は、本実施例のプリンタネットワークシステム2を示す。プリンタネットワークシステム2は、プリンタ10とPC60とを備える。プリンタ10とPC60は、LAN回線70を介して相互に通信可能である。PC60は、データファイル群(図示省略)を記憶している。PC60は、ユーザの操作に応じて、データファイルを印刷するようにプリンタ10に指示することができる。この場合、PC60は、ユーザの指示に応じてデータファイルをPDLに変換し、PDLで記述されたデータファイルをプリンタ10に送信する。
【0017】
(プリンタの構成)
図1では、プリンタ10の構成を簡単に示している。プリンタ10は、ネットワークインターフェイス12と、インターフェイス用バッファ13と、PDLデータ変換処理部14と、印刷部40等を有する。ネットワークインターフェイス12には、LAN回線70が接続されている。LAN回線70は、PC60に接続されている。プリンタ10は、ネットワークインターフェイス12とLAN回線70とを介してPC60と通信することができる。インターフェイス用バッファ13は、ネットワークインターフェイス12に入力されたデータを一時的に記憶するためのバッファである。
【0018】
PDLデータ変換処理部14は、制御部16と、プログラム記憶領域18と、共通メモリ28等を有する。制御部16は、プログラム記憶領域18に記憶されているプログラムに従って様々な処理を実行する。制御部16が実行する処理の内容については、後で詳しく説明する。プログラム記憶領域18は、中間言語データ作成プログラム20と、多値BMPデータ作成プログラム22と、メモリ管理プログラム24と、その他のプログラム26とを記憶している。
【0019】
中間言語データ作成プログラム20は、PDLで記述されたデータ(以下では「PDLデータ」と呼ぶことがある)を中間言語で記述されたデータ(以下では「中間言語データ」と呼ぶことがある)に変換するためのプログラムである。中間言語データ作成プログラム20は、複数種類のPDLのそれぞれに対応するプログラムを含んでいる。例えば、中間言語データ作成プログラム20は、PDFで記述されたデータを中間言語データに変換するためのプログラムと、PSで記述されたデータを同じ中間言語データに変換するためのプログラムとを記憶している。また、本実施例の中間言語では、色を表現するためにCMYKを利用する。PDLデータにおいてRGBを利用して色が表現されている場合、中間言語に変換する際にCMYKに変換される。
【0020】
PDLデータから中間言語データを介してビットマップデータを作成する手法(以下では「前者の手法」と呼ぶ)は、PDLデータから直接的にビットマップデータを作成する手法(以下では「後者の手法」と呼ぶ)と比べて、以下の点において効果的である。多くのPDLは、同じタイプのデータを記述することができる。例えば、多くのPDLは、線型グラデーションやテキストを記述することができる。第1PDLと第2PDLのそれぞれによって同じ線型グラデーション(例えば左から右に向かって赤色から青色に変わっていくグラデーション)が記述されている場合を例として説明する。
【0021】
上記の例の場合、後者の手法を採用するためには、第1PDLのフォーマットで記述された線型グラデーションのベクタデータからビットマップデータを作成するためのプログラムと、第2PDLのフォーマットで記述された線型グラデーションのベクタデータからビットマップデータを作成するためのプログラムとが必要になる。
【0022】
これに対し、上記の例の場合、前者の手法を採用すると、第1PDLの線型グラデーションのベクタデータから中間言語データが作成され、第2PDLの線型グラデーションのベクタデータから中間言語データ(ベクタデータ)が作成される。この場合、2つの中間言語データは同じになる。そうすると、この中間言語データをビットマップデータに変換するためのプログラムがあれば、第1PDLと第2PDLのどちらで記述された線型グラデーションであっても、ビットマップデータを作成することができる。即ち、前者の手法を採用するためには、第1PDLの線型グラデーションのベクタデータから中間言語データを作成するための第1プログラムと、第2PDLの線型グラデーションのベクタデータから中間言語データを作成するための第2プログラムと、その中間言語データからビットマップデータを作成するための第3プログラムとが必要になる。即ち、第1PDLと第2PDLを処理するためのプログラムにおいて、線型グラデーションのベクタデータからビットマップデータを作成するための第3プログラム(図1の例では多値BMPデータ作成プログラム22)を共通化することができる。確かに、後者の手法と比べると、上記の第1プログラムと第2プログラムが新たに必要になる。しかしながら、ベクタデータ(PDL)をベクタデータ(中間言語)に変換するためのプログラムは、それほど大きなプログラム量を必要としない。ベクタデータをビットマップデータに変換するためのプログラムの方が大きなプログラム量を要する。第1プログラムと第2プログラムが新たに必要にはなるが、第3プログラムを共通化することができるために、全体のプログラム量は後者の手法よりも少なくて済む。
【0023】
多値BMPデータ作成プログラム22は、中間言語データを多諧調(本実施例ではCMYKの256階調)のビットマップデータに変換するためのプログラムである。なお、以下では、多諧調のビットマップデータのことを「多値BMPデータ」と呼ぶことがある。本実施例では、PDLデータから中間言語データを作成する処理と、中間言語データから多値BMPデータを作成する処理との両方において、共通メモリ28が使用される。これらの両処理で利用される共通メモリ28を管理するために、メモリ管理プログラム24が用意されている。即ち、メモリ管理プログラム24は、上記の両処理のメモリ管理を統括して実行するためのプログラムである。共通メモリ28を利用して上記の両処理がどのようにして実行されるのかについては、後で詳しく説明する。プログラム26は、PDLデータ変換処理において必要な他の処理を実行するためのプログラムである。
【0024】
印刷部40は、プログラム記憶領域42と、バッファ48と、バンドメモリ50と、印刷機構52等を有する。なお、本実施例では、PDLデータ変換処理部14の制御部16が、印刷部40の制御部を兼用している。即ち、プログラム記憶領域42に記憶されているプログラム44,46に従って制御部16が処理を実行する。しかしながら、PDLデータ変換処理部14の制御部16とは別の専用の制御部を印刷部40に設けてもよい。
【0025】
プログラム記憶領域42は、二値BMPデータ作成プログラム44と、その他のプログラム46とを記憶している。二値BMPデータ作成プログラム44は、PDLデータ変換処理部14で作成された多値BMPデータから印刷用の低階調(本実施例では「0」と「1」の二階調)のビットマップデータを作成するためのプログラムである。なお、以下では、印刷用のビットマップデータのことを「二値BMPデータ」と呼ぶことがある。プログラム46は、印刷処理において必要な他の処理を実行するためのプログラム(例えば印刷機構52を制御するためのプログラム)である。
【0026】
バッファ48は、PDLデータ変換処理部14から送信された多値BMPデータを一時的に記憶するためのバッファである。バンドメモリ50は、少なくとも1バンド分の二値BMPデータを記憶するためのメモリである。「バンド」について簡単に説明しておく。PC60から印刷するように指示された全てのPDLデータに対応する多値BMPデータを作成し、その後に全ての多値BMPデータから全ての二値BMPデータを作成し、その後に印刷を開始するという手法が考えられる。しかしながら、この場合、全てのPDLデータに対応する多値BMPデータ及び二値BMPデータを記憶するための大容量のメモリが必要になる。本実施例のプリンタ10は、多値BMPデータ及び二値BMPデータを記憶するためのメモリ容量を圧縮するために、「バンド」という概念を用いて多値BMPデータ及び二値BMPデータを少しずつ作成して順に印刷する手法を採用する。本実施例では、1つのバンドのバンド幅は、例えば、インクジェットヘッドが1回の走査によって印刷することが可能である範囲(1ページより少ない範囲)に基づいて設定される。
【0027】
詳しくは後述するが、本実施例では、PDLデータ変換処理部14は、1ページ分のPDLデータから1ページ分の中間言語データを作成する。PDLデータ変換処理部14は、1ページ分の中間言語データからページの先頭の1バンド分の多値BMPデータを作成する。1バンド分の多値BMPデータは、PDLデータ変換処理部14から印刷部40に送信される。PDLデータ変換処理部14は、送信された多値BMPデータを削除する。PDLデータ変換処理部14は、これらの処理をバンド単位で繰り返す。例えば、PDLデータ変換処理部14は、1バンド分の多値BMPデータを作成し、それを全て送信し終えてから多値BMPデータを削除し、その後に次のバンドの多値BMPデータを作成してもよい。この場合、PDLデータ変換処理部14は、1バンド分のメモリサイズを共通メモリ28に確保すれば足りる。しかしながら、本実施例では、PDLデータ変換処理部14は、1バンド分の多値BMPデータを印刷部40に送信している間に、次のバンドの多値BMPデータを作成することを開始する。これにより、多値BMPデータを高速で作成して印刷部40に提供することを実現している。この処理を実行する場合、PDLデータ変換処理部14は、少なくとも2バンド分の多値BMPデータを記憶するためのメモリサイズを共通メモリ28に確保する必要がある。1バンド分の多値BMPデータを削除する前に、次のバンドの多値BMPデータを作成することを開始するからである。
【0028】
印刷部40は、PDLデータ変換処理部14から送信された1バンド分の多値BMPデータを受信する。印刷部40は、1バンド分の多値BMPデータから1バンド分の二値BMPデータを作成する。印刷部40は、1バンド分の二値BMPデータに従って印刷する。印刷部40は、印刷が終了した二値BMPデータを削除する。例えば、印刷部40は、1バンド分の二値BMPデータを作成し、それを全て印刷し終えてから二値BMPデータを削除し、その後に次のバンドの二値BMPデータを作成してもよい。この場合、バンドメモリ50は、1バンド分のメモリサイズがあれば足りる。しかしながら、本実施例では、印刷部40は、1バンド分の二値BMPデータに従って印刷している間に、次のバンドの二値BMPデータを作成することを開始する。これにより、高速で印刷することを実現している。この処理を実行する場合、バンドメモリ50は、少なくとも2バンド分のBMPデータを記憶するためのメモリサイズが必要である。1バンド分の二値BMPデータを削除する前に、次のバンドの二値BMPデータを作成することを開始するからである。
【0029】
印刷機構52は、印刷媒体を搬送するための機構と、印刷媒体に印刷するための機構(例えばインクジェットタイプやレーザタイプの印刷機構)とを有する。制御部16は、プログラム記憶領域42に記憶されているプログラム46とバンドメモリ50の記憶内容に従って、印刷機構52の駆動制御を実行する。
【0030】
(PDLデータ変換処理)
続いて、制御部16が実行するPDLデータ変換処理の内容について説明する。制御部16は、プログラム20,22,24,26に従ってPDLデータ変換処理を実行する。図2〜図4は、PDLデータ変換処理のフローチャートを示す。PDLデータ変換処理は、PC60からの印刷指示及びPDLデータがネットワークインターフェイス12に入力されたことをトリガとして開始される。ネットワークインターフェイス12に入力されたPDLデータは、インターフェイス用バッファ13に格納される。インターフェイス用バッファ13は、PC60からの全てのPDLデータを同時に記憶することができる程度の大きなメモリサイズを有している必要はなく、少ないメモリサイズを有している。制御部16は、インターフェイス用バッファ13に格納されたPDLデータに対して後述の処理を実行するとPDLデータを削除し、その後に次のPDLデータをPC60からダウンロードすることを繰り返す。
【0031】
まず、制御部16は、共通メモリ28の中の使用可能なメモリサイズを特定する(S10)。次いで、制御部16は、多値BMPデータを作成するために必要なメモリサイズ(以下では「多値BMPデータ用メモリサイズ」と呼ぶことがある)を特定する(S12)。本実施例のS12の処理では、制御部16は、2バンド分の多値BMPデータを作成するために必要なメモリサイズを特定する。しかしながら、制御部16は、2バンド分以上の多値BMPデータを作成するために必要なメモリサイズを特定してもよい。なお、S10で使用可能なメモリサイズを特定するとともにS12で多値BMPデータ用メモリサイズを特定するということは、「PDLデータから中間言語を作成するための処理で使用可能なメモリサイズ(以下では「中間言語データ用メモリサイズ」と呼ぶことがある)を特定する」と言うこともできる。
【0032】
次いで、制御部16は、処理対象ページPNとして「1」を特定する(S14)。即ち、1ページ目のPDLデータに基づいて以下の各処理を実行する。制御部16は、処理対象ページ(現段階では1ページ目)のPDLデータがインターフェイス用バッファ13に存在するのか否かを判断する(S16)。ここでNOの場合、図4のS50に進む。一方において、ここでYESの場合、S18に進む。
【0033】
実際のPDLデータは、複数のコマンド(ベクタデータ)によって構成される。1ページ分のPDLデータの中にも複数のコマンドが含まれている。図5は、PDLデータ100の構成を簡単に示す。PDLデータ100は、複数ページ分のデータを含んでいる。第1ページは、複数のコマンドCP1,CP2,CP3、・・・CPnによって構成されている(図5においてはCP1〜CP3のみを記載している)。即ち、第1ページの先頭のコマンドがCP1であり、2番目のコマンドがCP2であり、3番目のコマンドがCP3である。同様に、第2ページ以降も、複数のコマンド(図示省略)によって構成されている。以下の各処理は、1つのコマンドを単位として実行される。即ち、図5の例の場合、コマンドCP1についてS18以降の処理が実行され、次いでコマンドCP2についてS18以降の処理が実行される。第1ページに含まれる最後のコマンドCP3についてS18以降の処理が実行されるまで、このルーチンが繰り返される。
【0034】
S18では、制御部16は、インターフェイス用バッファ13に格納されているPDLデータの1つのコマンド(現段階ではコマンドCP1)のデータサイズに基づいて、そのコマンドを中間言語に変換したら多値BMPデータ用のメモリサイズを圧迫してしまうのか否かを判断する。具体的には、以下の処理を行なって判断する。
【0035】
まず、制御部16は、PDLデータのコマンドのデータサイズを特定する。制御部16は、特定されたデータサイズに基づいて、コマンドから作成されるべき中間言語データのデータサイズを特定する。本実施例では、制御部16は、コマンドのデータサイズと、コマンドから作成されるべき中間言語データのデータサイズとが等しくなるものと推定して、中間言語データのデータサイズを特定する。例えば、コマンドCP1のデータサイズが「XXバイト」である場合、制御部16は、中間言語データのデータサイズとして「XXバイト」を特定する。なお、制御部16は、上記と異なる手法を利用して、PDLデータのコマンドから作成されるべき中間言語データのデータサイズを特定してもよい。例えば、プリンタ10は、PDLデータの各コマンドについて、当該コマンドから作成されるべき中間言語データのデータサイズを記憶していてもよい。この場合、制御部16は、上記の記憶内容を読み込むことによって中間言語データのデータサイズを特定してもよい。また、例えば、プリンタ10は、PDLデータのコマンドのデータサイズに乗算するべき比率を記憶しておいてもよい。この場合、制御部16は、PDLデータのコマンドのデータサイズに上記の比率を乗算することによって、中間言語データのデータサイズを特定してもよい。
【0036】
次いで、制御部16は、上記のようにして特定されたデータサイズと、共通メモリ28内に存在する中間言語データのデータサイズとの和(以下では「合計データサイズ」と呼ぶ)とを算出する。例えば、図5のPDLデータ100のコマンドCP1について本処理が実行されている場合、共通メモリ28内に中間言語データは存在しない。この場合、コマンドCP1から作成されるべき中間言語データのデータサイズが上記の合計データサイズになる。続いて、制御部16は、上記の合計データサイズが中間言語データ用メモリサイズ(S10で特定された使用可能なメモリサイズからS12で特定された多値BMP用データサイズを減算した値)を超えるのか否かを判断する。これにより、S18の処理が実行される。なお、S18の処理を実行するための手法は、上記の手法に限られない。他の手法を採用することができる。他の手法については、後で述べる。
【0037】
図6は、共通メモリ28を概略的に示す。符号120は、S10で特定された使用可能なメモリサイズを示す。符号130は、S12で特定された多値BMPデータ用のメモリサイズを示す。符号140は、中間言語データ用メモリサイズを示す。上記のS18の処理では、PDLデータ100のコマンド(現時点ではCP1)を中間言語データに変換したら中間言語データの合計データサイズが中間言語データ用のメモリサイズ140を超えてしまうのか否かを判断する。ここでNOと判断された場合、S20に進む。
【0038】
S20では、制御部16は、PDLデータ100のコマンドCP1から作成されるべき中間言語データのデータサイズを共通メモリ28内に確保する。次いで、制御部16は、中間言語データ作成プログラム20に従って、PDLデータ100のコマンドCP1を中間言語データに変換する(S22)。制御部16は、この中間言語データを共通メモリ28に書き込む。図7は、コマンドCP1から作成された中間言語データCM1が共通メモリ28に格納されている様子を示す。
【0039】
続いて、制御部16は、S16に戻って次のコマンドCP2を読み込む。次いで、制御部16は、コマンドCP2を中間言語に変換したら多値BMPデータ用のメモリサイズ130を圧迫してしまうのか否かを判断する(S18)。図7に示すように、コマンドCP2から作成されるべき中間言語データCM2を共通メモリ28に書き込むと、合計データサイズが中間言語データ用メモリサイズ140を超えてしまう。この場合、制御部16は、S18でYESと判断し、図3のS30に進む。
【0040】
S30では、制御部16は、共通メモリ28内に圧縮された多値BMPデータ(以下では「圧縮多値BMPデータ」と呼ぶことがある)が存在するのか否かを判断する。コマンドCP2を処理する時点では、圧縮多値BMPデータは存在しない。この場合、制御部16は、S30でNOと判断し、S32をスキップし、S34に進む。S34では、制御部16は、多値BMPデータ作成プログラム22に従って、中間言語データCM1を多値BMPデータに変換する。制御部16は、この多値BMPデータを共通メモリ28に書き込む。図8は、中間言語データCM1から作成された多値BMPデータCB1が共通メモリ28に格納されている様子を示す。
【0041】
次いで、制御部16は、S34で作成された多値BMPデータCB1を圧縮することによって、圧縮多値BMPデータCB1’を作成する(S36)。図9は、圧縮多値BMPデータCB1’が共通メモリ28に格納されている様子を示す。続いて、制御部16は、中間言語データCM1を共通メモリ28から削除する(S38)。この場合、図9に示されるように、中間言語データCM1を格納していた部分が開放される。S38を終えると、制御部16は、図2のS20及びS22を実行する。これにより、コマンドCP2から中間言語データCM2に変換され、中間言語データCM2が共通メモリ28に書き込まれる。図10は、中間言語データCM2が共通メモリ28に格納されている様子を示す。
【0042】
続いて、制御部16は、S16に戻って次のコマンドCP3を読み込む。次いで、制御部16は、コマンドCP3を中間言語に変換したら多値BMPデータ用のメモリサイズ130を圧迫してしまうのか否かを判断する(S18)。図10に示すように、コマンドCP3から作成されるべき中間言語データCM3を共通メモリ28に書き込むと、合計データサイズ(CM2とCM3の合計データサイズ)が中間言語データ用メモリサイズ140を超えてしまう。この場合、制御部16は、S18でYESと判断し、図3のS30に進む。なお、S18の判断処理は、圧縮多値BMPデータCB1’を考慮して実行してもよい。即ち、制御部16は、CM2とCM3の合計データサイズと圧縮多値BMPデータCB1’のデータサイズとの和が、中間言語データ用メモリサイズ140を超えるのか否かを判断してもよい。即ち、この場合、共通メモリ28内のフリーのメモリサイズが多値BMPデータ用メモリサイズ130以下になるのか否かを判断することに等しい。
【0043】
圧縮多値BMPデータCB1’が存在するために、制御部16は、S30でYESと判断する。この場合、制御部16は、圧縮多値BMPデータCB1’を伸張することによって、多値BMPデータCB1を作成する(S32)。図11は、多値BMPデータCB1が共通メモリ28に格納されている様子を示す。次いで、制御部16は、中間言語データCM2を多値BMPデータCB2に変換する(S34)。なお、図11に示されるように、本実施例では、多値BMPデータCB2を作成すると、多値BMPデータの合計データサイズ(CB1とCB2の合計データサイズ)が多値BMPデータ用メモリサイズ130を超えてしまう。しかしながら、中間言語データ用メモリサイズ140が余っているために、その部分も利用しながら多値BMPデータを作成する。即ち、この時点でメモリフルのエラーにならない。S34を実行することによって、多値BMPデータCB1と多値BMPデータCB2とから新たな多値BMPデータCB1,CB2が作成される。
【0044】
次いで、制御部16は、S34で作成された多値BMPデータCB1,CB2を圧縮することによって、圧縮多値BMPデータCB1’+CB2’を作成する(S36)。図12は、圧縮多値BMPデータCB1’+CB2’が共通メモリ28に格納されている様子を示す。次いで、制御部16は、中間言語データCM2を共通メモリ28から削除する(S38)。S38を終えると、制御部16は、図2のS20及びS22を実行する。これにより、コマンドCP3から中間言語データCM3に変換され、中間言語データCM3が共通メモリ28に書き込まれる。図12は、中間言語データCM3が共通メモリ28に格納されている様子を示す。
【0045】
図5のPDLデータ100のコマンドCP1,CP2,CP3についてS18以降の処理が実行されると、制御部16は、S16でNOと判断する。この場合、図4のS50に進む。S50では、制御部16は、処理対象バンドBNとして「1」を特定する(S50)。制御部16は、処理対象バンド(現時点では「1」)に含まれる圧縮多値BMPデータが共通メモリ28に存在するのか否かを判断する(S52)。例えば、図12に示される圧縮多値BMPデータCB1’+CB2’が処理対象バンドに含まれる場合、制御部16は、S52でYESと判断し、S54に進む。S54では、制御部16は、圧縮多値BMPデータCB1’+CB2’を伸張することによって、多値BMPデータCB1+CB2を作成する。多値BMPデータCB1+CB2は、共通メモリ28に書き込まれる。
【0046】
次いで、制御部16は、処理対象バンド(現時点では「1」)に含まれる中間言語データが共通メモリ28に存在するのか否かを判断する(S56)。例えば、図12に示される中間言語データCM3が処理対象バンドに含まれる場合、制御部16は、S56でYESと判断し、S58に進む。S58では、制御部16は、中間言語データCM3を多値BMPデータCB3に変換する。多値BMPデータCB3は、共通メモリ28に書き込まれる。これにより、上記の多値BMPデータCB1+CB2と多値BMPデータCB3とから新たな多値BMPデータが作成される。制御部16は、多値BMPデータに変換された中間言語データCM3を共通メモリ28から削除する(S60)。
【0047】
続いて、制御部16は、処理対象バンド(現時点では「1」)の多値BMPデータを印刷部40に送信する(S62)。これにより、印刷部40(制御部16)は、処理対象バンドの多値BMPデータから二値BMPデータを作成し、その二値BMPデータに従って印刷を開始する。制御部16は、S62で多値BMPデータの送信を開始するとすぐにS64以降の処理を実行する。まず、制御部16は、処理対象バンドBNをインクリメントする(S64)。現時点では、処理対象バンドBNが「2」になる。次いで、制御部16は、処理対象バンドBNが1ページの最終バンドを超えたのか否かを判断する(S66)。ここでNOの場合、制御部16は、S52以降の処理を繰り返す。なお、制御部16は、S62で1バンド分の多値BMPデータが送信された後に、その多値BMPデータを共通メモリ28から削除する。
【0048】
一方において、S66でYESの場合、即ち、1ページ分の全てのバンドについて処理を終えた場合、制御部16は、処理対象ページPN(現時点では「1」)の次のページのPDLデータがインターフェイス用バッファ13に存在するのか否かを判断する(S68)。例えば、図5のPDL100の場合、第2ページ以降が存在する。この場合、制御部16は、S68でYESと判断し、処理対象ページPNをインクリメントする(S70)。現時点では、処理対象ページPNが「2」になる。次いで、制御部16は、S18に戻って、2ページ目以降について同様に処理を実行する。
【0049】
上記のプリンタ10は、中間言語データ作成プログラム20と多値BMPデータ作成プログラム22のそれぞれの処理のメモリ管理を統括的に実行する。メモリを効率的に利用しながら二段階に亘ってデータを変換することができる。仮に、メモリ管理を個別に行なうと、各プログラム20,22の処理のためにメモリを分配する必要がある。この場合、例えば、図11に示すように、中間言語データ用メモリサイズ140ではメモリが余っているにもかかわらず、多値BMPデータ用メモリサイズ130がフルになると、その時点でエラーになってしまう。これに対し、本実施例のプリンタ10のように各プログラム20,22の処理のためのメモリ管理を統括的に実行すると、各プログラム20,22の処理で共通メモリ28を共用することができる。このために、メモリの一部が余っているにもかかわらずメモリフルのエラーが生じてしまうという事象が発生することを避けることができる。本実施例によると、二段階に亘ってデータを変換する処理においてメモリフルのエラーの発生を抑制することができる。
【0050】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
【0051】
(1)上述したように、図2のS18の判断処理の手法は様々である。以下の各手法を採用してもよい。例えば、図2のS10において使用可能なメモリサイズとして10000キロバイトが特定され、図2のS12において多値BMPデータ用メモリサイズとして2000キロバイトが特定されたものとする(即ち中間言語データ用及びその他で使用可能なメモリサイズは8000キロバイトである)。この例に基づいて、各手法について説明する。
【0052】
(1−1)上記の(1)の例において、7000キロバイトの中間言語データのみが共通メモリ28に存在し、PDLデータの次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが9000キロバイトになる場合、制御部16は、S18でYESと判断してもよい。即ち、この例の場合、中間言語データの合計データサイズ(9000キロバイト)と中間言語データ用メモリサイズ(8000キロバイト)とを比較することによって、S18の処理を実行することになる。これが上記の実施例の手法である。
【0053】
(1−2)上記の(1)の例において、6000キロバイトの中間言語データと1000キロバイトの圧縮多値BMPデータとが共通メモリ28に存在し、次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが7500キロバイトになる場合、制御部16は、S18でNOと判断してもよい。中間言語データの合計データサイズが7500キロバイトであり、中間言語データ用メモリサイズ(8000キロバイト)を超えないからである。この例の場合、中間言語データの合計データサイズ(7500キロバイト)と中間言語データ用メモリサイズ(8000キロバイト)とを比較することによって、S18の処理を実行することになる。これも上記の実施例の手法である。
【0054】
(1−3)一方において、上記の(1−2)の例において、制御部16は、S18でYESと判断してもよい。中間言語データの合計データサイズ(7500キロバイト)と圧縮多値BMPデータのデータサイズ(1000キロバイト)との和が8500キロバイトであり、中間言語データ用メモリサイズ(8000キロバイト)を超えるからである。即ち、この例の場合、中間言語データの合計データサイズ(7500キロバイト)と、中間言語データ用メモリサイズ(8000キロバイト)から圧縮多値BMPデータのデータサイズ(1000キロバイト)が減算された値(7000キロ)とを比較することによって、S18の処理を実行することになる。
【0055】
(1−4)また、上記の(1)の例において、5000キロバイトの中間言語データと他の処理で作成された1000キロバイトの他処理データと1000キロバイトの圧縮多値BMPデータとが共通メモリ28に存在し、次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが6500キロバイトになる場合、制御部16は、S18でNOと判断してもよい。この例の場合、中間言語データの合計データサイズ(6500キロバイト)と中間言語データ用メモリサイズ(8000キロバイト)とを比較することによって、S18の処理を実行することになる。これは、上記の(1−2)と同様の手法である。
【0056】
(1−5)一方において、上記の(1−4)の例において、制御部16は、S18でYESと判断してもよい。中間言語データの合計データサイズ(6500キロバイト)と上記の他処理データのデータサイズ(1000キロバイト)と圧縮多値BMPデータのデータサイズ(1000キロバイト)との和が8500キロバイトであり、中間言語データ用メモリサイズ(8000キロバイト)を超えるからである。即ち、この例の場合、中間言語データの合計データサイズ(6500キロバイト)と、中間言語データ用メモリサイズ(8000キロバイト)から上記の他処理データ及び圧縮多値BMPデータのデータサイズ(1000+1000キロバイト)が減算された値(6000キロ)とを比較することによって、S18の処理を実行することになる。なお、メモリ容量が不足する場合、上記の他処理データにより占有されているメモリを開放する構成を採用することもできる。
【0057】
上記の(1−1)〜(1−5)のいずれの手法であっても、PDLデータの次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが第1所定値以上になるのか否かを判断することになる。即ち、上記の(1−1)、(1−2)、及び、(1−4)では、上記の第1所定値が8000キロバイトである。上記の(1−3)では、上記の第1所定値が7000キロバイトである。上記の(1−5)では、上記の第1所定値が6000キロバイトである。
【0058】
なお、上記の(1−3)及び(1−5)の手法は、PDLデータの次のコマンドから中間言語データが作成されたら中間言語データの合計データサイズが増加することに起因して、共通メモリ内の残存メモリサイズが第2所定値以下になるのか否か判断することに等しい。即ち、上記の(1−3)では、上記の残存メモリサイズが1500キロバイト(10000−7500−1000)になり、上記の第2所定値が2000キロバイト(多値BMPデータ用メモリサイズ)になる。また、上記の(1−5)でも、上記の残存メモリサイズが1500キロバイトになり(10000−6500−1000−1000)、上記の第2所定値が2000キロバイトになる。
【0059】
(2)上記の実施例では、プリンタ10は、中間言語データから多値BMPデータを作成し、多値BMPデータから二値BMPデータを作成する。しかしながら、プリンタ10は、中間言語データから直接的に二値BMPデータを作成してもよい。この場合、図2〜図4の各処理において、二値BMPデータが作成されることになる。
【0060】
(3)また、上記の実施例では、プリンタ10は、PDLデータから中間言語データを作成し、中間言語データからBMPデータを作成する。しかしながら、上記の実施例の技術は、二段階に亘ってデータを変換するあらゆる技術に適用することができる。例えば、PDLデータから所定種類のPDLデータ(例えばPDF)を作成し、その所定種類のPDLデータからBMPデータを作成する技術にも適用することができる。
【0061】
(4)上記の実施例では、多値BMPデータをバンド単位で作成するとともに、二値BMPデータをバンド単位で作成する(バンドメモリ50を利用する)。これに代えて、PDLデータ変換処理部14は、1ページ分の多値BMPデータを作成した後に、多値BMPデータを印刷部40に送信するようにしてもよい。この場合、印刷部40は、バンドメモリ50に代えて、少なくとも1ページ分の二値BMPデータを記憶することができるページメモリを利用する。
【0062】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【図面の簡単な説明】
【0063】
【図1】プリンタネットワークシステムの構成の一例を示す。
【図2】PDL変換処理のフローチャートを示す。
【図3】図2の続きのフローチャートを示す。
【図4】図2の続きのフローチャートを示す。
【図5】PDLデータの構成を簡単に示す。
【図6】共通メモリを示す。
【図7】中間言語データが格納されている状態の共通メモリを示す。
【図8】中間言語データと多値BMPデータが格納されている状態の共通メモリを示す。
【図9】圧縮多値BMPデータが格納されている状態の共通メモリを示す。
【図10】中間言語データと圧縮多値BMPデータが格納されている状態の共通メモリを示す。
【図11】中間言語データと多値BMPデータが格納されている状態の共通メモリを示す。
【図12】中間言語データと圧縮多値BMPデータが格納されている状態の共通メモリを示す。
【符号の説明】
【0064】
10:プリンタ
12:ネットワークインターフェイス
13:インターフェイス用バッファ
14:PDLデータ変換処理部
16:制御部
18:プログラム記憶領域
20:中間言語データ作成プログラム
22:多値BMPデータ作成プログラム
24:メモリ管理プログラム
28:共通メモリ
40:印刷部
42:プログラム記憶領域
44:二値BMPデータ作成プログラム
48:バッファ
50:バンドメモリ
52:印刷機構
70:LAN回線
100:PDLデータ
120:使用可能なメモリサイズ
130:多値BMPデータ用メモリサイズ
140:中間言語データ用メモリサイズ
CP1,CP2,CP3:PDLデータのコマンド
CM1,CM2,CM3:中間言語データ
CB1,CB2,CB3:多値BMPデータ
CB1’,CB2’,CB3’:圧縮多値BMPデータ
【特許請求の範囲】
【請求項1】
第1データから第2データを作成し、その第2データから第3データを作成するデータ処理装置であり、
第1データを入力する第1データ入力手段と、
第1データから第2データを作成するための第1プログラムを記憶している第1プログラム記憶手段と、
第2データから第3データを作成するための第2プログラムを記憶している第2プログラム記憶手段と、
第2データと第3データの両方を格納するために利用されるメモリと、
第1プログラムに従って処理を実行することが可能であり、第2プログラムに従って処理を実行することが可能であり、それらの両処理のためのメモリ管理を統括して実行する制御手段とを備え、
その制御手段は、
(1)第1データを構成するデータから第2データを作成し、
(2)第1データを構成する次のデータが存在するのか否かを判断し、
(3)前記(2)で肯定的に判断された場合に、第1データを構成する前記次のデータから第2データが作成されたら第2データの合計データサイズが所定値以上になるのか否かを判断し、
(4)前記(3)で否定的に判断された場合に、前記(1)を実行させ、
(5)第2データから第3データを作成し、
(6)第3データを圧縮することによって圧縮第3データを作成し、
(7)第2データを削除し、
(8)前記(3)で肯定的に判断された場合に、前記(5)と前記(6)と前記(7)を実行させ、
(9)圧縮第3データを伸張し、
(10)前記(2)で否定的に判断された場合に、前記圧縮第3データが存在することを条件として前記(9)を実行させる
ことを特徴とするデータ処理装置。
【請求項2】
前記制御手段は、圧縮第3データが存在する状態において前記(3)で肯定的に判断された場合に、
前記(9)を実行させるとともに、
前記(5)で作成された第3データと前記(9)で伸張された第3データとを含む新たな第3データについて前記(6)を実行させる
ことを特徴とする請求項1に記載のデータ処理装置。
【請求項3】
前記第1データは、ページ記述言語で記述されたデータであり、
前記第2データは、前記ページ記述言語と異なる種類の言語で記述されたデータであり、
前記第3データは、ビットマップデータである
ことを特徴とする請求項1又は2に記載のデータ処理装置。
【請求項4】
前記制御手段は、前記(2)において、1ページ分の第1データの中に前記次のデータが存在するのか否かを判断する
ことを特徴とする請求項3に記載のデータ処理装置。
【請求項5】
第1データから第2データを作成し、その第2データから第3データを作成するためのコンピュータプログラムであり、
そのコンピュータプログラムは、第1データから第2データを作成するための第1プログラムと、第2データから第3データを作成するための第2プログラムとを含んでおり
そのコンピュータプログラムは、第1プログラムに従って第1データから第2データを作成する処理と、第2プログラムに従って第2データから第3データを作成する処理と、それらの両処理のためのメモリ管理を統括して実行する処理とを含む制御処理をコンピュータに実行させ、
その制御処理は、
(1)第1データを構成するデータから第2データを作成し、
(2)第1データを構成する次のデータが存在するのか否かを判断し、
(3)前記(2)で肯定的に判断された場合に、第1データを構成する前記次のデータから第2データが作成されたら第2データの合計データサイズが所定値以上になるのか否かを判断し、
(4)前記(3)で否定的に判断された場合に、前記(1)を実行させ、
(5)第2データから第3データを作成し、
(6)第3データを圧縮することによって圧縮第3データを作成し、
(7)第2データを削除し、
(8)前記(3)で肯定的に判断された場合に、前記(5)と前記(6)と前記(7)を実行させ、
(9)圧縮第3データを伸張し、
(10)前記(2)で否定的に判断された場合に、前記圧縮第3データが存在することを条件として前記(9)を実行させる
ことを特徴とするコンピュータプログラム。
【請求項1】
第1データから第2データを作成し、その第2データから第3データを作成するデータ処理装置であり、
第1データを入力する第1データ入力手段と、
第1データから第2データを作成するための第1プログラムを記憶している第1プログラム記憶手段と、
第2データから第3データを作成するための第2プログラムを記憶している第2プログラム記憶手段と、
第2データと第3データの両方を格納するために利用されるメモリと、
第1プログラムに従って処理を実行することが可能であり、第2プログラムに従って処理を実行することが可能であり、それらの両処理のためのメモリ管理を統括して実行する制御手段とを備え、
その制御手段は、
(1)第1データを構成するデータから第2データを作成し、
(2)第1データを構成する次のデータが存在するのか否かを判断し、
(3)前記(2)で肯定的に判断された場合に、第1データを構成する前記次のデータから第2データが作成されたら第2データの合計データサイズが所定値以上になるのか否かを判断し、
(4)前記(3)で否定的に判断された場合に、前記(1)を実行させ、
(5)第2データから第3データを作成し、
(6)第3データを圧縮することによって圧縮第3データを作成し、
(7)第2データを削除し、
(8)前記(3)で肯定的に判断された場合に、前記(5)と前記(6)と前記(7)を実行させ、
(9)圧縮第3データを伸張し、
(10)前記(2)で否定的に判断された場合に、前記圧縮第3データが存在することを条件として前記(9)を実行させる
ことを特徴とするデータ処理装置。
【請求項2】
前記制御手段は、圧縮第3データが存在する状態において前記(3)で肯定的に判断された場合に、
前記(9)を実行させるとともに、
前記(5)で作成された第3データと前記(9)で伸張された第3データとを含む新たな第3データについて前記(6)を実行させる
ことを特徴とする請求項1に記載のデータ処理装置。
【請求項3】
前記第1データは、ページ記述言語で記述されたデータであり、
前記第2データは、前記ページ記述言語と異なる種類の言語で記述されたデータであり、
前記第3データは、ビットマップデータである
ことを特徴とする請求項1又は2に記載のデータ処理装置。
【請求項4】
前記制御手段は、前記(2)において、1ページ分の第1データの中に前記次のデータが存在するのか否かを判断する
ことを特徴とする請求項3に記載のデータ処理装置。
【請求項5】
第1データから第2データを作成し、その第2データから第3データを作成するためのコンピュータプログラムであり、
そのコンピュータプログラムは、第1データから第2データを作成するための第1プログラムと、第2データから第3データを作成するための第2プログラムとを含んでおり
そのコンピュータプログラムは、第1プログラムに従って第1データから第2データを作成する処理と、第2プログラムに従って第2データから第3データを作成する処理と、それらの両処理のためのメモリ管理を統括して実行する処理とを含む制御処理をコンピュータに実行させ、
その制御処理は、
(1)第1データを構成するデータから第2データを作成し、
(2)第1データを構成する次のデータが存在するのか否かを判断し、
(3)前記(2)で肯定的に判断された場合に、第1データを構成する前記次のデータから第2データが作成されたら第2データの合計データサイズが所定値以上になるのか否かを判断し、
(4)前記(3)で否定的に判断された場合に、前記(1)を実行させ、
(5)第2データから第3データを作成し、
(6)第3データを圧縮することによって圧縮第3データを作成し、
(7)第2データを削除し、
(8)前記(3)で肯定的に判断された場合に、前記(5)と前記(6)と前記(7)を実行させ、
(9)圧縮第3データを伸張し、
(10)前記(2)で否定的に判断された場合に、前記圧縮第3データが存在することを条件として前記(9)を実行させる
ことを特徴とするコンピュータプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2009−241449(P2009−241449A)
【公開日】平成21年10月22日(2009.10.22)
【国際特許分類】
【出願番号】特願2008−91529(P2008−91529)
【出願日】平成20年3月31日(2008.3.31)
【出願人】(000005267)ブラザー工業株式会社 (13,856)
【Fターム(参考)】
【公開日】平成21年10月22日(2009.10.22)
【国際特許分類】
【出願日】平成20年3月31日(2008.3.31)
【出願人】(000005267)ブラザー工業株式会社 (13,856)
【Fターム(参考)】
[ Back to top ]