JP3870042B2 - 印刷制御装置及び印刷制御方法 - Google Patents
印刷制御装置及び印刷制御方法 Download PDFInfo
- Publication number
- JP3870042B2 JP3870042B2 JP2001197287A JP2001197287A JP3870042B2 JP 3870042 B2 JP3870042 B2 JP 3870042B2 JP 2001197287 A JP2001197287 A JP 2001197287A JP 2001197287 A JP2001197287 A JP 2001197287A JP 3870042 B2 JP3870042 B2 JP 3870042B2
- Authority
- JP
- Japan
- Prior art keywords
- character code
- character
- glyph index
- glyph
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Landscapes
- Record Information Processing For Printing (AREA)
Description
【発明が属する技術分野】
本発明は、プリンタ等の印刷装置に印刷用の制御コマンドを供給する印刷制御装置及び印刷制御方法に関し、特に、アプリケーションプログラムからの印刷命令を一旦、最終的に前記プリンタに送付する印刷データとは異なる形式のデータ形式(いわゆる中間コード)に変換した後、再度制御コマンドに変換する形式の印刷制御装置及び印刷制御方法に関する。
【0002】
【従来の技術】
図3は、従来、直接、あるいはネットワーク経由で接続されているプリンタ1500に対して印刷指示を行う印刷制御装置としてのホストコンピュータにおいて、印刷処理に関わる機能構成を大まかに示した図である。印刷処理は、ホストコンピュータのユーザが、ワードプロセッサプログラムや表計算プログラム等のアプリケーション201から、印刷指示を行うことによって開始する。
【0003】
アプリケーション201は、文字描画データ等を含むアプリケーションデータを解析して、例えばOS(基本ソフト)が提供するグラフィックエンジン202をコールする。
グラフィックエンジン202は、プリンタ1500の種類に合わせて用意されたプリンタドライバ203をロードし、アプリケーション201の出力をプリンタドライバ203に受け渡す。そして、アプリケーション201から受け取るGDI(Graphic Device Interface)関数からDDI(Device Driver Interface)関数に変換して、プリンタドライバ203へDDI関数を出力する。
【0004】
プリンタドライバ203は、グラフィックエンジン202から受け取ったDDI関数に基づいて、プリンタが認識可能な制御コマンド、例えばPDL(Page Description Language)に変換する。変換されたプリンタ制御コマンドは、システムスプーラ204を経てインターフェース21経由でプリンタ1500へ印刷データとして出力される。
プリンタ1500ではこの制御コマンドを解釈して、ビットマップデータへ展開し、最終的に紙などの記録媒体に印刷結果が出力される。
【0005】
図5は、印刷処理における文字描画に必要な情報の例を表す模式図である。図5に示すように、一般的に文字描画では以下の情報が必要である。図5にはまた、指定したフォントによって印刷結果が異なる場合の例を示すが、その説明は後で行う。
・文字コード
文字描画で伝えたいところの文字情報。ASCII、ShiftJIS、Unicode等、予め定められたコード体系に従ったコードが用いられる。OSによっては一部の文字コード(例えばShiftJIS)しかサポートしていない場合がある。イギリスポンド(”£”ではなく、”L”に横棒を付加した文字。以下本明細書でイギリスポンドと言うときはこの文字を指す)やユーロ記号ははShiftJISでの定義は存在しない。そのためこの文字をサポートするUnicode等の他の文字コードを用いて表現する必要がある。OSがShiftJISしかサポートしていない場合、イギリスポンドはそのOS上では表すことができない。このような事態を避けるためにOSでは様々な工夫を行っている。この工夫についてはあとで述べる。
【0006】
・フォント属性
文字描画に適応するフェース名、グリフへの修飾を表すイタリック/ボールド指定有無、文字の大きさを表すポイント数等の情報。
・フォント
ゴシックや明朝等のフェース名で指定される文字描画形状を表す情報。内部に文字コード毎の描画形状情報(グリフと以下呼ぶ)を有する。フォントの情報形式としては、大きくビットマップフォントとアウトラインフォントに分かれ、TrueType、OpenType等の各種フォーマットが定義されている。フォントの内部情報については、後でもう少し詳しく説明する。
・描画属性
文字の描画位置や、色、クリップの状態等を表す情報。
【0007】
そして、これらの情報全てが揃わなければ、ユーザが意図した通りの文字描画は成立しない。しかし、文字描画形状を表す情報であるフォントは、例えば著作権の関係等によって、すべての環境に必要とするフォントが存在する保証はない。言い換えるとユーザが文字描画データを作成した環境に存在したフォントが、文字描画が行われる環境で存在しない可能性がある。描画が行われる環境にユーザが意図したフォントが存在しない場合にも、ユーザが意図したフォントもしくはそれに近い形状のフォントで文字描画を行うために、従来、1)フォント置き換え、2)ビットマップ置き換え及び、3)フォント埋め込みという仕組みが知られている。以下、それぞれの仕組みを用いた場合の描画結果を示す図6を参照して、それぞれの仕組みについて説明する。
【0008】
1.フォント置き換え
文字描画実行環境において、文字描画データ中のフォント属性に近い別のフォントを用いて描画を行う方法。別のフォントを用いるため、図6右最上段に示すように、ユーザが意図していたものとは全く違った形状の文字描画が行われる可能性がある。最悪の場合、意図した文字コードに対応したフォントが文字描画実行環境において存在せず、文字として識別不可能な描画(印刷)が行われることもある。
【0009】
2.ビットマップ置き換え
文字描画データを作成する時点で文字描画をビットマップに変換して、文字描画をビットマップ描画に変換する方法。通常の見た目はユーザが意図した文字描画と同じになる。しかしビットマップであるために図6右中段に示すように拡大/縮小時にビットマップの解像度の影響で文字品位が落ちる場合がある。
【0010】
3.フォント埋め込み
文字描画データに対してフォントを埋め込み、文字描画が実際行われる環境までフォントを持っていく方法。埋め込まれたフォントは、文字描画前に文字描画実行環境へ登録されるため、すべての情報が揃いユーザが意図した形式で文字描画される。注意として登録の際には著作権を侵害しないように配慮する必要がある。例えば埋め込みフォントが描画する環境に元々存在しない場合には、印刷終了後に登録したフォントを必ず消去する必要がある。そのためアプリケーションの印刷終了後には、登録したフォントをシステム上から破棄し、他のアプリケーションより使用できない状態にする。フォント埋め込みは指定されたフォントが文字描画領域になくてもユーザが意図した出力を得られるという利点があるが、フォント情報を文字描画データに埋め込むため、文字描画データが大きくなる傾向にある。特に日本語フォントのような文字種の多いフォントを埋め込む場合にこの問題が顕著である。
【0011】
フォントに格納されている情報について、図7を用いてもう少し詳しく説明する。フォントには主に以下の情報が含まれる。
・フェース名
使用するフォントを識別するための識別名。
・グリフ定義数
フォント内に定義される文字の形状を表すグリフの定義数。
【0012】
・グリフインデックステーブル
1つのフォントで様々な文字コードに対応するために、TrueTypeやOpenType等のフォントでは、フォント中の個々のグリフに対して文字コードに依存しない識別子を定義し、文字コードに依存しないようにグリフを管理している。一般にこのグリフの識別子をグリフインデックスと呼ぶ。それぞれの文字コード体系に対して、文字コードと対応するグリフインデックスとの対応表を用意することにより、1つのフォントで様々な文字コードへの対応を行うことが可能になる。この対応表をグリフインデックステーブルと呼ぶ。図7には2つのグリフインデックステーブルが示されている。一般的なグリフインデックステーブルでは、文字コードからグリフインデックスを引くデータ形式となっている。
【0013】
・グリフ
文字の形状を表す情報。グリフを表す方法としては、ビットマップ、パス、曲線等の形式がある。定義された各々のグリフは、フォント内ではフォント依存のグリフインデックスによって識別される。グリフインデックスはフォント依存であるため、図7に示すように、”A”のグリフインデックスが、”ゴシック”フォントでは0x0001、”Arial”フォントでは0x0011と、通常同じ文字でもフォントによってグリフインデックスは異なる。
【0014】
図7の”ゴシック”フォント(日本語用フォント)におけるイギリスポンドや、Arialフォント(英数字用フォント)における”ア”、”イ”のように、フォントによってグリフが定義されていない文字も存在する。そのような文字を印刷しようとした場合、図5の右側に示すように、指定したフォントによって”・”や”□”等のグリフ不定義の文字を表す文字が印刷される。
【0015】
ところで例えば内部文字コードとしてShiftJISしかサポートしていないOSの場合、イギリスポンドのグリフが定義されている”Arial”フォントであっても、ShiftJISでの文字コードの定義が存在せず、イギリスポンドが表示できない。OSの商業利用上のためにはイギリスポンド(”L”に横棒を付加した文字)やユーロ記号のように一般的な文字が表示できないことは好ましくない。そのため、フォント依存のグリフインデックスを文字コードのかわりに使用して、文字描画のための情報を指定するOSが存在する。
【0016】
図8に示すシーケンスチャートを用いて、内部構造としてUnicodeを使用できないOSを用いた印刷制御装置における、従来のグリフインデックス印刷時のアプリケーション201、グラフィックスエンジン202、及びプリンタドライバ203の動作について説明する
【0017】
ステップA1. アプリケーション201は印刷ジョブが開始することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してプリンタドライバ203へ引き渡す)。
ステップDRV1. プリンタドライバ203は、ジョブ開始制御のPDLコマンドを生成する。
【0018】
ステップA2. アプリケーション201はページ印刷が開始することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン2020はA1.と同様にプリンタドライバ203へ引き渡す)。
ステップDRV2. プリンタドライバ203は、ページ開始制御のPDLコマンドを生成する。
ステップA3. アプリケーション201がUnicodeを用いて、ShiftJISでは表現できない文字描画を依頼してくる。
【0019】
ステップG1. グラフィックエンジン202は、OS内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、テーブル中に含まれるUnicodeに対応するグリフインデックスに変換し、グリフインデックスを文字描画の文字コードとしてプリンタドライバ203に渡す。
【0020】
ステップDRV3. プリンタドライバ203は、文字描画コマンドを生成するために、グリフインデックスを用いて以下の処理を行い文字のグリフを取得する。
ステップDRV3.1. プリンタドライバ203は、グラフィックエンジン202に対してグリフインデックスを指定して文字グリフの取得を行う。
ステップG2. グラフィックエンジン202は、指定されたグリフインデックスのグリフをフォントデータより取得し、プリンタドライバ203へ受け渡す。
【0021】
ステップA4. アプリケーション201はページ印刷が終了したことを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202はステップA1.と同様にプリンタドライバ203へ引き渡す)。
ステップDRV4. プリンタドライバ203は、ページ終了制御のPDLコマンドを生成する。
【0022】
ステップA5. アプリケーション201は印刷ジョブが終了することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202はステップA1.と同様にプリンタドライバ203へ引き渡す)。
ステップDRV5. プリンタドライバ203は、ジョブ終了制御のPDLコマンドを生成する。
【0023】
上記の処理は1つのプロセスで行われており、アプリケーション201がGDI関数をコールすることにより、コールされたGDI関数の機能を実現するために必要なグラフックエンジン202及びプリンタドライバ203の処理ルーチンが動作し、コール内容に対応するPDLコマンドが生成される。
【0024】
アプリケーション201のGDI関数コールとグラフックエンジン202−プリンタドライバ203の処理が完全にリンクして動作しているので、アプリケーション201−グラフィックスエンジン202−プリンタドライバ203間での動作手順は保証される。そのためプリンタドライバ203での処理ステップであるステップDrv3.1.文字グリフ取得の際に、グラフィックエンジン202でフォントを保持していることが保証されている。
【0025】
図4は、図3に示した構成に加え、プリンタに送信される印刷データを生成する前に、一旦、最終的にプリンタに送付する印刷データとは異なる形式のデータ形式(いわゆる中間コード)での一時保存を行うスプーラを備え、この中間コード形式で一時保存されたデータから改めて最終的に前記プリンタに送付する印刷データを生成するデスプーラ及びその関連機能を備えるホストコンピュータの機能ブロック図を示す。すなわち、図4のホストコンピュータでは、グラフィックエンジン202からプリンタドライバ203へ印刷命令を送る際に、一旦、中間コードからなるスプールファイル303を生成し、その後デスプーラによってスプールファイルを印刷データに変換してプリンタに出力する。
【0026】
上述した図3のホストコンピュータにおいて、アプリケーション201が印刷処理から開放されるのは、プリンタドライバ203がグラフィックエンジン202からのすべての印刷命令をプリンタ1500の制御コマンドへ変換し終った時点である。これに対して、図4のホストコンピュータでは、スプーラ302がすべての印刷命令を中間コードデータに変換し、スプールファイル303に出力した時点でアプリケーション201が印刷処理から開放される。通常、後者(図4構成)の方が短時間でアプリケーション201が印刷処理から解放される。
【0027】
また、図4で示す構成を用いた場合、スプールファイル303の内容に対して印刷前に加工することができる。これにより拡大/縮小印刷や、複数(N)ページを1ページに縮小して印刷するNアップ印刷等、アプリケーションの持たない機能を実現する事ができる。尚、スプールファイル303の加工を行うためには、通常、プリンタドライバ203が提供するウインドウから設定を行い、プリンタドライバ203がその設定内容をRAMあるいはHD等のメモリ上に保管する。
このような利点から、上記図3に示した構成から、図4の如く中間コードデータでスプールするような構成への移行が進んでいる。
【0028】
次に、図9に示すシーケンスチャートを用いて、図4に示した、印刷制御装置としてのホストコンピュータが内部構造としてUnicodeを使用できないOSを用いてフォント埋め込みデータを印刷する際の処理について説明する。
この場合、図8で説明した図3の機能構成の際の処理とは異なり、1つのプロセスでは処理できない。そして、複数のジョブを制御するために、アプリケーションプロセスとデスプーラプロセス間での待ち行列処理を実現する必要がある。実際には上記2つのプロセス間の通信はスプールファイルマネージャ304を介して行われるが、説明を簡潔に行うために待ち行列処理を含めスプールファイルマネージャ304を一つの通信媒介だと捉え、図9及び以下の説明からはあえて省略した。
【0029】
ステップA1. アプリケーション201は印刷ジョブが開始することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
ステップS1. スプーラ302は用紙サイズ等のジョブに関する情報を保持するジョブファイルをスプールファイル303に生成し、別プロセスであるデスプーラ305を起動する。
【0030】
ステップD1. デスプーラ305はジョブファイルを読み印刷ジョブ開始のためのGDI関数をコールする(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
ステップDRV1.プリンタドライバ203は、ジョブ開始制御のPDLコマンドを生成する。
【0031】
ステップA2. アプリケーション201はページ印刷が開始することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
ステップS2. スプーラ302はページに関する情報を保持するページファイルをスプールファイル303に生成する。
【0032】
ステップA3. アプリケーション201がUnicodeを用いて、ShiftJISでは表現できない文字描画を依頼してくる。
ステップG1. グラフィックエンジン202は、OS内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、指定された文字コード(Unicode)に対応するグリフインデックスを文字描画の文字コードとしてプリンタドライバ203に渡す。
【0033】
ステップS3. スプーラ302は、文字描画を表す情報を中間コードとしてスプールファイルのページファイルに書き込む。この中間コードにはDDI関数より取得可能な”グリフインデックス、フォント属性、描画属性”のみ含まれており、フォントは含まれていない。
【0034】
ステップA4. アプリケーション201はページ印刷が終了したことを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
ステップS4. スプーラ302は、ページファイルをクローズし、ページ再生をデスプーラ305に依頼する。
【0035】
ステップA5. アプリケーション201は印刷ジョブが終了することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
ステップS5. スプーラ302は、ジョブファイルをクローズし、これ以上ページが増えないことをデスプーラ305に通知する。
【0036】
ステップD2. デスプーラ305が、ステップS2で生成されたページファイルに記述された中間コードを再生するために、ページ開始のためのGDI関数をコールする(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
ステップDRV2. プリンタドライバ203は、ページ開始制御のPDLコマンドを生成する。
【0037】
ステップD3. デスプーラ305が、中間コードに記述された文字描画を再生するために、GDI関数をコールする。中間コードの文字コードとしては、フォントに依存するグリフインデックスコードが含まれている。(グラフィックエンジン202は描画時にコールされるGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
【0038】
ステップDRV3. プリンタドライバ203は、文字描画コマンドを生成するために、文字コードとしてグリフインデックスを用いて以下の処理を行い文字のグリフを取得する。
ステップDRV3.1. プリンタドライバ203は、グラフィックエンジンに対してグリフインデックスを用いて文字グリフの取得を行う。
【0039】
ステップG3. グラフィックエンジン202は、フォント属性に指定されているフェース名のフォントを探す。指定されたフェース名のフォントが存在すれば、フォント依存のグリフインデックスより、グリフを取得することが可能である。しかし該当フォントが埋め込みフォントの場合、アプリケーション201がOSに登録したフォントを破棄している場合がある。
【0040】
指定されたフェース名のフォントがグラフィックエンジン202上には存在しない場合、フォント置き換えにより近い種類の別のフォントを用いてグリフが作成される。フォント置き換えが行われた場合、フォント依存のグリフインデックスを用いてグリフを取得すると、ユーザが意図した文字と異なるグリフが取得されるおそれが強い。
【0041】
ステップD6. デスプーラ305はページ印刷が終了したことを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
ステップDRV4. プリンタドライバ203は、ページ終了制御のPDLコマンドを生成する。
【0042】
ステップD7. デスプーラ305は印刷ジョブが終了することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
ステップDRV5. プリンタドライバ203は、ジョブ終了制御のPDLコマンドを生成する。
【0043】
上記の処理は図9に示すようにアプリケーションプロセスとデスプーラプロセスの2つのプロセスで行われており、アプリケーション201がグラフィックエンジン202に登録した埋め込みフォントが、デスプーラによるスプールファイルの再生時にもグラフィックエンジン202に存在することは保証されていない。
【0044】
グラフィックエンジン202に埋め込みフォントが存在しない場合は、ステップG3.で説明したようにフォント置き換えが発生し、中間データで指定されていたフォントとは異なるフォントに置き換えられてしまうため、フォントに依存したグリフインデックスでは意図した文字のグリフを取得できない可能性が高い。またプリンタドライバ203において文字コードではなく、フォントに依存したグリフインデックスコードが送られてくるので、プリンタ内蔵のフォントを用いたフォント置き換え機能を適用することができない。
【0045】
ステップG3.でのフォント置き換えを防止するため、スプール時点でビットマップ置き換えを行う方法が考えられる。
このような、スプール時にビットマップ置き換えを行う印刷処理として考えられる動作を、図10を参照して説明する。
【0046】
ステップA1. アプリケーション201は印刷ジョブが開始することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
【0047】
ステップS1. スプーラ302は用紙サイズ等のジョブに関する情報を保持するジョブファイルをスプールファイル303に生成し、別プロセスであるデスプーラ305を起動する。
ステップD1. デスプーラ305はジョブファイルを読み印刷ジョブ開始のためのGDI関数をコールする(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
【0048】
ステップDRV1.プリンタドライバ203は、ジョブ開始制御のPDLコマンドを生成する。
ステップA2. アプリケーション201はページ印刷が開始することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
【0049】
ステップS2. スプーラ302はページに関する情報を保持するページファイルをスプールファイル303に生成する。
ステップA3. アプリケーション201がUnicodeを用いて、ShiftJISでは表現できない文字描画を依頼してくる。
【0050】
ステップG1. グラフィックエンジン202は、OS内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、指定された文字コード(Unicode)に対応するグリフインデックスを文字描画の文字コードとしてプリンタドライバ203に渡す。
【0051】
ステップS3. スプーラ302は、文字描画を表す情報を中間コードとしてスプールファイルのページファイルに書き込む。この中間コードに含まれるフォント属性が埋め込みフォントであった場合は、フォント置き換えによる文字描画の差異を無くすために、以下の処理を行う。
【0052】
ステップS3.1. スプーラ302は、グラフィックエンジン202に対して文字グリフの取得を行う。
ステップG2. グラフィックエンジン202はフォントより文字グリフを生成しスプーラ302へ受け渡す。アプリケーション201は、文字描画処理を実行中なので埋め込みフォントは使用可能であることが保証されている。
【0053】
ステップS3.2. スプーラ302は受け取った文字グリフを用いて文字描画をビットマップ描画に変換し、中間コードとして文字のビットマップ描画をスプールする
ステップA4. アプリケーション201はページ印刷が終了したことを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
【0054】
ステップS4. スプーラ302は、ページファイルをクローズし、ページ再生をデスプーラ305に依頼する。
ステップA5. アプリケーション201は印刷ジョブが終了することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
【0055】
ステップS5. スプーラ302は、ジョブファイルをクローズし、これ以上ページが増えないことをデスプーラ305に通知する。
ステップD2. デスプーラ305が、ページファイルに記述された中間コードを再生するために、ページ開始のためのGDI関数をコールする(グラフィックエンジン202はコールされたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
【0056】
ステップDRV2. プリンタドライバ203は、ページ開始制御のPDLコマンドを生成する。
ステップD8. デスプーラ305は、ページファイル上の文字描画から変換したビットマップ描画の中間コードをGDI関数コールに変換する(グラフィックエンジン202はコールされたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
【0057】
ステップDRV6. プリンタドライバ203は、ビットマップ描画をPDLコマンドに変換する。
ステップD6. デスプーラ305はページ印刷が終了したことを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
【0058】
ステップDRV4. プリンタドライバ203は、ページ終了制御のPDLコマンドを生成する。
ステップD7. デスプーラ305は印刷ジョブが終了することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
ステップDRV5. プリンタドライバ203は、ジョブ終了制御のPDLコマンドを生成する。
【0059】
図10を用いて説明したような処理により、プリンタドライバ203から(元々は存在しない)埋め込みフォントのグリフ要求があったとしても、グラフィックエンジンによるフォント置き換えが発生しないので、基本的にはユーザが意図した通りの形状を有する文字出力が得られる。しかし、文字描画をビットマップ描画に変換することにより、以下のような問題点を有する。
【0060】
1.拡大時の品質低下
図6右中段に示したように、スプール後に拡大処理を行った場合、文字の品位が低下する。
2.色処理の問題
ビットマップに変換された時点で文字描画に関する情報がなくなるため、カラー印刷時に行われる色変換処理の際に、文字描画としての色処理が適応できない。
3.圧縮の問題
文字グリフのビットマップに対して効果がある圧縮処理が適応できない。
【0061】
【発明が解決しようとする課題】
上述したように、プリンタに送信される印刷データを生成する前に、最終的にプリンタに送付する印刷データとは異なる形式のデータ形式(いわゆる中間コード)での一時保存を行うスプーラを備え、この中間コード形式で一時保存されたデータから改めて最終的にプリンタに送付する印刷データを生成するデスプーラとプリンタ制御コマンドを生成するプリンタドライバを備える従来の印刷制御装置においては、文字コードの代わりフォントに依存したグリフを識別するコード(グリフインデックス)が用いられた場合、デスプーラでフォント置き換えが発生した際に文字化けが発生するおそれがある。またフォントに依存したグリフインデックスは文字コードでないため、プリンタ内蔵フォントで使用可能な文字コードへ変換できず、プリンタ内蔵フォントへの置き換え処理を適用できない。
【0062】
また、このような問題を解決するために、フォント置き換えではなく文字描画をビットマップ描画に置き換えて処理したとしても、デスプーラでの拡大時の文字品位が低下する、色処理、圧縮処理が適応できない、プリンタ内蔵フォントへの置き換えが不可能である等の問題があった。
【0063】
本発明はこのような従来技術の問題点を解決し、印刷命令を一旦中間コード形式に変換した後プリンタ制御コマンドに変換する形式の印刷制御装置及び印刷制御方法において、アプリケーションから印刷制御装置内で文字コードとして処理できない体系の文字コードが指定された場合でも、文字化けすることなく印刷可能とする印刷制御装置及び印刷制御方法を提供することを目的とする。
【0064】
【課題を解決するための手段】
すなわち、本発明の要旨は、アプリケーションからの印刷命令を、所定の印刷装置に適した制御コマンドに変換して出力する印刷制御装置であって、印刷命令を、文字コード又はグリフインデックスを含んだ第1のデータ形式に変換するデータ変換手段と、第1のデータ形式を有する印刷命令を、制御コマンドとは異なる形式を有する中間データに変換し、記憶する中間データ生成手段と、中間データを制御コマンドに変換して出力する制御コマンド生成手段とを有し、中間データ生成手段が、 第1のデータ形式を有する印刷命令が、グリフインデックスを含む場合、このグリフインデックスに対応する文字コードを取得する文字コード取得手段を有し、第1のデータ形式を有する印刷命令に含まれていた、又は文字コード取得手段で取得された文字コードを用いて中間データを生成することを特徴とする印刷制御装置に存する。
【0065】
また、本発明の別の要旨は、アプリケーションからの印刷命令を、所定の印刷装置に適した制御コマンドに変換して出力する印刷制御方法であって、印刷命令を、文字コード又はグリフインデックスを含んだ第1のデータ形式に変換するデータ変換ステップと、第1のデータ形式を有する印刷命令を、制御コマンドとは異なる形式を有する中間データに変換し、記憶する中間データ生成ステップと、中間データを制御コマンドに変換して出力する制御コマンド生成ステップとを有し、中間データ生成ステップが、 第1のデータ形式を有する印刷命令が、グリフインデックスを含む場合、このグリフインデックスに対応する文字コードを取得する文字コード取得ステップを有し、第1のデータ形式を有する印刷命令に含まれていた、又は文字コード取得ステップで取得された文字コードを用いて中間データを生成することを特徴とする印刷制御方法に存する。
【0066】
また、本発明の別の要旨は、グリフインデックスを取得し、取得したグリフインデックスを文字コードに変換し、変換した文字コードを用いて文字描画情報を中間データ形式でスプールするスプーラと、スプーラによってスプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得し、取得したグリフインデックスを用いて文字グリフを取得するドライバとを有することを特徴とする印刷制御装置に存する。
【0067】
また、本発明の別の要旨は、グリフインデックスを取得し、取得したグリフインデックスを文字コードに変換し、変換した文字コードを用いて文字描画情報を中間データ形式でスプールし、スプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得し、取得したグリフインデックスを用いて文字グリフを取得することを特徴とする印刷制御方法に存する。
【0068】
また、本発明の別の要旨は、コンピュータを本発明の印刷制御装置として機能させることを特徴とするコンピュータプログラムに存する。
【0069】
また、本発明の別の要旨は、コンピュータを本発明の印刷制御装置として機能させることを特徴とするコンピュータプログラムを格納したコンピュータ読みとり可能な記憶媒体に存する。
【0070】
【発明の実施の形態】
以下、図面を参照して本発明をその好ましい実施形態に基づいて説明する。
まず、本発明の実施形態に係る印刷制御装置について説明する前に、本発明の実施形態に係る印刷制御装置が制御可能な印刷装置のエンジンの構成について説明する。
【0071】
(プリンタの構造)
図1は、本発明の実施形態に係る印刷制御装置が制御可能な印刷装置の構成例を説明する概略断面図である。本実施形態において、印刷装置1500は例えばレーザビームプリンタであるが、もちろんインクジェット方式を始め他の印刷方式の印刷装置であってもよい。
【0072】
印刷装置(以下、プリンタという)1500は、直接又はネットワーク等を介して印刷制御装置から供給されるプリンタ制御コマンド等を基に、記録媒体の一例としての記録用紙上に像を形成する。プリンタ本体740は、プリンタ制御ユニット1000、操作部1501、レーザドライバ702、半導体レーザ703、回転多面鏡705、静電ドラム706、現像ユニット707、用紙カセット708、搬送ローラ710、外部メモリ711、フェイスダウン排出部715及び排紙トレイ716とを備えている。
【0073】
上記各部の構成を動作とともに詳述すると、プリンタ制御ユニット1000は、プリンタ本体740全体の制御を行い、主にプリンタ制御コマンドをビデオ信号に変換してレーザドライバ702に出力する。プリンタ制御ユニット1000には、フォントデータやページ記述言語(PDL)のエミュレーションプログラム等を供給する外部メモリ711を接続することもできる。操作部1501には、プリンタ1500の操作、設定等を行うのためのキー及び表示手段(例えばLED表示器)等が設けられている。
【0074】
レーザドライバ702は半導体レーザ703を駆動するための回路であり、入力されたビデオ信号に応じて半導体レーザ703を駆動し、半導体レーザ703から発射されるレーザ光704をオン・オフする。半導体レーザ703は、回転多面鏡705に向けてレーザ光を発射する。回転多面鏡705は、レーザ光704を左右方向に反射し、それによってレーザ光704が静電ドラム706上を走査する。予め所定電位に帯電された静電ドラム706上をオン、オフするレーザ光704で走査することにより、プリンタ制御ユニット1000が出力するビデオ信号に対応した静電潜像がドラム表面に形成される。現像ユニット707は、静電ドラム706近傍に設けられ、現像材(トナー)を用いて静電潜像を現像(可視化)する。
【0075】
一方、用紙カセット708は、記録紙として例えばカットシートを収納する。給紙ローラ709及び搬送ローラ710は、給紙カセット708内のカットシート記録紙をプリンタ本体740内に搬送し、静電ドラム706の対向位置に供給する。記録紙は、用紙カセット708からだけでなく、用紙カセット708の蓋部上面に設けられた手差しトレイ(図示略)から供給することもできる。そして、ドラム上で現像された潜像(トナー像)は、転写ローラ等によって搬送されてきた記録紙上に転写される。
【0076】
定着部712は、カットシート記録紙に転写されたトナー像を加熱、加圧してカットシート記録紙上に定着させる。画像が形成された記録紙は、切り替えくさび713を上向きにした場合にはフェイスアップ排出部714から記録面を上にした状態で排紙トレイ716に排出され、くさび713を下向きにした場合にはフェイスダウン排出部715から記録面を下にした状態で排出される。
【0077】
(印刷制御装置の構成例)
次に、本発明の実施形態に係る印刷制御装置の一例としてのホストコンピュータの構成例を図2のブロック図を参照して説明する。尚、以下に説明する印刷制御装置の機能が実現されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、LAN(Local Area Network: ローカルエリアネットワーク)、WAN(Wide Area Network: 広域ネットワーク)等のネットワークを介して接続がなされ処理が行われるシステムであっても構わない。
【0078】
図2において、本発明の実施形態に係る印刷制御装置の一例としてのホストコンピュータ3000は、上述したプリンタ1500と接続され、印刷システムを構成している。ホストコンピュータ3000は、CPU1、RAM2、ROM3、キーボードコントローラ(KBC)5、CRTコントローラ(CRTC)6、ディスクコントローラ(DKC)7、プリンタコントローラ(PRTC)8、キーボード(KB)9、CRTディスプレイ(CRT)10及び外部メモリ11とを備えている。
【0079】
先ず、ホストコンピュータ3000各部の構成を詳述すると、CPU1はシステムバスに接続された各デバイスを統括的に制御する中央処理装置であり、ROM3のプログラム用ROM3b(後述)或いは外部メモリ11に記憶された文書処理プログラム等のアプリケーションプログラムに基づいて、図形、イメージ、文字、表(表計算等を含む)等が混在した文書処理を実行する。また、CPU1は、例えばRAM2上に設定された表示情報RAMへのアウトラインフォントの展開(ラスタライズ)処理を実行し、CRTディスプレイ10上でのWSYIWYG(What You See Is What You Get:CRTディスプレイ画面上に見えているそのままの大きさや形で印刷できる機能)を可能としている。
【0080】
更に、CPU1はCRTディスプレイ10上のマウスカーソル(図示略)等で指示されたコマンドに基づいて登録された種々のウインドウを開き、種々のデータ処理を実行する。ユーザはプリンタ1500を使用して印刷する際、印刷の設定に関するウインドウを開き、プリンタ1500の設定や印刷モードの選択を含むプリンタドライバに対する印刷処理方法の設定を行うことができるようになっている。
【0081】
RAM2はCPU1の主メモリ、ワークエリア等として機能する。ROM3はフォント用ROM3aと、プログラム用ROM3bと、データ用ROM3cとを備えている。フォント用ROM3a或いは外部メモリ11は、上記文書処理の際に使用するフォントデータなどを記憶する。プログラム用ROM3b或いは外部メモリ11は、CPU1の制御プログラムであるオペレーティングシステム(以下、OS)等を記憶する。データ用ROM3c或いは外部メモリ11は、上記文書処理等を行う際に使用する各種データを記憶する。
【0082】
キーボードコントローラ(KBC)5は、キーボード9やポインティングデバイス(図示略)からのキー入力を制御する。CRTコントローラ(CRTC)6は、CRTディスプレイ(CRT)10の表示を制御する。ディスクコントローラ(DKC)7は、外部メモリ11とのアクセスを制御する。プリンタコントローラ(PRTC)8は、双方向性インターフェース21を介してプリンタ1500に接続されて、プリンタ1500との通信制御処理を実行する。キーボード9は、各種キーを備えている。
【0083】
CRTディスプレイ(CRT)10は、図形、イメージ文字、表等を表示する。外部メモリ11はハードディスク(HD)、フロッピーディスク(FD)等から構成されており、ブートプログラム、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、プリンタ制御コマンド生成プログラム(以下、プリンタドライバ)等を記憶する。
【0084】
上述したCPU1、RAM2、ROM3、キーボードコントローラ(KBC)5、CRTコントローラ(CRTC)6、ディスクコントローラ(DKC)7、プリンタコントローラ(PRTC)8は、コンピュータ制御ユニット2000上に配設されている。
このようなホストコンピュータ3000は、例えばプリンタ1500と接続可能なインターフェース21を有する汎用のパーソナルコンピュータによって実現することができる。
【0085】
次に、プリンタ1500各部の構成を詳述すると、CPU12は、システムバス15に接続された各デバイスを統括的に制御する中央処理装置であり、ROM13のプログラム用ROM13b(後述)に記憶された制御プログラム等或いは外部メモリ14に記憶された制御プログラム等に基づいて印刷部(プリンタエンジン)17に出力情報としての画像信号を出力する。また、CPU12は、入力部18を介してホストコンピュータ3000との通信処理が可能となっており、プリンタ1500内の情報等をホストコンピュータ3000に通知できる構成となっている。
【0086】
RAM19は、CPU12の主メモリや、ワークエリア等として機能し、増設ポートに接続されるオプションRAM(図示略)によりメモリ容量を拡張することができるように構成されている。尚、RAM19は、出力情報展開領域、環境データ格納領域、NVRAM等に用いられる。ROM13は、フォント用ROM13aと、プログラム用ROM13bと、データ用ROM13cとを備えている。フォント用ROM13aは、上記出力情報を生成する際に使用するフォントデータなどを記憶する。プログラム用ROM13bは、CPU12の制御プログラム等を記憶する。データ用ROM13cは、プリンタ1500にハードディスク等の外部メモリ711が接続されていない場合には、ホストコンピュータ3000上で利用される情報等を記憶する。
【0087】
入力部18は、双方向性インターフェース21を介してプリンタ1500とホストコンピュータ3000との間におけるデータの送受を行う。印刷部インターフェース(I/F)16は、CPU12と印刷部17との間におけるデータの送受を行う。メモリコントローラ(MC)20は、外部メモリ711のアクセスを制御する。印刷部17は、CPU12の制御に基づき印刷動作を行う。操作部1501は、各種操作のためのスイッチや表示手段(例えばLED表示器)等を備えている。
【0088】
外部メモリ711は、ハードディスク(HD)、ICカード等から構成されており、プリンタ1500にオプションとして接続される。外部メモリ711は、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶するものであり、メモリコントローラ(MC)20によりアクセスを制御される。尚、外部メモリ711は、1個に限らず、複数個備えることが可能となっている。即ち、内蔵フォントに加えてオプションカード、言語系の異なるプリンタ制御言語を解釈するプログラムを格納した外部メモリを複数接続できるように構成されていてもよい。更に、NVRAM(図示略)を有し、操作部1501からのプリンタモード設定情報を記憶するようにしてもよい。
【0089】
上述したCPU12、RAM19、ROM13、入力部18、印刷部インターフェース(I/F)16、メモリコントローラ(MC)20は、プリンタ制御ユニット1000上に配設されている。
【0090】
(印刷制御装置の機能構成)
本発明における印刷制御装置としてのホストコンピュータ3000の機能構成は、上述した図4の構成と同一でよいため、重複する説明は省略する。
なお、本実施形態において、図4におけるアプリケーション201、グラフィックエンジン202、ディスパッチャ301、プリンタドライバ203、スプーラ302、スプールファイルマネージャ304、デスプーラ305およびシステムスプーラ204は、上記図2の外部メモリ11に保存されたファイルとして存在し、実行される場合にOSやそのモジュールを利用するモジュールによってRAM2にロードされ実行されるプログラムモジュールである。
【0091】
また、アプリケーション201およびプリンタドライバ203は、外部メモリ11のFDやCD−ROM或いはネットワーク(以上図示略)を経由して外部メモリ11としてのHDに追加することが可能となっている。外部メモリ11に保存されているアプリケーション201はRAM2にロードされて実行されるが、該アプリケーション201からプリンタ1500に対して印刷を行う際には、同様にRAM2にロードされ実行可能となっているグラフィックエンジン202を利用して出力(描画)を行う。
【0092】
グラフィックエンジン202は印刷装置(プリンタ)ごとに用意されたプリンタドライバ203を同様に外部メモリ11からRAM2にロードし、アプリケーション201の出力(GDI関数)から印刷命令(DDI関数)を生成し、ディスパッチャ301へ出力する。
【0093】
グラフィックエンジン202からの印刷命令はディスパッチャ301が受け取る。ディスパッチャ301はグラフィックエンジン202から受け取った印刷命令が、アプリケーション201からグラフィックエンジン202へ発行されたものである場合には、外部メモリ11に格納されているスプーラ302をRAM2にロードし、プリンタドライバ203ではなくスプーラ302へ印刷命令を送付する。
【0094】
スプーラ302は受け取った印刷命令を中間コードに変換してスプールファイル303に出力する。また、スプーラ302は、プリンタドライバ203に対して設定されている印刷データに関する加工設定をプリンタドライバ203から取得してスプールファイル303に保存する。尚、スプールファイル303は外部メモリ11上にファイルとして生成するが、RAM2上に生成されても構わない。更に、スプーラ302は、外部メモリ11に格納されているスプールファイルマネージャ304をRAM2にロードし、スプールファイルマネージャ304に対してスプールファイル303の生成状況を通知する。
【0095】
その後、スプールファイルマネージャ304は、スプールファイル303に保存された印刷データに関する加工設定の内容に従って印刷を行えるか判断する。スプールファイルマネージャ304がグラフィックエンジン202を利用して印刷を行えると判断した際には、外部メモリ11に格納されているデスプーラ305をRAM2にロードし、デスプーラ305に対して、スプールファイル303に記述された中間コードの印刷処理を行うように指示する。
【0096】
デスプーラ305はスプールファイル303に含まれる中間コードをスプールファイル303に含まれる加工設定の内容に従って加工し、グラフィックエンジン202経由へ出力する。グラフィックエンジン202はデスプーラ305の出力(GDI関数)から印刷命令(DDI関数)を生成し、ディスパッチャ301へ出力する。ディスパッチャ301がグラフィックエンジン202から受け取った印刷命令がデスプーラ305からグラフィックエンジン202へ発行されたものである場合には、ディスパッチャ301はスプーラ302ではなく、プリンタドライバ203に印刷命令を送る。プリンタドライバ203はプリンタ制御コマンドを生成し、システムスプーラ204経由でプリンタ1500に出力する。
【0097】
(印刷データの処理)
次に、本実施形態のホストコンピュータ3000において、グリフインデックステーブルを用いねばならない際の印刷データの処理について、図11のシーケンスチャートを参照して説明する。なお、図9と同様、本処理も1つのプロセスでは処理できない。そして、複数のジョブを制御するために、アプリケーションプロセスとデスプーラプロセス間での待ち行列処理を実現する必要がある。実際には上記2つのプロセス間の通信はスプールファイルマネージャ304を介して行われるが、説明を簡潔に行うために待ち行列処理を含めスプールファイルマネージャ304を一つの通信媒介だと捉え、図11及び以下の説明からはあえて省略した。
【0098】
また、以下説明する例は、印刷制御装置としてのホストコンピュータ3000で稼働するOSではShiftJISのみをサポートし、一方OSに登録されたフォントのグリフインデックステーブルにはShiftJIS以外の文字コード体系(ここではUnicodeとする)も含まれているものとする。
【0099】
ステップA1. アプリケーション201は印刷ジョブが開始することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
【0100】
ステップS1. スプーラ302は用紙サイズ等のジョブに関する情報を保持するジョブファイルをスプールファイル303に生成し、別プロセスであるデスプーラ305を起動する。
【0101】
ステップD1. デスプーラ305はジョブファイルを読み印刷ジョブ開始のためのGDI関数をコールする(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
ステップDRV1.プリンタドライバ203は、ジョブ開始制御のPDLコマンドを生成する。
【0102】
ステップA2. アプリケーション201はページ印刷が開始することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
ステップS2. スプーラ302はページに関する情報を保持するページファイルをスプールファイル303に生成する。
ステップA3. アプリケーション201が、例えばUnicodeを用いて、例えばShiftJISでは表現できない(ShiftJISでは対応する文字が規定されていない)文字描画を依頼してくる(GDI関数をコールする)。
【0103】
ステップG1. グラフィックエンジン202は、コールされたGDI関数から、使用されている文字コードがUnicodeであることを検出する。そして、OS内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、指定された文字コード(Unicode)に対応するグリフインデックスを文字描画の文字コードとしてDDI関数の形でプリンタドライバ203に渡す。この際、DDI関数には文字コードではなくグリフインデックスが含まれていることを示しておく。
【0104】
ステップS3. このステップにおいてスプーラ302は、ステップG1.でグラフィックエンジン202がDDI関数で受け渡したグリフインデックス(DDI関数より取得可能な情報は”グリフインデックス、フォント属性、描画属性”のみであり、実際のフォント(グリフ)は含まれない)ではなく、文字コードを用いて中間コード形式のスプーリングを行う。DDI関数から取得したグリフインデックスを文字コードに変換するため、以下のステップS3.4.を実行する。
【0105】
ステップS3.4. スプーラ302は、DDI関数で受け取った情報のうち、フォント属性を用いてグラフィックエンジン202にグリフインデックステーブルの情報取得を依頼する。
ステップG4. グラフィックエンジン202は、スプーラ302から受け取ったフォント属性から対応するグリッフインデックステーブルを取得し、スプーラ302に受け渡す。スプーラ302は、取得したグリフインデックステーブルを用い、グリフインデックスに対応する文字コード(この場合はUnicodeだが、それ以外のコード体系でもよい)を得て、その文字コード(Unicode)を用いて文字描画情報を中間データ形式でスプールする。
【0106】
ステップA4. アプリケーション201はページ印刷が終了したことを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
ステップS4. スプーラ302は、ページファイルをクローズし、ページ再生をデスプーラ305に依頼する。
【0107】
ステップA5. アプリケーション201は印刷ジョブが終了することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をスプーラ302へ引き渡す)。
ステップS5. スプーラ302は、ジョブファイルをクローズし、これ以上ページが増えないことをデスプーラ305に通知する。
【0108】
ステップD2. デスプーラ305が、ステップS2で生成されたページファイルに記述された中間コードを再生するために、ページ開始のためのGDI関数をコールする(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
【0109】
ステップDRV2. プリンタドライバ203は、ページ開始制御のPDLコマンドを生成する。
ステップD3. デスプーラ305が、スプール302がスプールした中間コードに記述された文字描画を再生するために、GDI関数をコールする。この際、中間コードの文字コードとしては、ステップS3.4.で変換した、フォントに依存しないUnicodeとなる。
【0110】
ステップG1. グラフィックエンジン202は、コールされたGDI関数から、使用されている文字コードがUnicodeであることを検出する。そして、OS内部でUnicodeを使用できないために、Unicodeで指定された文字のフォントに対応するグリフインデックステーブルを参照し、指定された文字コード(Unicode)に対応するグリフインデックスを文字描画の文字コードとしてDDI関数の形でプリンタドライバ203に渡す。この際、DDI関数には文字コードではなくグリフインデックスが含まれていることを示しておく。
【0111】
ステップDRV3. プリンタドライバ203は、文字描画コマンドを生成するために、文字コードとしてグリフインデックスを用いて以下の処理を行い文字のグリフを取得する。
ステップDRV3.1. プリンタドライバ203は、グラフィックエンジン202に対してグリフインデックスを用いて文字グリフの取得を行う。
【0112】
ステップG3. グラフィックエンジン202は、フォント属性に指定されているフェース名のフォントを探す。指定されたフェース名のフォントが存在すれば、フォント依存のグリフインデックスより、グリフを取得することが可能である。しかし該当フォントが埋め込みフォントの場合、アプリケーションがシステム(OS)に登録したフォントを破棄している場合がある。指定されたフォントがグラフィックエンジン202上に存在しない場合、グラフィックエンジン202はフォント置き換え処理を行い、指定されたフォントに近い種類のフォントもしくは予め定められた置き換えフォントを用いてグリフを作成する。
【0113】
この場合、プリンタドライバ203がフォントに依存しない文字コード(本実施形態においてはUnicode)を用いてグリフの取得を行っているため、指定したフォントが使用できなくても、フォントの種類が変化するだけで文字が変わったり出力されなかったりすることはなく、ユーザが意図した文字のグリフが取得できる。
【0114】
ステップD6. デスプーラ305はページ印刷が終了したことを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
ステップDRV4. プリンタドライバ203は、ページ終了制御のPDLコマンドを生成する。
【0115】
ステップD7. デスプーラ305は印刷ジョブが終了することを、GDI関数を介してグラフィックエンジン202に通知する(グラフィックエンジン202は通知されたGDI関数をDDI関数に変換してディスパッチャ301へ出力し、ディスパッチャ301はその内容をプリンタドライバ203へ引き渡す)。
ステップDRV5. プリンタドライバ203は、ジョブ終了制御のPDLコマンドを生成する。
【0116】
スプールの際にDDI関数よりは直接入手できないフォントの情報を、GDI関数をコールすることによって入手する。フォントよりグリフインデックステーブルを取得し、DDI関数より渡されるグリフインデックスを、文字コードに変換しスプールする。このことによりデスプーラ203で再生される文字描画の中間コードがフォント依存ではなくなり、指定したフォントが他のフォントに置き換えされた場合でも文字化けが発生しなくなる。また一般的な文字コードで処理されるので、デスプーラ305でのプリンタ内蔵のフォントへの置き換え等の処理が容易になる。
【0117】
フォントによっては、例えば日本語の縦書きや、2つの文字コードの間隔を詰めて1つの文字にする場合など、文字描画に適応される修飾によって同じ文字コードに対して2つ以上のグリフインデックスを定義することがある。このようなフォントについて受け渡されたグリフインデックスを文字コードに逆変換してスプールすると、文字修飾の情報が抜け落ちる可能性がある。そのため、ステップS3.4.でグリフインデックステーブルを用いて文字コードに変換する際にこのような問題があるか否かを判断し、文字コードに逆変換しない方が望ましい場合には文字コードに変換せずに、図10で説明したような文字描画のビットマップ変換を行うことで対処するように構成すればよい。このようにすれば、ユーザが意図した出力との差異を最小にすることが可能になる。
【0118】
またフォントによっては、プリンタ内蔵フォントでサポートしている文字コードを、グリフインデックステーブルでサポートしていないものもある。その場合はプリンタ内蔵フォントへの置き換えを行わずに文字のグリフとしてコマンドを生成する。
【0119】
【他の実施形態】
なお、上述の実施形態において、スプーラがグリフインデックスを文字コードに変換する際に、アプリケーションから指定された文字コードと同じUnicodeに変換したが、両者を同じ体系の文字コードに変換しなければならないわけではなく、グリフインデックステーブルに含まれる任意の体系の文字コードに変換してスプールすることができる。
【0120】
ただし、グリフインデックステーブルを用いて文字コードに変換する場合には、なるべくサポートする文字の種類が多いコード体系の文字コードにすることが好ましい。
【0121】
なお、本発明は、複数の機器(例えばホストコンピュータ、インターフェース機器、リーダ、プリンタなど)から構成されるシステムに適用しても、一つの機器からなる装置(複写機、プリンタ、ファクシミリ装置など)に適用してもよい。
【0122】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記憶した記憶媒体を、システムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成される。
【0123】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【0124】
プログラムコードを供給するための記憶媒体としては、例えば、フロッピーディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどを用いることができる。
【0125】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【0126】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【0127】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明した(図11に示す)シーケンスチャートに対応するプログラムコードが少なくとも格納されることになる。
【0128】
【発明の効果】
以上説明したように、本発明によれば、グリフインデックスを文字コードに変換してからスプールすることにより、アプリケーションが指定してきた文字コードの情報を失なうことなく中間コード形式のデータを記憶できる。その結果、その後フォント置き換えが発生した場合でも文字化けが起こらず、ユーザが意図した文字を印刷することが可能になるほか、一般的な文字コードを用いた描画の際の、色処理、圧縮、プリンタ内蔵フォント置き換えの処理を文字描画に適応可能になるという効果を有する。
【図面の簡単な説明】
【図1】本発明の印刷制御装置を接続可能なプリンタの一例としてのレーザビームプリンタの構成例を示す断面図である。
【図2】本発明の一実施形態に係る印刷制御装置としてのホストコンピュータと、それに接続されたプリンタのハードウェア構成例を示すブロック図である。
【図3】従来の、アプリケーションからの印刷命令を中間コードデータへ変換せずにプリンタ制御コマンドに変換する形式の印刷制御装置の代表的な機能ブロック図である。
【図4】本発明の印刷制御装置に適用可能な、アプリケーションからの印刷命令を中間コードデータへ変換した後にプリンタ制御コマンドに変換する形式の印刷制御装置の代表的な機能ブロック図である。
【図5】文字描画に必要な情報と、印刷結果を説明する図である。
【図6】文字描画においてフォント置き換え処理、ビットマップ置き換えが生じた場合の印刷結果の例を示した図である。
【図7】グリフインデックステーブルの例を示す図である。
【図8】図3に示した印刷制御装置における印刷処理のシーケンスを示す図である。
【図9】図4に示した印刷制御装置における印刷処理のうち、フォント置き換えが発生する場合のシーケンスを示す図である。
【図10】図4に示した印刷制御装置における印刷処理のうち、ビットマップ置き換えが発生する場合のシーケンスを示す図である。
【図11】本発明の実施形態に係る印刷制御装置における印刷処理のシーケンスを示す図である。
Claims (16)
- アプリケーションからの印刷命令を、所定の印刷装置に適した制御コマンドに変換して出力する印刷制御装置であって、
前記印刷命令を、文字コード又はグリフインデックスを含んだ第1のデータ形式に変換するデータ変換手段と、
前記第1のデータ形式を有する印刷命令を、前記制御コマンドとは異なる形式を有する中間データに変換し、記憶する中間データ生成手段と、
前記中間データを前記制御コマンドに変換して出力する制御コマンド生成手段とを有し、
前記中間データ生成手段が、
前記第1のデータ形式を有する印刷命令が、前記グリフインデックスを含む場合、このグリフインデックスに対応する文字コードを取得する文字コード取得手段を有し、前記第1のデータ形式を有する印刷命令に含まれていた、又は前記文字コード取得手段で取得された文字コードを用いて前記中間データを生成することを特徴とする印刷制御装置。 - 前記データ変換手段が、
前記印刷命令に指定された文字コードが、前記印刷制御装置で文字コードとして取り扱いできない体系の文字コードである場合に前記グリフインデックスを、それ以外の文字コードである場合に前記文字コードをそれぞれ含んだ前記第1のデータ形式を有する印刷命令に変換することを特徴とする請求項1記載の印刷制御装置。 - 前記データ変換手段が、1つのグリフインデックスに対して複数種の体系における文字コードが対応付けされたグリフインデックステーブルを用いて前記印刷命令に含まれる文字コードを対応するグリフインデックスに変換することを特徴とする請求項1又は請求項2記載の印刷制御装置。
- 前記文字コード取得手段が、前記グリフインデックステーブルを用いて前記第1のデータ形式を有する印刷命令に含まれる前記グリフインデックスから対応する文字コードを得ることを特徴とする請求項3記載の印刷制御装置。
- 前記中間データ生成手段が、
前記文字コード取得手段が前記グリフインデックスから対応する文字コードを取得した際、1つの前記グリフインデックスに対して複数の文字コードが対応していた場合には、前記グリフインデックスからビットマップ変換を行った結果を前記中間データとして記憶することを特徴とする請求項1乃至請求項4のいずれか1項に記載の印刷制御装置。 - アプリケーションからの印刷命令を、所定の印刷装置に適した制御コマンドに変換して出力する印刷制御方法であって、
前記印刷命令を、文字コード又はグリフインデックスを含んだ第1のデータ形式に変換するデータ変換ステップと、
前記第1のデータ形式を有する印刷命令を、前記制御コマンドとは異なる形式を有する中間データに変換し、記憶する中間データ生成ステップと、
前記中間データを前記制御コマンドに変換して出力する制御コマンド生成ステップとを有し、
前記中間データ生成ステップが、
前記第1のデータ形式を有する印刷命令が、前記グリフインデックスを含む場合、このグリフインデックスに対応する文字コードを取得する文字コード取得ステップを有し、前記第1のデータ形式を有する印刷命令に含まれていた、又は前記文字コード取得ステップで取得された文字コードを用いて前記中間データを生成することを特徴とする印刷制御方法。 - 前記データ変換ステップが、
前記印刷命令に指定された文字コードが、前記印刷制御方法で文字コードとして取り扱いできない体系の文字コードである場合に前記グリフインデックスを、それ以外の文字コードである場合に前記文字コードをそれぞれ含んだ前記第1のデータ形式を有する印刷命令に変換することを特徴とする請求項6記載の印刷制御方法。 - 前記データ変換ステップが、1つのグリフインデックスに対して複数種の体系における文字コードが対応付けされたグリフインデックステーブルを用いて前記印刷命令に含まれる文字コードを対応するグリフインデックスに変換することを特徴とする請求項6又は請求項7記載の印刷制御方法。
- 前記文字コード取得ステップが、前記グリフインデックステーブルを用いて前記第1のデータ形式を有する印刷命令に含まれる前記グリフインデックスから対応する文字コードを得ることを特徴とする請求項8記載の印刷制御方法。
- 前記中間データ生成ステップが、
前記文字コード取得ステップが前記グリフインデックスから対応する文字コードを取得した際、1つの前記グリフインデックスに対して複数の文字コードが対応していた場合には、前記グリフインデックスからビットマップ変換を行った結果を前記中間データとして記憶することを特徴とする請求項6乃至請求項9のいずれか1項に記載の印刷制御方法。 - コンピュータを請求項1乃至請求項5のいずれか1項に記載の印刷制御装置として機能させることを特徴とするコンピュータプログラム。
- 請求項11記載のコンピュータプログラムを格納したコンピュータ読みとり可能な記憶媒体。
- グリフインデックスを取得し、取得したグリフインデックスを文字コードに変換し、変換した文字コードを用いて文字描画情報を中間データ形式でスプールするスプーラと、
前記スプーラによってスプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得し、取得したグリフインデックスを用いて文字グリフを取得するドライバとを有することを特徴とする印刷制御装置。 - グリフインデックスを取得し、
取得したグリフインデックスを文字コードに変換し、
変換した文字コードを用いて文字描画情報を中間データ形式でスプールし、
スプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得し、
取得したグリフインデックスを用いて文字グリフを取得することを特徴とする印刷制御方法。 - グリフインデックスを取得する工程のプログラムと、
取得したグリフインデックスを文字コードに変換する工程のプログラムと、
変換した文字コードを用いて文字描画情報を中間データ形式でスプールする工程のプログラムと、
スプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得する工程のプログラムと、
取得したグリフインデックスを用いて文字グリフを取得する工程のプログラムとを有することを特徴とするコンピュータプログラム。 - グリフインデックスを取得する工程のプログラムと、
取得したグリフインデックスを文字コードに変換する工程のプログラムと、
変換した文字コードを用いて文字描画情報を中間データ形式でスプールする工程のプログラムと、
スプールされた文字描画命令に含まれる文字コードに対応するグリフインデックスを取得する工程のプログラムと、
取得したグリフインデックスを用いて文字グリフを取得する工程のプログラムとを記憶することを特徴とするコンピュータ読みとり可能な記憶媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001197287A JP3870042B2 (ja) | 2001-06-28 | 2001-06-28 | 印刷制御装置及び印刷制御方法 |
US10/180,139 US7319532B2 (en) | 2001-06-28 | 2002-06-27 | Printing control apparatus and printing control method capable of accurately printing embedded font |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001197287A JP3870042B2 (ja) | 2001-06-28 | 2001-06-28 | 印刷制御装置及び印刷制御方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003015850A JP2003015850A (ja) | 2003-01-17 |
JP3870042B2 true JP3870042B2 (ja) | 2007-01-17 |
Family
ID=19034918
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001197287A Expired - Lifetime JP3870042B2 (ja) | 2001-06-28 | 2001-06-28 | 印刷制御装置及び印刷制御方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3870042B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8253951B2 (en) | 2004-06-10 | 2012-08-28 | Sharp Laboratories Of America, Inc. | Systems and methods for determining when to download a resource to a printing device as part of a print job |
JP2007240848A (ja) * | 2006-03-08 | 2007-09-20 | Seiko Epson Corp | 表示プログラム、データ構造及び表示装置 |
JP7400481B2 (ja) * | 2020-01-15 | 2023-12-19 | セイコーエプソン株式会社 | 印刷装置、及び印刷装置の制御方法 |
-
2001
- 2001-06-28 JP JP2001197287A patent/JP3870042B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JP2003015850A (ja) | 2003-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7319532B2 (en) | Printing control apparatus and printing control method capable of accurately printing embedded font | |
JP3747130B2 (ja) | 情報処理装置、メッセージ表示方法、インタフェース装置、及びコンピュータ読み取り可能なプログラムが格納された記憶媒体 | |
JP3862652B2 (ja) | 印刷制御方法及び情報処理装置 | |
US7884952B2 (en) | Print control apparatus, print control method, and program for implementing the method | |
JP2000190573A (ja) | 印刷制御方法および印刷システム | |
JP3576819B2 (ja) | 情報処理装置及び印刷制御方法並びに記憶媒体 | |
US8305610B2 (en) | Method for changing printer drivers in information processing apparatus | |
US20020026453A1 (en) | Information processing apparatus and method for creating print data and storage medium | |
JP2002041261A (ja) | 情報処理装置及び情報処理方法及びコンピュータ読み取り可能なプログラムを格納した記憶媒体 | |
JP2004102618A (ja) | 印刷制御装置及び方法、コンピュータプログラム、コンピュータ読み取り可能な記憶媒体、プレビュー装置及び方法、プリンタドライバ及びそのプレビュー方法 | |
JP3907362B2 (ja) | 印刷制御方法及び装置および印刷システム | |
JP3870042B2 (ja) | 印刷制御装置及び印刷制御方法 | |
US6496279B2 (en) | Image processing apparatus, method and memory medium therefor | |
JP3962559B2 (ja) | 印刷制御装置及び印刷制御方法 | |
JP2005018494A (ja) | データ処理装置および印刷データ生成方法およびコンピュータが読取り可能なプログラムを格納した記憶媒体およびプログラム | |
JP2004038527A (ja) | プリンタドライバおよび印刷制御方法およびコンピュータが読み取り可能な記憶媒体およびプログラム | |
JP4054544B2 (ja) | 情報処理装置、情報処理方法、印刷制御プログラム、印刷処理装置、印刷処理方法及び印刷処理プログラム | |
JP2005161819A (ja) | 印刷装置および印刷制御方法 | |
JP4100912B2 (ja) | 情報処理装置及びその制御方法、プログラム並びに記憶媒体 | |
US7027170B1 (en) | Printing control system for separation printing | |
JP2004110337A (ja) | 画像形成方法、画像形成システム、クライアント端末、サーバ装置、プログラム、記憶媒体 | |
US8756491B2 (en) | PDL data processing device | |
JP2006178622A (ja) | 文書変換方法、文書変換装置、及びプログラム | |
JP2000298565A (ja) | 印刷制御方法及び装置と前記印刷制御方法を実行するプログラムを記憶した記憶媒体 | |
JP2002259101A (ja) | プリンタドライバ及び情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040611 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060905 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20061006 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061016 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 3870042 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091020 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101020 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101020 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111020 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111020 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121020 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131020 Year of fee payment: 7 |
|
EXPY | Cancellation because of completion of term |