(57)【特許請求の範囲】
【請求項１】
アプリケーションからの印刷命令を、所定の印刷装置に適した制御コマンドに変換して出力する印刷制御装置であって、
前記印刷命令を、文字コード又はグリフインデックスを含んだ第１のデータ形式に変換するデータ変換手段と、
前記第１のデータ形式を有する印刷命令を、前記制御コマンドとは異なる形式を有する中間データに変換し、記憶する中間データ生成手段と、
前記中間データを前記制御コマンドに変換して出力する制御コマンド生成手段とを有し、
前記中間データ生成手段が、
前記第１のデータ形式を有する印刷命令が、前記グリフインデックスを含む場合、このグリフインデックスに対応する文字コードを取得する文字コード取得手段を有し、前記第１のデータ形式を有する印刷命令に含まれていた、又は前記文字コード取得手段で取得された文字コードを用いて前記中間データを生成することを特徴とする印刷制御装置。
【請求項２】
前記データ変換手段が、
前記印刷命令に指定された文字コードが、前記印刷制御装置で文字コードとして取り扱いできない体系の文字コードである場合に前記グリフインデックスを、それ以外の文字コードである場合に前記文字コードをそれぞれ含んだ前記第１のデータ形式を有する印刷命令に変換することを特徴とする請求項１記載の印刷制御装置。
【請求項３】
前記データ変換手段が、１つのグリフインデックスに対して複数種の体系における文字コードが対応付けされたグリフインデックステーブルを用いて前記印刷命令に含まれる文字コードを対応するグリフインデックスに変換することを特徴とする請求項１又は請求項２記載の印刷制御装置。
【請求項４】
前記文字コード取得手段が、前記グリフインデックステーブルを用いて前記第１のデータ形式を有する印刷命令に含まれる前記グリフインデックスから対応する文字コードを得ることを特徴とする請求項３記載の印刷制御装置。
【請求項５】
前記中間データ生成手段が、
前記文字コード取得手段が前記グリフインデックスから対応する文字コードを取得した際、１つの前記グリフインデックスに対して複数の文字コードが対応していた場合には、前記グリフインデックスからビットマップ変換を行った結果を前記中間データとして記憶することを特徴とする請求項１乃至請求項４のいずれか１項に記載の印刷制御装置。
【請求項６】
アプリケーションからの印刷命令を、所定の印刷装置に適した制御コマンドに変換して出力する印刷制御方法であって、
前記印刷命令を、文字コード又はグリフインデックスを含んだ第１のデータ形式に変換するデータ変換ステップと、
前記第１のデータ形式を有する印刷命令を、前記制御コマンドとは異なる形式を有する中間データに変換し、記憶する中間データ生成ステップと、
前記中間データを前記制御コマンドに変換して出力する制御コマンド生成ステップとを有し、
前記中間データ生成ステップが、
前記第１のデータ形式を有する印刷命令が、前記グリフインデックスを含む場合、このグリフインデックスに対応する文字コードを取得する文字コード取得ステップを有し、前記第１のデータ形式を有する印刷命令に含まれていた、又は前記文字コード取得ステップで取得された文字コードを用いて前記中間データを生成することを特徴とする印刷制御方法。
【請求項７】
前記データ変換ステップが、
前記印刷命令に指定された文字コードが、前記印刷制御方法で文字コードとして取り扱いできない体系の文字コードである場合に前記グリフインデックスを、それ以外の文字コードである場合に前記文字コードをそれぞれ含んだ前記第１のデータ形式を有する印刷命令に変換することを特徴とする請求項６記載の印刷制御方法。
【請求項８】
前記データ変換ステップが、１つのグリフインデックスに対して複数種の体系における文字コードが対応付けされたグリフインデックステーブルを用いて前記印刷命令に含まれる文字コードを対応するグリフインデックスに変換することを特徴とする請求項６又は請求項７記載の印刷制御方法。
【請求項９】
前記文字コード取得ステップが、前記グリフインデックステーブルを用いて前記第１のデータ形式を有する印刷命令に含まれる前記グリフインデックスから対応する文字コードを得ることを特徴とする請求項８記載の印刷制御方法。
【請求項１０】
前記中間データ生成ステップが、
前記文字コード取得ステップが前記グリフインデックスから対応する文字コードを取得した際、１つの前記グリフインデックスに対して複数の文字コードが対応していた場合には、前記グリフインデックスからビットマップ変換を行った結果を前記中間データとして記憶することを特徴とする請求項６乃至請求項９のいずれか１項に記載の印刷制御方法。
【請求項１１】
コンピュータを請求項１乃至請求項５のいずれか１項に記載の印刷制御装置として機能させることを特徴とするコンピュータプログラム。
【請求項１２】
請求項１１記載のコンピュータプログラムを格納したコンピュータ読みとり可能な記憶媒体。
【請求項１３】
グリフインデックスを取得し、取得したグリフインデックスを文字コードに変換し、変換した文字コードを用いて文字描画情報を中間データ形式でスプールするスプーラと、
前記スプーラによってスプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得し、取得したグリフインデックスを用いて文字グリフを取得するドライバとを有することを特徴とする印刷制御装置。
【請求項１４】
グリフインデックスを取得し、
取得したグリフインデックスを文字コードに変換し、
変換した文字コードを用いて文字描画情報を中間データ形式でスプールし、
スプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得し、
取得したグリフインデックスを用いて文字グリフを取得することを特徴とする印刷制御方法。
【請求項１５】
グリフインデックスを取得する工程のプログラムと、
取得したグリフインデックスを文字コードに変換する工程のプログラムと、
変換した文字コードを用いて文字描画情報を中間データ形式でスプールする工程のプログラムと、
スプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得する工程のプログラムと、
取得したグリフインデックスを用いて文字グリフを取得する工程のプログラムとを有することを特徴とするコンピュータプログラム。
【請求項１６】
グリフインデックスを取得する工程のプログラムと、
取得したグリフインデックスを文字コードに変換する工程のプログラムと、
変換した文字コードを用いて文字描画情報を中間データ形式でスプールする工程のプログラムと、
スプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得する工程のプログラムと、
取得したグリフインデックスを用いて文字グリフを取得する工程のプログラムとを記憶することを特徴とするコンピュータ読みとり可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、プリンタ等の印刷装置に印刷用の制御コマンドを供給する印刷制御装置及び印刷制御方法に関し、特に、アプリケーションプログラムからの印刷命令を一旦、最終的に前記プリンタに送付する印刷データとは異なる形式のデータ形式（いわゆる中間コード）に変換した後、再度制御コマンドに変換する形式の印刷制御装置及び印刷制御方法に関する。
【０００２】
【従来の技術】
図３は、従来、直接、あるいはネットワーク経由で接続されているプリンタ１５００に対して印刷指示を行う印刷制御装置としてのホストコンピュータにおいて、印刷処理に関わる機能構成を大まかに示した図である。印刷処理は、ホストコンピュータのユーザが、ワードプロセッサプログラムや表計算プログラム等のアプリケーション２０１から、印刷指示を行うことによって開始する。
【０００３】
アプリケーション２０１は、文字描画データ等を含むアプリケーションデータを解析して、例えばＯＳ（基本ソフト）が提供するグラフィックエンジン２０２をコールする。
グラフィックエンジン２０２は、プリンタ１５００の種類に合わせて用意されたプリンタドライバ２０３をロードし、アプリケーション２０１の出力をプリンタドライバ２０３に受け渡す。そして、アプリケーション２０１から受け取るＧＤＩ(Graphic Device Interface)関数からＤＤＩ(Device Driver Interface)関数に変換して、プリンタドライバ２０３へＤＤＩ関数を出力する。
【０００４】
プリンタドライバ２０３は、グラフィックエンジン２０２から受け取ったＤＤＩ関数に基づいて、プリンタが認識可能な制御コマンド、例えばＰＤＬ(Page Description Language)に変換する。変換されたプリンタ制御コマンドは、システムスプーラ２０４を経てインターフェース２１経由でプリンタ１５００へ印刷データとして出力される。
プリンタ１５００ではこの制御コマンドを解釈して、ビットマップデータへ展開し、最終的に紙などの記録媒体に印刷結果が出力される。
【０００５】
図５は、印刷処理における文字描画に必要な情報の例を表す模式図である。図５に示すように、一般的に文字描画では以下の情報が必要である。図５にはまた、指定したフォントによって印刷結果が異なる場合の例を示すが、その説明は後で行う。
・文字コード
文字描画で伝えたいところの文字情報。ASCII、ShiftJIS、Unicode等、予め定められたコード体系に従ったコードが用いられる。ＯＳによっては一部の文字コード（例えばShiftJIS）しかサポートしていない場合がある。イギリスポンド（”£”ではなく、”L”に横棒を付加した文字。以下本明細書でイギリスポンドと言うときはこの文字を指す）やユーロ記号ははShiftJISでの定義は存在しない。そのためこの文字をサポートするUnicode等の他の文字コードを用いて表現する必要がある。OSがShiftJISしかサポートしていない場合、イギリスポンドはそのOS上では表すことができない。このような事態を避けるためにOSでは様々な工夫を行っている。この工夫についてはあとで述べる。
【０００６】
・フォント属性
文字描画に適応するフェース名、グリフへの修飾を表すイタリック／ボールド指定有無、文字の大きさを表すポイント数等の情報。
・フォント
ゴシックや明朝等のフェース名で指定される文字描画形状を表す情報。内部に文字コード毎の描画形状情報（グリフと以下呼ぶ）を有する。フォントの情報形式としては、大きくビットマップフォントとアウトラインフォントに分かれ、TrueType、OpenType等の各種フォーマットが定義されている。フォントの内部情報については、後でもう少し詳しく説明する。
・描画属性
文字の描画位置や、色、クリップの状態等を表す情報。
【０００７】
そして、これらの情報全てが揃わなければ、ユーザが意図した通りの文字描画は成立しない。しかし、文字描画形状を表す情報であるフォントは、例えば著作権の関係等によって、すべての環境に必要とするフォントが存在する保証はない。言い換えるとユーザが文字描画データを作成した環境に存在したフォントが、文字描画が行われる環境で存在しない可能性がある。描画が行われる環境にユーザが意図したフォントが存在しない場合にも、ユーザが意図したフォントもしくはそれに近い形状のフォントで文字描画を行うために、従来、１）フォント置き換え、２）ビットマップ置き換え及び、３）フォント埋め込みという仕組みが知られている。以下、それぞれの仕組みを用いた場合の描画結果を示す図６を参照して、それぞれの仕組みについて説明する。
【０００８】
１．フォント置き換え
文字描画実行環境において、文字描画データ中のフォント属性に近い別のフォントを用いて描画を行う方法。別のフォントを用いるため、図６右最上段に示すように、ユーザが意図していたものとは全く違った形状の文字描画が行われる可能性がある。最悪の場合、意図した文字コードに対応したフォントが文字描画実行環境において存在せず、文字として識別不可能な描画（印刷）が行われることもある。
【０００９】
２．ビットマップ置き換え
文字描画データを作成する時点で文字描画をビットマップに変換して、文字描画をビットマップ描画に変換する方法。通常の見た目はユーザが意図した文字描画と同じになる。しかしビットマップであるために図６右中段に示すように拡大／縮小時にビットマップの解像度の影響で文字品位が落ちる場合がある。
【００１０】
３．フォント埋め込み
文字描画データに対してフォントを埋め込み、文字描画が実際行われる環境までフォントを持っていく方法。埋め込まれたフォントは、文字描画前に文字描画実行環境へ登録されるため、すべての情報が揃いユーザが意図した形式で文字描画される。注意として登録の際には著作権を侵害しないように配慮する必要がある。例えば埋め込みフォントが描画する環境に元々存在しない場合には、印刷終了後に登録したフォントを必ず消去する必要がある。そのためアプリケーションの印刷終了後には、登録したフォントをシステム上から破棄し、他のアプリケーションより使用できない状態にする。フォント埋め込みは指定されたフォントが文字描画領域になくてもユーザが意図した出力を得られるという利点があるが、フォント情報を文字描画データに埋め込むため、文字描画データが大きくなる傾向にある。特に日本語フォントのような文字種の多いフォントを埋め込む場合にこの問題が顕著である。
【００１１】
フォントに格納されている情報について、図７を用いてもう少し詳しく説明する。フォントには主に以下の情報が含まれる。
・フェース名
使用するフォントを識別するための識別名。
・グリフ定義数
フォント内に定義される文字の形状を表すグリフの定義数。
【００１２】
・グリフインデックステーブル
１つのフォントで様々な文字コードに対応するために、TrueTypeやOpenType等のフォントでは、フォント中の個々のグリフに対して文字コードに依存しない識別子を定義し、文字コードに依存しないようにグリフを管理している。一般にこのグリフの識別子をグリフインデックスと呼ぶ。それぞれの文字コード体系に対して、文字コードと対応するグリフインデックスとの対応表を用意することにより、１つのフォントで様々な文字コードへの対応を行うことが可能になる。この対応表をグリフインデックステーブルと呼ぶ。図７には２つのグリフインデックステーブルが示されている。一般的なグリフインデックステーブルでは、文字コードからグリフインデックスを引くデータ形式となっている。
【００１３】
・グリフ
文字の形状を表す情報。グリフを表す方法としては、ビットマップ、パス、曲線等の形式がある。定義された各々のグリフは、フォント内ではフォント依存のグリフインデックスによって識別される。グリフインデックスはフォント依存であるため、図７に示すように、”A”のグリフインデックスが、”ゴシック”フォントでは0x0001、”Arial”フォントでは0x0011と、通常同じ文字でもフォントによってグリフインデックスは異なる。
【００１４】
図７の”ゴシック”フォント（日本語用フォント）におけるイギリスポンドや、Arialフォント（英数字用フォント）における”ア”、”イ”のように、フォントによってグリフが定義されていない文字も存在する。そのような文字を印刷しようとした場合、図５の右側に示すように、指定したフォントによって”・”や”□”等のグリフ不定義の文字を表す文字が印刷される。
【００１５】
ところで例えば内部文字コードとしてShiftJISしかサポートしていないＯＳの場合、イギリスポンドのグリフが定義されている”Arial”フォントであっても、ShiftJISでの文字コードの定義が存在せず、イギリスポンドが表示できない。ＯＳの商業利用上のためにはイギリスポンド（”L”に横棒を付加した文字）やユーロ記号のように一般的な文字が表示できないことは好ましくない。そのため、フォント依存のグリフインデックスを文字コードのかわりに使用して、文字描画のための情報を指定するＯＳが存在する。
【００１６】
図８に示すシーケンスチャートを用いて、内部構造としてUnicodeを使用できないＯＳを用いた印刷制御装置における、従来のグリフインデックス印刷時のアプリケーション２０１、グラフィックスエンジン２０２、及びプリンタドライバ２０３の動作について説明する
【００１７】
ステップＡ１．  アプリケーション２０１は印刷ジョブが開始することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ１．  プリンタドライバ２０３は、ジョブ開始制御のＰＤＬコマンドを生成する。
【００１８】
ステップＡ２．  アプリケーション２０１はページ印刷が開始することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２０はＡ１．と同様にプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ２．  プリンタドライバ２０３は、ページ開始制御のＰＤＬコマンドを生成する。
ステップＡ３．  アプリケーション２０１がUnicodeを用いて、ShiftJISでは表現できない文字描画を依頼してくる。
【００１９】
ステップＧ１．  グラフィックエンジン２０２は、ＯＳ内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、テーブル中に含まれるUnicodeに対応するグリフインデックスに変換し、グリフインデックスを文字描画の文字コードとしてプリンタドライバ２０３に渡す。
【００２０】
ステップＤＲＶ３．  プリンタドライバ２０３は、文字描画コマンドを生成するために、グリフインデックスを用いて以下の処理を行い文字のグリフを取得する。
ステップＤＲＶ３．１．  プリンタドライバ２０３は、グラフィックエンジン２０２に対してグリフインデックスを指定して文字グリフの取得を行う。
ステップＧ２．    グラフィックエンジン２０２は、指定されたグリフインデックスのグリフをフォントデータより取得し、プリンタドライバ２０３へ受け渡す。
【００２１】
ステップＡ４．  アプリケーション２０１はページ印刷が終了したことを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２はステップＡ１．と同様にプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ４．  プリンタドライバ２０３は、ページ終了制御のＰＤＬコマンドを生成する。
【００２２】
ステップＡ５．  アプリケーション２０１は印刷ジョブが終了することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２はステップＡ１．と同様にプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ５．  プリンタドライバ２０３は、ジョブ終了制御のＰＤＬコマンドを生成する。
【００２３】
上記の処理は１つのプロセスで行われており、アプリケーション２０１がＧＤＩ関数をコールすることにより、コールされたＧＤＩ関数の機能を実現するために必要なグラフックエンジン２０２及びプリンタドライバ２０３の処理ルーチンが動作し、コール内容に対応するＰＤＬコマンドが生成される。
【００２４】
アプリケーション２０１のＧＤＩ関数コールとグラフックエンジン２０２−プリンタドライバ２０３の処理が完全にリンクして動作しているので、アプリケーション２０１−グラフィックスエンジン２０２−プリンタドライバ２０３間での動作手順は保証される。そのためプリンタドライバ２０３での処理ステップであるステップＤｒｖ３．１．文字グリフ取得の際に、グラフィックエンジン２０２でフォントを保持していることが保証されている。
【００２５】
図４は、図３に示した構成に加え、プリンタに送信される印刷データを生成する前に、一旦、最終的にプリンタに送付する印刷データとは異なる形式のデータ形式（いわゆる中間コード）での一時保存を行うスプーラを備え、この中間コード形式で一時保存されたデータから改めて最終的に前記プリンタに送付する印刷データを生成するデスプーラ及びその関連機能を備えるホストコンピュータの機能ブロック図を示す。すなわち、図４のホストコンピュータでは、グラフィックエンジン２０２からプリンタドライバ２０３へ印刷命令を送る際に、一旦、中間コードからなるスプールファイル３０３を生成し、その後デスプーラによってスプールファイルを印刷データに変換してプリンタに出力する。
【００２６】
上述した図３のホストコンピュータにおいて、アプリケーション２０１が印刷処理から開放されるのは、プリンタドライバ２０３がグラフィックエンジン２０２からのすべての印刷命令をプリンタ１５００の制御コマンドへ変換し終った時点である。これに対して、図４のホストコンピュータでは、スプーラ３０２がすべての印刷命令を中間コードデータに変換し、スプールファイル３０３に出力した時点でアプリケーション２０１が印刷処理から開放される。通常、後者（図４構成）の方が短時間でアプリケーション２０１が印刷処理から解放される。
【００２７】
また、図４で示す構成を用いた場合、スプールファイル３０３の内容に対して印刷前に加工することができる。これにより拡大／縮小印刷や、複数（Ｎ）ページを１ページに縮小して印刷するＮアップ印刷等、アプリケーションの持たない機能を実現する事ができる。尚、スプールファイル３０３の加工を行うためには、通常、プリンタドライバ２０３が提供するウインドウから設定を行い、プリンタドライバ２０３がその設定内容をＲＡＭあるいはＨＤ等のメモリ上に保管する。
このような利点から、上記図３に示した構成から、図４の如く中間コードデータでスプールするような構成への移行が進んでいる。
【００２８】
次に、図９に示すシーケンスチャートを用いて、図４に示した、印刷制御装置としてのホストコンピュータが内部構造としてUnicodeを使用できないＯＳを用いてフォント埋め込みデータを印刷する際の処理について説明する。
この場合、図８で説明した図３の機能構成の際の処理とは異なり、１つのプロセスでは処理できない。そして、複数のジョブを制御するために、アプリケーションプロセスとデスプーラプロセス間での待ち行列処理を実現する必要がある。実際には上記２つのプロセス間の通信はスプールファイルマネージャ３０４を介して行われるが、説明を簡潔に行うために待ち行列処理を含めスプールファイルマネージャ３０４を一つの通信媒介だと捉え、図９及び以下の説明からはあえて省略した。
【００２９】
ステップＡ１．  アプリケーション２０１は印刷ジョブが開始することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
ステップＳ１．  スプーラ３０２は用紙サイズ等のジョブに関する情報を保持するジョブファイルをスプールファイル３０３に生成し、別プロセスであるデスプーラ３０５を起動する。
【００３０】
ステップＤ１．  デスプーラ３０５はジョブファイルを読み印刷ジョブ開始のためのＧＤＩ関数をコールする（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ１．プリンタドライバ２０３は、ジョブ開始制御のＰＤＬコマンドを生成する。
【００３１】
ステップＡ２．  アプリケーション２０１はページ印刷が開始することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
ステップＳ２．  スプーラ３０２はページに関する情報を保持するページファイルをスプールファイル３０３に生成する。
【００３２】
ステップＡ３．  アプリケーション２０１がUnicodeを用いて、ShiftJISでは表現できない文字描画を依頼してくる。
ステップＧ１．  グラフィックエンジン２０２は、ＯＳ内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、指定された文字コード(Unicode)に対応するグリフインデックスを文字描画の文字コードとしてプリンタドライバ２０３に渡す。
【００３３】
ステップＳ３．  スプーラ３０２は、文字描画を表す情報を中間コードとしてスプールファイルのページファイルに書き込む。この中間コードにはＤＤＩ関数より取得可能な”グリフインデックス、フォント属性、描画属性”のみ含まれており、フォントは含まれていない。
【００３４】
ステップＡ４．  アプリケーション２０１はページ印刷が終了したことを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
ステップＳ４．  スプーラ３０２は、ページファイルをクローズし、ページ再生をデスプーラ３０５に依頼する。
【００３５】
ステップＡ５．  アプリケーション２０１は印刷ジョブが終了することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
ステップＳ５．  スプーラ３０２は、ジョブファイルをクローズし、これ以上ページが増えないことをデスプーラ３０５に通知する。
【００３６】
ステップＤ２．  デスプーラ３０５が、ステップＳ２で生成されたページファイルに記述された中間コードを再生するために、ページ開始のためのＧＤＩ関数をコールする（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ２．  プリンタドライバ２０３は、ページ開始制御のＰＤＬコマンドを生成する。
【００３７】
ステップＤ３．  デスプーラ３０５が、中間コードに記述された文字描画を再生するために、ＧＤＩ関数をコールする。中間コードの文字コードとしては、フォントに依存するグリフインデックスコードが含まれている。（グラフィックエンジン２０２は描画時にコールされるＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
【００３８】
ステップＤＲＶ３．  プリンタドライバ２０３は、文字描画コマンドを生成するために、文字コードとしてグリフインデックスを用いて以下の処理を行い文字のグリフを取得する。
ステップＤＲＶ３．１．  プリンタドライバ２０３は、グラフィックエンジンに対してグリフインデックスを用いて文字グリフの取得を行う。
【００３９】
ステップＧ３．  グラフィックエンジン２０２は、フォント属性に指定されているフェース名のフォントを探す。指定されたフェース名のフォントが存在すれば、フォント依存のグリフインデックスより、グリフを取得することが可能である。しかし該当フォントが埋め込みフォントの場合、アプリケーション２０１がＯＳに登録したフォントを破棄している場合がある。
【００４０】
指定されたフェース名のフォントがグラフィックエンジン２０２上には存在しない場合、フォント置き換えにより近い種類の別のフォントを用いてグリフが作成される。フォント置き換えが行われた場合、フォント依存のグリフインデックスを用いてグリフを取得すると、ユーザが意図した文字と異なるグリフが取得されるおそれが強い。
【００４１】
ステップＤ６．  デスプーラ３０５はページ印刷が終了したことを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ４．  プリンタドライバ２０３は、ページ終了制御のＰＤＬコマンドを生成する。
【００４２】
ステップＤ７．  デスプーラ３０５は印刷ジョブが終了することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ５．  プリンタドライバ２０３は、ジョブ終了制御のＰＤＬコマンドを生成する。
【００４３】
上記の処理は図９に示すようにアプリケーションプロセスとデスプーラプロセスの２つのプロセスで行われており、アプリケーション２０１がグラフィックエンジン２０２に登録した埋め込みフォントが、デスプーラによるスプールファイルの再生時にもグラフィックエンジン２０２に存在することは保証されていない。
【００４４】
グラフィックエンジン２０２に埋め込みフォントが存在しない場合は、ステップＧ３．で説明したようにフォント置き換えが発生し、中間データで指定されていたフォントとは異なるフォントに置き換えられてしまうため、フォントに依存したグリフインデックスでは意図した文字のグリフを取得できない可能性が高い。またプリンタドライバ２０３において文字コードではなく、フォントに依存したグリフインデックスコードが送られてくるので、プリンタ内蔵のフォントを用いたフォント置き換え機能を適用することができない。
【００４５】
ステップＧ３．でのフォント置き換えを防止するため、スプール時点でビットマップ置き換えを行う方法が考えられる。
このような、スプール時にビットマップ置き換えを行う印刷処理として考えられる動作を、図１０を参照して説明する。
【００４６】
ステップＡ１．  アプリケーション２０１は印刷ジョブが開始することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
【００４７】
ステップＳ１．  スプーラ３０２は用紙サイズ等のジョブに関する情報を保持するジョブファイルをスプールファイル３０３に生成し、別プロセスであるデスプーラ３０５を起動する。
ステップＤ１．  デスプーラ３０５はジョブファイルを読み印刷ジョブ開始のためのＧＤＩ関数をコールする（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
【００４８】
ステップＤＲＶ１．プリンタドライバ２０３は、ジョブ開始制御のＰＤＬコマンドを生成する。
ステップＡ２．  アプリケーション２０１はページ印刷が開始することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
【００４９】
ステップＳ２．  スプーラ３０２はページに関する情報を保持するページファイルをスプールファイル３０３に生成する。
ステップＡ３．  アプリケーション２０１がUnicodeを用いて、ShiftJISでは表現できない文字描画を依頼してくる。
【００５０】
ステップＧ１．  グラフィックエンジン２０２は、ＯＳ内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、指定された文字コード(Unicode)に対応するグリフインデックスを文字描画の文字コードとしてプリンタドライバ２０３に渡す。
【００５１】
ステップＳ３．  スプーラ３０２は、文字描画を表す情報を中間コードとしてスプールファイルのページファイルに書き込む。この中間コードに含まれるフォント属性が埋め込みフォントであった場合は、フォント置き換えによる文字描画の差異を無くすために、以下の処理を行う。
【００５２】
ステップＳ３．１．  スプーラ３０２は、グラフィックエンジン２０２に対して文字グリフの取得を行う。
ステップＧ２．  グラフィックエンジン２０２はフォントより文字グリフを生成しスプーラ３０２へ受け渡す。アプリケーション２０１は、文字描画処理を実行中なので埋め込みフォントは使用可能であることが保証されている。
【００５３】
ステップＳ３．２．  スプーラ３０２は受け取った文字グリフを用いて文字描画をビットマップ描画に変換し、中間コードとして文字のビットマップ描画をスプールする
ステップＡ４．  アプリケーション２０１はページ印刷が終了したことを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
【００５４】
ステップＳ４．  スプーラ３０２は、ページファイルをクローズし、ページ再生をデスプーラ３０５に依頼する。
ステップＡ５．  アプリケーション２０１は印刷ジョブが終了することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
【００５５】
ステップＳ５．  スプーラ３０２は、ジョブファイルをクローズし、これ以上ページが増えないことをデスプーラ３０５に通知する。
ステップＤ２．  デスプーラ３０５が、ページファイルに記述された中間コードを再生するために、ページ開始のためのＧＤＩ関数をコールする（グラフィックエンジン２０２はコールされたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
【００５６】
ステップＤＲＶ２．  プリンタドライバ２０３は、ページ開始制御のＰＤＬコマンドを生成する。
ステップＤ８．    デスプーラ３０５は、ページファイル上の文字描画から変換したビットマップ描画の中間コードをＧＤＩ関数コールに変換する（グラフィックエンジン２０２はコールされたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
【００５７】
ステップＤＲＶ６．  プリンタドライバ２０３は、ビットマップ描画をＰＤＬコマンドに変換する。
ステップＤ６．  デスプーラ３０５はページ印刷が終了したことを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
【００５８】
ステップＤＲＶ４．  プリンタドライバ２０３は、ページ終了制御のＰＤＬコマンドを生成する。
ステップＤ７．  デスプーラ３０５は印刷ジョブが終了することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ５．  プリンタドライバ２０３は、ジョブ終了制御のＰＤＬコマンドを生成する。
【００５９】
図１０を用いて説明したような処理により、プリンタドライバ２０３から（元々は存在しない）埋め込みフォントのグリフ要求があったとしても、グラフィックエンジンによるフォント置き換えが発生しないので、基本的にはユーザが意図した通りの形状を有する文字出力が得られる。しかし、文字描画をビットマップ描画に変換することにより、以下のような問題点を有する。
【００６０】
１．拡大時の品質低下
図６右中段に示したように、スプール後に拡大処理を行った場合、文字の品位が低下する。
２．色処理の問題
ビットマップに変換された時点で文字描画に関する情報がなくなるため、カラー印刷時に行われる色変換処理の際に、文字描画としての色処理が適応できない。
３．圧縮の問題
文字グリフのビットマップに対して効果がある圧縮処理が適応できない。
【００６１】
【発明が解決しようとする課題】
上述したように、プリンタに送信される印刷データを生成する前に、最終的にプリンタに送付する印刷データとは異なる形式のデータ形式（いわゆる中間コード）での一時保存を行うスプーラを備え、この中間コード形式で一時保存されたデータから改めて最終的にプリンタに送付する印刷データを生成するデスプーラとプリンタ制御コマンドを生成するプリンタドライバを備える従来の印刷制御装置においては、文字コードの代わりフォントに依存したグリフを識別するコード（グリフインデックス）が用いられた場合、デスプーラでフォント置き換えが発生した際に文字化けが発生するおそれがある。またフォントに依存したグリフインデックスは文字コードでないため、プリンタ内蔵フォントで使用可能な文字コードへ変換できず、プリンタ内蔵フォントへの置き換え処理を適用できない。
【００６２】
また、このような問題を解決するために、フォント置き換えではなく文字描画をビットマップ描画に置き換えて処理したとしても、デスプーラでの拡大時の文字品位が低下する、色処理、圧縮処理が適応できない、プリンタ内蔵フォントへの置き換えが不可能である等の問題があった。
【００６３】
本発明はこのような従来技術の問題点を解決し、印刷命令を一旦中間コード形式に変換した後プリンタ制御コマンドに変換する形式の印刷制御装置及び印刷制御方法において、アプリケーションから印刷制御装置内で文字コードとして処理できない体系の文字コードが指定された場合でも、文字化けすることなく印刷可能とする印刷制御装置及び印刷制御方法を提供することを目的とする。
【００６４】
【課題を解決するための手段】
すなわち、本発明の要旨は、アプリケーションからの印刷命令を、所定の印刷装置に適した制御コマンドに変換して出力する印刷制御装置であって、印刷命令を、文字コード又はグリフインデックスを含んだ第１のデータ形式に変換するデータ変換手段と、第１のデータ形式を有する印刷命令を、制御コマンドとは異なる形式を有する中間データに変換し、記憶する中間データ生成手段と、中間データを制御コマンドに変換して出力する制御コマンド生成手段とを有し、中間データ生成手段が、  第１のデータ形式を有する印刷命令が、グリフインデックスを含む場合、このグリフインデックスに対応する文字コードを取得する文字コード取得手段を有し、第１のデータ形式を有する印刷命令に含まれていた、又は文字コード取得手段で取得された文字コードを用いて中間データを生成することを特徴とする印刷制御装置に存する。
【００６５】
また、本発明の別の要旨は、アプリケーションからの印刷命令を、所定の印刷装置に適した制御コマンドに変換して出力する印刷制御方法であって、印刷命令を、文字コード又はグリフインデックスを含んだ第１のデータ形式に変換するデータ変換ステップと、第１のデータ形式を有する印刷命令を、制御コマンドとは異なる形式を有する中間データに変換し、記憶する中間データ生成ステップと、中間データを制御コマンドに変換して出力する制御コマンド生成ステップとを有し、中間データ生成ステップが、  第１のデータ形式を有する印刷命令が、グリフインデックスを含む場合、このグリフインデックスに対応する文字コードを取得する文字コード取得ステップを有し、第１のデータ形式を有する印刷命令に含まれていた、又は文字コード取得ステップで取得された文字コードを用いて中間データを生成することを特徴とする印刷制御方法に存する。
【００６６】
また、本発明の別の要旨は、グリフインデックスを取得し、取得したグリフインデックスを文字コードに変換し、変換した文字コードを用いて文字描画情報を中間データ形式でスプールするスプーラと、スプーラによってスプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得し、取得したグリフインデックスを用いて文字グリフを取得するドライバとを有することを特徴とする印刷制御装置に存する。
【００６７】
また、本発明の別の要旨は、グリフインデックスを取得し、取得したグリフインデックスを文字コードに変換し、変換した文字コードを用いて文字描画情報を中間データ形式でスプールし、スプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得し、取得したグリフインデックスを用いて文字グリフを取得することを特徴とする印刷制御方法に存する。
【００６８】
また、本発明の別の要旨は、コンピュータを本発明の印刷制御装置として機能させることを特徴とするコンピュータプログラムに存する。
【００６９】
また、本発明の別の要旨は、コンピュータを本発明の印刷制御装置として機能させることを特徴とするコンピュータプログラムを格納したコンピュータ読みとり可能な記憶媒体に存する。
【００７０】
【発明の実施の形態】
以下、図面を参照して本発明をその好ましい実施形態に基づいて説明する。
まず、本発明の実施形態に係る印刷制御装置について説明する前に、本発明の実施形態に係る印刷制御装置が制御可能な印刷装置のエンジンの構成について説明する。
【００７１】
（プリンタの構造）
図１は、本発明の実施形態に係る印刷制御装置が制御可能な印刷装置の構成例を説明する概略断面図である。本実施形態において、印刷装置１５００は例えばレーザビームプリンタであるが、もちろんインクジェット方式を始め他の印刷方式の印刷装置であってもよい。
【００７２】
印刷装置（以下、プリンタという）１５００は、直接又はネットワーク等を介して印刷制御装置から供給されるプリンタ制御コマンド等を基に、記録媒体の一例としての記録用紙上に像を形成する。プリンタ本体７４０は、プリンタ制御ユニット１０００、操作部１５０１、レーザドライバ７０２、半導体レーザ７０３、回転多面鏡７０５、静電ドラム７０６、現像ユニット７０７、用紙カセット７０８、搬送ローラ７１０、外部メモリ７１１、フェイスダウン排出部７１５及び排紙トレイ７１６とを備えている。
【００７３】
上記各部の構成を動作とともに詳述すると、プリンタ制御ユニット１０００は、プリンタ本体７４０全体の制御を行い、主にプリンタ制御コマンドをビデオ信号に変換してレーザドライバ７０２に出力する。プリンタ制御ユニット１０００には、フォントデータやページ記述言語（ＰＤＬ）のエミュレーションプログラム等を供給する外部メモリ７１１を接続することもできる。操作部１５０１には、プリンタ１５００の操作、設定等を行うのためのキー及び表示手段（例えばＬＥＤ表示器）等が設けられている。
【００７４】
レーザドライバ７０２は半導体レーザ７０３を駆動するための回路であり、入力されたビデオ信号に応じて半導体レーザ７０３を駆動し、半導体レーザ７０３から発射されるレーザ光７０４をオン・オフする。半導体レーザ７０３は、回転多面鏡７０５に向けてレーザ光を発射する。回転多面鏡７０５は、レーザ光７０４を左右方向に反射し、それによってレーザ光７０４が静電ドラム７０６上を走査する。予め所定電位に帯電された静電ドラム７０６上をオン、オフするレーザ光７０４で走査することにより、プリンタ制御ユニット１０００が出力するビデオ信号に対応した静電潜像がドラム表面に形成される。現像ユニット７０７は、静電ドラム７０６近傍に設けられ、現像材（トナー）を用いて静電潜像を現像（可視化）する。
【００７５】
一方、用紙カセット７０８は、記録紙として例えばカットシートを収納する。給紙ローラ７０９及び搬送ローラ７１０は、給紙カセット７０８内のカットシート記録紙をプリンタ本体７４０内に搬送し、静電ドラム７０６の対向位置に供給する。記録紙は、用紙カセット７０８からだけでなく、用紙カセット７０８の蓋部上面に設けられた手差しトレイ（図示略）から供給することもできる。そして、ドラム上で現像された潜像（トナー像）は、転写ローラ等によって搬送されてきた記録紙上に転写される。
【００７６】
定着部７１２は、カットシート記録紙に転写されたトナー像を加熱、加圧してカットシート記録紙上に定着させる。画像が形成された記録紙は、切り替えくさび７１３を上向きにした場合にはフェイスアップ排出部７１４から記録面を上にした状態で排紙トレイ７１６に排出され、くさび７１３を下向きにした場合にはフェイスダウン排出部７１５から記録面を下にした状態で排出される。
【００７７】
（印刷制御装置の構成例）
次に、本発明の実施形態に係る印刷制御装置の一例としてのホストコンピュータの構成例を図２のブロック図を参照して説明する。尚、以下に説明する印刷制御装置の機能が実現されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、ＬＡＮ(Local Area Network:  ローカルエリアネットワーク)、ＷＡＮ（Wide Area Network:  広域ネットワーク）等のネットワークを介して接続がなされ処理が行われるシステムであっても構わない。
【００７８】
図２において、本発明の実施形態に係る印刷制御装置の一例としてのホストコンピュータ３０００は、上述したプリンタ１５００と接続され、印刷システムを構成している。ホストコンピュータ３０００は、ＣＰＵ１、ＲＡＭ２、ＲＯＭ３、キーボードコントローラ（ＫＢＣ）５、ＣＲＴコントローラ（ＣＲＴＣ）６、ディスクコントローラ（ＤＫＣ）７、プリンタコントローラ（ＰＲＴＣ）８、キーボード（ＫＢ）９、ＣＲＴディスプレイ（ＣＲＴ）１０及び外部メモリ１１とを備えている。
【００７９】
先ず、ホストコンピュータ３０００各部の構成を詳述すると、ＣＰＵ１はシステムバスに接続された各デバイスを統括的に制御する中央処理装置であり、ＲＯＭ３のプログラム用ＲＯＭ３ｂ（後述）或いは外部メモリ１１に記憶された文書処理プログラム等のアプリケーションプログラムに基づいて、図形、イメージ、文字、表（表計算等を含む）等が混在した文書処理を実行する。また、ＣＰＵ１は、例えばＲＡＭ２上に設定された表示情報ＲＡＭへのアウトラインフォントの展開（ラスタライズ）処理を実行し、ＣＲＴディスプレイ１０上でのＷＳＹＩＷＹＧ(What You See Is What You Get:ＣＲＴディスプレイ画面上に見えているそのままの大きさや形で印刷できる機能)を可能としている。
【００８０】
更に、ＣＰＵ１はＣＲＴディスプレイ１０上のマウスカーソル（図示略）等で指示されたコマンドに基づいて登録された種々のウインドウを開き、種々のデータ処理を実行する。ユーザはプリンタ１５００を使用して印刷する際、印刷の設定に関するウインドウを開き、プリンタ１５００の設定や印刷モードの選択を含むプリンタドライバに対する印刷処理方法の設定を行うことができるようになっている。
【００８１】
ＲＡＭ２はＣＰＵ１の主メモリ、ワークエリア等として機能する。ＲＯＭ３はフォント用ＲＯＭ３ａと、プログラム用ＲＯＭ３ｂと、データ用ＲＯＭ３ｃとを備えている。フォント用ＲＯＭ３ａ或いは外部メモリ１１は、上記文書処理の際に使用するフォントデータなどを記憶する。プログラム用ＲＯＭ３ｂ或いは外部メモリ１１は、ＣＰＵ１の制御プログラムであるオペレーティングシステム（以下、ＯＳ）等を記憶する。データ用ＲＯＭ３ｃ或いは外部メモリ１１は、上記文書処理等を行う際に使用する各種データを記憶する。
【００８２】
キーボードコントローラ（ＫＢＣ）５は、キーボード９やポインティングデバイス（図示略）からのキー入力を制御する。ＣＲＴコントローラ（ＣＲＴＣ）６は、ＣＲＴディスプレイ（ＣＲＴ）１０の表示を制御する。ディスクコントローラ（ＤＫＣ）７は、外部メモリ１１とのアクセスを制御する。プリンタコントローラ（ＰＲＴＣ）８は、双方向性インターフェース２１を介してプリンタ１５００に接続されて、プリンタ１５００との通信制御処理を実行する。キーボード９は、各種キーを備えている。
【００８３】
ＣＲＴディスプレイ（ＣＲＴ）１０は、図形、イメージ文字、表等を表示する。外部メモリ１１はハードディスク（ＨＤ）、フロッピーディスク（ＦＤ）等から構成されており、ブートプログラム、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、プリンタ制御コマンド生成プログラム（以下、プリンタドライバ）等を記憶する。
【００８４】
上述したＣＰＵ１、ＲＡＭ２、ＲＯＭ３、キーボードコントローラ（ＫＢＣ）５、ＣＲＴコントローラ（ＣＲＴＣ）６、ディスクコントローラ（ＤＫＣ）７、プリンタコントローラ（ＰＲＴＣ）８は、コンピュータ制御ユニット２０００上に配設されている。
このようなホストコンピュータ３０００は、例えばプリンタ１５００と接続可能なインターフェース２１を有する汎用のパーソナルコンピュータによって実現することができる。
【００８５】
次に、プリンタ１５００各部の構成を詳述すると、ＣＰＵ１２は、システムバス１５に接続された各デバイスを統括的に制御する中央処理装置であり、ＲＯＭ１３のプログラム用ＲＯＭ１３ｂ（後述）に記憶された制御プログラム等或いは外部メモリ１４に記憶された制御プログラム等に基づいて印刷部（プリンタエンジン）１７に出力情報としての画像信号を出力する。また、ＣＰＵ１２は、入力部１８を介してホストコンピュータ３０００との通信処理が可能となっており、プリンタ１５００内の情報等をホストコンピュータ３０００に通知できる構成となっている。
【００８６】
ＲＡＭ１９は、ＣＰＵ１２の主メモリや、ワークエリア等として機能し、増設ポートに接続されるオプションＲＡＭ（図示略）によりメモリ容量を拡張することができるように構成されている。尚、ＲＡＭ１９は、出力情報展開領域、環境データ格納領域、ＮＶＲＡＭ等に用いられる。ＲＯＭ１３は、フォント用ＲＯＭ１３ａと、プログラム用ＲＯＭ１３ｂと、データ用ＲＯＭ１３ｃとを備えている。フォント用ＲＯＭ１３ａは、上記出力情報を生成する際に使用するフォントデータなどを記憶する。プログラム用ＲＯＭ１３ｂは、ＣＰＵ１２の制御プログラム等を記憶する。データ用ＲＯＭ１３ｃは、プリンタ１５００にハードディスク等の外部メモリ７１１が接続されていない場合には、ホストコンピュータ３０００上で利用される情報等を記憶する。
【００８７】
入力部１８は、双方向性インターフェース２１を介してプリンタ１５００とホストコンピュータ３０００との間におけるデータの送受を行う。印刷部インターフェース（Ｉ／Ｆ）１６は、ＣＰＵ１２と印刷部１７との間におけるデータの送受を行う。メモリコントローラ（ＭＣ）２０は、外部メモリ７１１のアクセスを制御する。印刷部１７は、ＣＰＵ１２の制御に基づき印刷動作を行う。操作部１５０１は、各種操作のためのスイッチや表示手段（例えばＬＥＤ表示器）等を備えている。
【００８８】
外部メモリ７１１は、ハードディスク（ＨＤ）、ＩＣカード等から構成されており、プリンタ１５００にオプションとして接続される。外部メモリ７１１は、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶するものであり、メモリコントローラ（ＭＣ）２０によりアクセスを制御される。尚、外部メモリ７１１は、１個に限らず、複数個備えることが可能となっている。即ち、内蔵フォントに加えてオプションカード、言語系の異なるプリンタ制御言語を解釈するプログラムを格納した外部メモリを複数接続できるように構成されていてもよい。更に、ＮＶＲＡＭ（図示略）を有し、操作部１５０１からのプリンタモード設定情報を記憶するようにしてもよい。
【００８９】
上述したＣＰＵ１２、ＲＡＭ１９、ＲＯＭ１３、入力部１８、印刷部インターフェース（Ｉ／Ｆ）１６、メモリコントローラ（ＭＣ）２０は、プリンタ制御ユニット１０００上に配設されている。
【００９０】
（印刷制御装置の機能構成）
本発明における印刷制御装置としてのホストコンピュータ３０００の機能構成は、上述した図４の構成と同一でよいため、重複する説明は省略する。
なお、本実施形態において、図４におけるアプリケーション２０１、グラフィックエンジン２０２、ディスパッチャ３０１、プリンタドライバ２０３、スプーラ３０２、スプールファイルマネージャ３０４、デスプーラ３０５およびシステムスプーラ２０４は、上記図２の外部メモリ１１に保存されたファイルとして存在し、実行される場合にＯＳやそのモジュールを利用するモジュールによってＲＡＭ２にロードされ実行されるプログラムモジュールである。
【００９１】
また、アプリケーション２０１およびプリンタドライバ２０３は、外部メモリ１１のＦＤやＣＤ−ＲＯＭ或いはネットワーク（以上図示略）を経由して外部メモリ１１としてのＨＤに追加することが可能となっている。外部メモリ１１に保存されているアプリケーション２０１はＲＡＭ２にロードされて実行されるが、該アプリケーション２０１からプリンタ１５００に対して印刷を行う際には、同様にＲＡＭ２にロードされ実行可能となっているグラフィックエンジン２０２を利用して出力（描画）を行う。
【００９２】
グラフィックエンジン２０２は印刷装置（プリンタ）ごとに用意されたプリンタドライバ２０３を同様に外部メモリ１１からＲＡＭ２にロードし、アプリケーション２０１の出力（ＧＤＩ関数）から印刷命令（ＤＤＩ関数）を生成し、ディスパッチャ３０１へ出力する。
【００９３】
グラフィックエンジン２０２からの印刷命令はディスパッチャ３０１が受け取る。ディスパッチャ３０１はグラフィックエンジン２０２から受け取った印刷命令が、アプリケーション２０１からグラフィックエンジン２０２へ発行されたものである場合には、外部メモリ１１に格納されているスプーラ３０２をＲＡＭ２にロードし、プリンタドライバ２０３ではなくスプーラ３０２へ印刷命令を送付する。
【００９４】
スプーラ３０２は受け取った印刷命令を中間コードに変換してスプールファイル３０３に出力する。また、スプーラ３０２は、プリンタドライバ２０３に対して設定されている印刷データに関する加工設定をプリンタドライバ２０３から取得してスプールファイル３０３に保存する。尚、スプールファイル３０３は外部メモリ１１上にファイルとして生成するが、ＲＡＭ２上に生成されても構わない。更に、スプーラ３０２は、外部メモリ１１に格納されているスプールファイルマネージャ３０４をＲＡＭ２にロードし、スプールファイルマネージャ３０４に対してスプールファイル３０３の生成状況を通知する。
【００９５】
その後、スプールファイルマネージャ３０４は、スプールファイル３０３に保存された印刷データに関する加工設定の内容に従って印刷を行えるか判断する。スプールファイルマネージャ３０４がグラフィックエンジン２０２を利用して印刷を行えると判断した際には、外部メモリ１１に格納されているデスプーラ３０５をＲＡＭ２にロードし、デスプーラ３０５に対して、スプールファイル３０３に記述された中間コードの印刷処理を行うように指示する。
【００９６】
デスプーラ３０５はスプールファイル３０３に含まれる中間コードをスプールファイル３０３に含まれる加工設定の内容に従って加工し、グラフィックエンジン２０２経由へ出力する。グラフィックエンジン２０２はデスプーラ３０５の出力（ＧＤＩ関数）から印刷命令（ＤＤＩ関数）を生成し、ディスパッチャ３０１へ出力する。ディスパッチャ３０１がグラフィックエンジン２０２から受け取った印刷命令がデスプーラ３０５からグラフィックエンジン２０２へ発行されたものである場合には、ディスパッチャ３０１はスプーラ３０２ではなく、プリンタドライバ２０３に印刷命令を送る。プリンタドライバ２０３はプリンタ制御コマンドを生成し、システムスプーラ２０４経由でプリンタ１５００に出力する。
【００９７】
（印刷データの処理）
次に、本実施形態のホストコンピュータ３０００において、グリフインデックステーブルを用いねばならない際の印刷データの処理について、図１１のシーケンスチャートを参照して説明する。なお、図９と同様、本処理も１つのプロセスでは処理できない。そして、複数のジョブを制御するために、アプリケーションプロセスとデスプーラプロセス間での待ち行列処理を実現する必要がある。実際には上記２つのプロセス間の通信はスプールファイルマネージャ３０４を介して行われるが、説明を簡潔に行うために待ち行列処理を含めスプールファイルマネージャ３０４を一つの通信媒介だと捉え、図１１及び以下の説明からはあえて省略した。
【００９８】
また、以下説明する例は、印刷制御装置としてのホストコンピュータ３０００で稼働するＯＳではShiftJISのみをサポートし、一方ＯＳに登録されたフォントのグリフインデックステーブルにはShiftJIS以外の文字コード体系（ここではUnicodeとする）も含まれているものとする。
【００９９】
ステップＡ１．  アプリケーション２０１は印刷ジョブが開始することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
【０１００】
ステップＳ１．  スプーラ３０２は用紙サイズ等のジョブに関する情報を保持するジョブファイルをスプールファイル３０３に生成し、別プロセスであるデスプーラ３０５を起動する。
【０１０１】
ステップＤ１．  デスプーラ３０５はジョブファイルを読み印刷ジョブ開始のためのＧＤＩ関数をコールする（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ１．プリンタドライバ２０３は、ジョブ開始制御のＰＤＬコマンドを生成する。
【０１０２】
ステップＡ２．  アプリケーション２０１はページ印刷が開始することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
ステップＳ２．  スプーラ３０２はページに関する情報を保持するページファイルをスプールファイル３０３に生成する。
ステップＡ３．  アプリケーション２０１が、例えばUnicodeを用いて、例えばShiftJISでは表現できない（ShiftJISでは対応する文字が規定されていない）文字描画を依頼してくる（ＧＤＩ関数をコールする）。
【０１０３】
ステップＧ１．  グラフィックエンジン２０２は、コールされたＧＤＩ関数から、使用されている文字コードがUnicodeであることを検出する。そして、ＯＳ内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、指定された文字コード(Unicode)に対応するグリフインデックスを文字描画の文字コードとしてＤＤＩ関数の形でプリンタドライバ２０３に渡す。この際、ＤＤＩ関数には文字コードではなくグリフインデックスが含まれていることを示しておく。
【０１０４】
ステップＳ３．  このステップにおいてスプーラ３０２は、ステップＧ１．でグラフィックエンジン２０２がＤＤＩ関数で受け渡したグリフインデックス（ＤＤＩ関数より取得可能な情報は”グリフインデックス、フォント属性、描画属性”のみであり、実際のフォント（グリフ）は含まれない）ではなく、文字コードを用いて中間コード形式のスプーリングを行う。ＤＤＩ関数から取得したグリフインデックスを文字コードに変換するため、以下のステップＳ３．４．を実行する。
【０１０５】
ステップＳ３．４．  スプーラ３０２は、ＤＤＩ関数で受け取った情報のうち、フォント属性を用いてグラフィックエンジン２０２にグリフインデックステーブルの情報取得を依頼する。
ステップＧ４．  グラフィックエンジン２０２は、スプーラ３０２から受け取ったフォント属性から対応するグリッフインデックステーブルを取得し、スプーラ３０２に受け渡す。スプーラ３０２は、取得したグリフインデックステーブルを用い、グリフインデックスに対応する文字コード（この場合はUnicodeだが、それ以外のコード体系でもよい）を得て、その文字コード(Unicode)を用いて文字描画情報を中間データ形式でスプールする。
【０１０６】
ステップＡ４．  アプリケーション２０１はページ印刷が終了したことを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
ステップＳ４．  スプーラ３０２は、ページファイルをクローズし、ページ再生をデスプーラ３０５に依頼する。
【０１０７】
ステップＡ５．  アプリケーション２０１は印刷ジョブが終了することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をスプーラ３０２へ引き渡す）。
ステップＳ５．  スプーラ３０２は、ジョブファイルをクローズし、これ以上ページが増えないことをデスプーラ３０５に通知する。
【０１０８】
ステップＤ２．  デスプーラ３０５が、ステップＳ２で生成されたページファイルに記述された中間コードを再生するために、ページ開始のためのＧＤＩ関数をコールする（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
【０１０９】
ステップＤＲＶ２．  プリンタドライバ２０３は、ページ開始制御のＰＤＬコマンドを生成する。
ステップＤ３．  デスプーラ３０５が、スプール３０２がスプールした中間コードに記述された文字描画を再生するために、ＧＤＩ関数をコールする。この際、中間コードの文字コードとしては、ステップＳ３．４．で変換した、フォントに依存しないUnicodeとなる。
【０１１０】
ステップＧ１．  グラフィックエンジン２０２は、コールされたＧＤＩ関数から、使用されている文字コードがUnicodeであることを検出する。そして、ＯＳ内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、指定された文字コード(Unicode)に対応するグリフインデックスを文字描画の文字コードとしてＤＤＩ関数の形でプリンタドライバ２０３に渡す。この際、ＤＤＩ関数には文字コードではなくグリフインデックスが含まれていることを示しておく。
【０１１１】
ステップＤＲＶ３．  プリンタドライバ２０３は、文字描画コマンドを生成するために、文字コードとしてグリフインデックスを用いて以下の処理を行い文字のグリフを取得する。
ステップＤＲＶ３．１．  プリンタドライバ２０３は、グラフィックエンジン２０２に対してグリフインデックスを用いて文字グリフの取得を行う。
【０１１２】
ステップＧ３．  グラフィックエンジン２０２は、フォント属性に指定されているフェース名のフォントを探す。指定されたフェース名のフォントが存在すれば、フォント依存のグリフインデックスより、グリフを取得することが可能である。しかし該当フォントが埋め込みフォントの場合、アプリケーションがシステム（ＯＳ）に登録したフォントを破棄している場合がある。指定されたフォントがグラフィックエンジン２０２上に存在しない場合、グラフィックエンジン２０２はフォント置き換え処理を行い、指定されたフォントに近い種類のフォントもしくは予め定められた置き換えフォントを用いてグリフを作成する。
【０１１３】
この場合、プリンタドライバ２０３がフォントに依存しない文字コード（本実施形態においてはUnicode）を用いてグリフの取得を行っているため、指定したフォントが使用できなくても、フォントの種類が変化するだけで文字が変わったり出力されなかったりすることはなく、ユーザが意図した文字のグリフが取得できる。
【０１１４】
ステップＤ６．  デスプーラ３０５はページ印刷が終了したことを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ４．  プリンタドライバ２０３は、ページ終了制御のＰＤＬコマンドを生成する。
【０１１５】
ステップＤ７．  デスプーラ３０５は印刷ジョブが終了することを、ＧＤＩ関数を介してグラフィックエンジン２０２に通知する（グラフィックエンジン２０２は通知されたＧＤＩ関数をＤＤＩ関数に変換してディスパッチャ３０１へ出力し、ディスパッチャ３０１はその内容をプリンタドライバ２０３へ引き渡す）。
ステップＤＲＶ５．  プリンタドライバ２０３は、ジョブ終了制御のＰＤＬコマンドを生成する。
【０１１６】
スプールの際にＤＤＩ関数よりは直接入手できないフォントの情報を、ＧＤＩ関数をコールすることによって入手する。フォントよりグリフインデックステーブルを取得し、ＤＤＩ関数より渡されるグリフインデックスを、文字コードに変換しスプールする。このことによりデスプーラ２０３で再生される文字描画の中間コードがフォント依存ではなくなり、指定したフォントが他のフォントに置き換えされた場合でも文字化けが発生しなくなる。また一般的な文字コードで処理されるので、デスプーラ３０５でのプリンタ内蔵のフォントへの置き換え等の処理が容易になる。
【０１１７】
フォントによっては、例えば日本語の縦書きや、２つの文字コードの間隔を詰めて１つの文字にする場合など、文字描画に適応される修飾によって同じ文字コードに対して２つ以上のグリフインデックスを定義することがある。このようなフォントについて受け渡されたグリフインデックスを文字コードに逆変換してスプールすると、文字修飾の情報が抜け落ちる可能性がある。そのため、ステップＳ３．４．でグリフインデックステーブルを用いて文字コードに変換する際にこのような問題があるか否かを判断し、文字コードに逆変換しない方が望ましい場合には文字コードに変換せずに、図１０で説明したような文字描画のビットマップ変換を行うことで対処するように構成すればよい。このようにすれば、ユーザが意図した出力との差異を最小にすることが可能になる。
【０１１８】
またフォントによっては、プリンタ内蔵フォントでサポートしている文字コードを、グリフインデックステーブルでサポートしていないものもある。その場合はプリンタ内蔵フォントへの置き換えを行わずに文字のグリフとしてコマンドを生成する。
【０１１９】
【他の実施形態】
なお、上述の実施形態において、スプーラがグリフインデックスを文字コードに変換する際に、アプリケーションから指定された文字コードと同じUnicodeに変換したが、両者を同じ体系の文字コードに変換しなければならないわけではなく、グリフインデックステーブルに含まれる任意の体系の文字コードに変換してスプールすることができる。
【０１２０】
ただし、グリフインデックステーブルを用いて文字コードに変換する場合には、なるべくサポートする文字の種類が多いコード体系の文字コードにすることが好ましい。
【０１２１】
なお、本発明は、複数の機器(例えばホストコンピュータ、インターフェース機器、リーダ、プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（複写機、プリンタ、ファクシミリ装置など）に適用してもよい。
【０１２２】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記憶した記憶媒体を、システムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成される。
【０１２３】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０１２４】
プログラムコードを供給するための記憶媒体としては、例えば、フロッピーディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。
【０１２５】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【０１２６】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【０１２７】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明した（図１１に示す）シーケンスチャートに対応するプログラムコードが少なくとも格納されることになる。
【０１２８】
【発明の効果】
以上説明したように、本発明によれば、グリフインデックスを文字コードに変換してからスプールすることにより、アプリケーションが指定してきた文字コードの情報を失なうことなく中間コード形式のデータを記憶できる。その結果、その後フォント置き換えが発生した場合でも文字化けが起こらず、ユーザが意図した文字を印刷することが可能になるほか、一般的な文字コードを用いた描画の際の、色処理、圧縮、プリンタ内蔵フォント置き換えの処理を文字描画に適応可能になるという効果を有する。
【図面の簡単な説明】
【図１】本発明の印刷制御装置を接続可能なプリンタの一例としてのレーザビームプリンタの構成例を示す断面図である。
【図２】本発明の一実施形態に係る印刷制御装置としてのホストコンピュータと、それに接続されたプリンタのハードウェア構成例を示すブロック図である。
【図３】従来の、アプリケーションからの印刷命令を中間コードデータへ変換せずにプリンタ制御コマンドに変換する形式の印刷制御装置の代表的な機能ブロック図である。
【図４】本発明の印刷制御装置に適用可能な、アプリケーションからの印刷命令を中間コードデータへ変換した後にプリンタ制御コマンドに変換する形式の印刷制御装置の代表的な機能ブロック図である。
【図５】文字描画に必要な情報と、印刷結果を説明する図である。
【図６】文字描画においてフォント置き換え処理、ビットマップ置き換えが生じた場合の印刷結果の例を示した図である。
【図７】グリフインデックステーブルの例を示す図である。
【図８】図３に示した印刷制御装置における印刷処理のシーケンスを示す図である。
【図９】図４に示した印刷制御装置における印刷処理のうち、フォント置き換えが発生する場合のシーケンスを示す図である。
【図１０】図４に示した印刷制御装置における印刷処理のうち、ビットマップ置き換えが発生する場合のシーケンスを示す図である。
【図１１】本発明の実施形態に係る印刷制御装置における印刷処理のシーケンスを示す図である。
【図１】
0003870042.tif 000002
【図２】
0003870042.tif 000003
【図３】
0003870042.tif 000004
【図４】
0003870042.tif 000005
【図５】
0003870042.tif 000006
【図６】
0003870042.tif 000007
【図７】
0003870042.tif 000008
【図８】
0003870042.tif 000009
【図９】
0003870042.tif 000010
【図１０】
0003870042.tif 000011
【図１１】
0003870042.tif 000012