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