(57)【要約】【課題】  描画オブジェトを付加して描画処理を行うことができるプログラム、情報処理装置および画像処理システムを提供すること。【解決手段】  本プログラムは、コンピュータを、設定情報を取得する設定取得手段１１６、取得された設定情報に基づいて描画オブジェクトのパスの情報を準備するパス準備手段１１６、および、準備されたパスの情報を、保存手段１２６に所定インタフェースを介して設定するパス設定手段１１６として機能させるためのコンポーネントを含む。本プログラムは、さらに、コンピュータを、描画オブジェクトの描画に際し、保存手段１２６から所定インタフェースを介して描画オブジェクトのパスの情報を取得するパス取得手段（１１８，１５６）、および、取得されたパスの情報に基づき、所定パターンでパスを描画するよう指令するコマンドを送信するコマンド送信手段（１１８，１５６）として機能させるためのコンポーネントを含む。【選択図】図４
2015041268.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
設定情報を取得する設定取得手段、
前記設定取得手段により取得された設定情報に基づいて描画オブジェクトのパスの情報を準備するパス準備手段、
前記パス準備手段により準備された前記パスの情報を、保存手段に所定インタフェースを介して設定するパス設定手段、
前記描画オブジェクトの描画に際し、前記保存手段から所定インタフェースを介して前記描画オブジェクトのパスの情報を取得するパス取得手段、および
前記パス取得手段により取得された前記パスの情報に基づき、所定パターンで前記パスを描画するよう指令するコマンドを送信するコマンド送信手段
として機能させるためのプログラム。
【請求項２】
前記設定取得手段、前記パス準備手段および前記パス設定手段は、画像処理ドライバを構成し、設定を受け付ける設定手段に含まれ、かつ、前記パス取得手段および前記コマンド送信手段は、前記画像処理ドライバを構成し、所定言語のコマンドを生成する描画手段に含まれ、かつ、前記保存手段は、スプーラ手段とポート手段との間でのデータ送受信を制御するモニタ手段に含まれる、請求項１に記載のプログラム。
【請求項３】
前記パス準備手段は、当該プログラムが動作する基本ソフトウェアにより提供されるインタフェースを介して、前記設定情報に規定される描画オブジェクトのパスの情報を取得することを特徴とする、請求項１または２に記載のプログラム。
【請求項４】
前記設定取得手段は、アプリケーション手段から描画手段に渡された設定情報を、該プログラムが動作する基本ソフトウェアにより提供されるインタフェースを介して、該描画手段から取得することを特徴とする、請求項１〜３のいずれか１項に記載のプログラム。
【請求項５】
前記設定取得手段は、処理開始後に呼び出される設定画面で設定された設定情報を取得し、前記パス設定手段は、ジョブ開始に際して、前記パスの情報とともに、前記設定情報を前記保存手段に設定し、前記パス取得手段は、最初のページ開始に際して、前記保存手段から前記設定情報を取得するとともに、ページ終了に際して、前記保存手段から前記パスの情報を取得する、請求項１〜３のいずれか１項に記載のプログラム。
【請求項６】
当該プログラムは、前記設定情報に規定される前記描画オブジェクトの透過率に応じた塗りつぶしパターンを準備する、描画手段上のパターン準備手段をさらに含み、
前記所定パターンで前記パスを描画するよう指令するコマンドは、前記パターン準備手段により準備された前記塗りつぶしパターンを規定する第１のコマンドと、前記パスをセットし、前記パスを塗りつぶすよう指令する第２のコマンドとを含む、請求項１〜５のいずれか１項に記載のプログラム。
【請求項７】
前記パス設定手段および前記パス取得手段は、それぞれ、当該プログラムが動作する基本ソフトウェアにより付与されるジョブ識別子をキーとして、前記保存手段との間で、前記描画オブジェクトのパスの情報の設定および取得を行い、前記ジョブ識別子は、アプリケーションからのジョブ開始の指令に際して基本ソフトウェアにより与えられる、請求項１〜６のいずれか１項に記載のプログラム。
【請求項８】
設定情報を取得する設定取得手段と、
前記設定取得手段により取得された設定情報に基づいて描画オブジェクトのパスの情報を準備するパス準備手段と、
前記パス準備手段により準備された前記パスの情報を、保存手段に所定インタフェースを介して設定するパス設定手段と、
前記描画オブジェクトの描画に際し、前記保存手段から所定インタフェースを介して前記描画オブジェクトのパスの情報を取得するパス取得手段と、
前記パス取得手段により受信された前記パスの情報に基づき、所定パターンで前記パスを描画するよう指令するコマンドを送信するコマンド送信手段と
を含む情報処理装置。
【請求項９】
プログラムと、画像処理装置とを含み構成される画像処理システムであって、
前記プログラムは、コンピュータを、
設定情報を取得する設定取得手段、
前記設定取得手段により取得された設定情報に基づいて描画オブジェクトのパスの情報を準備するパス準備手段、
前記パス準備手段により準備された前記パスの情報を、保存手段に所定インタフェースを介して設定するパス設定手段、
前記描画オブジェクトの描画に際し、前記保存手段から所定インタフェースを介して前記描画オブジェクトのパスの情報を取得するパス取得手段、および
前記パス取得手段により受信された前記パスの情報に基づき、所定パターンで前記パスを描画するよう指令するコマンドを送信するコマンド送信手段
として機能させるためのプログラムであり、
前記画像処理装置は、前記コマンド送信手段により送信されたコマンドを受信し、該コマンドに基づいて画像処理を実行する装置である、画像処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置、および画像処理システムに関し、より詳細には、描画オブジェトを付加して描画処理を行うことができるプログラム、情報処理装置および画像処理システムに関する。
【背景技術】
【０００２】
従来から、文書画像にマークを重ねて印刷する、ウォータマーク（あるいはスタンプ）と呼ばれる機能を備えた印刷システムが知られている。上記ウォータマーク機能は、例えば、社外秘扱いの文書を印刷して配布する場合に用いられる。所定イメージを指定してウォータマーク機能を設定することにより、所定イメージを印刷する制御データが文書データに組み込まれ、例えば「社外秘」のスタンプが各ページに押印されたような印刷結果が得られる。
【０００３】
ＰｏｓｔＳｃｒｉｐｔドライバにおいては、上述したウォータマーク機能は、プリンタに対しウォータマークの印刷を指令するコマンドを送信することによって実現される。上記コマンドでは、ウォータマークのフォントおよび文字列が指定されており、プリンタは、このコマンドを受けて、指定の内蔵フォントを用いてラスタライズ処理を行う。これにより、デバイスフォントでのウォータマークを出力させることができる。
【０００４】
また、プリンタ側に内蔵されていないフォントについても、オペレーティング・システム（ＯＳ）機能として提供されるアウトライン・フォント・システム（ＴｒｕｅＴｙｐｅフォント）を用いて、ウォータマークを出力させることができる。この場合、ドライバは、指定された文字をＯＳに描画させて、そのラスタライズされたデータをプリンタに送信ことによって、ウォータマークを実現する。
【０００５】
上述したウォータマークは、典型的には、文書画像に透過的に印刷される。このようなウォータマークの透過的な印刷は、モノリシック・ドライバであれば、ラスタ・オペレーションによって実現できる。しかしながら、例えばＷｉｎｄｏｗｓ（登録商標）で提供されるＰｏｓｔＳｃｒｉｐｔ用の標準ミニ・ドライバは、ラスタ・オペレーションをサポートしていない。このため、この標準ミニ・ドライバをベースとしたプリンタドライバで上述したウォータマークの透過的な付加を行うためには、工夫が必要となる。なお、ラスタ・オペレーションとは、描画の際に、描画される色（ソース）と描画する色（ディスティネーション）とをピクセルレベルで比較し、比較結果に基づいて描画命令を実行する、ピクセル操作をいう。
【０００６】
ＰｏｓｔＳｃｒｉｐｔミニ・ドライバでウォータマークを透過させて出力する技術としては、特開２０１２−１１８９４１号公報（特許文献１）が知られている。上記特許文献１の従来技術では、独自のプリントプロセッサを構成し、ウォータマークの透過的な付加を実現している。上記特許文献１に開示されるプリントプロセッサは、ＥＭＦ（Enhanced Meta File）スプールにおいて、ＴｒｕｅＴｙｐｅフォントの文字列のアウトラインのパスを取得し、文字列のパスを塗りつぶすＰＳコマンドをパススルーデータとして生成し、ＧＤＩを介して、プリンタドライバに送信する。プリンタドライバは、文字列を塗りつぶす部分と、文字列を塗りつぶさず印刷データを透過させる部分とからなるマスクパターンのＰＳコマンドを生成し、プリンタに送信する。これにより、プリンタドライバで作成されたマスクパターンで、プリントプロセッサで取得したウォータマークのパスが、塗りつぶされ、透過的なウォータマークの印刷が実現される。
【０００７】
しかしながら、上記特許文献１の従来技術では、独自のプリンタプロセッサを必要とし、また、スプール形式もＥＭＦスプールに限定されてしまうという点で充分なものではなかった。すなわち、ＲＡＷスプール形式で印刷される場合は、プリントプロセッサが動作しないため、上記ウォータマークの透過的付与を実現することができなかった。また、印刷開始後にポップアップ画面を立ち上げて印刷設定を変更する技術が知られているが、上述したウォータマークの設定をポップアップ画面で行う場合、上記従来技術ではウォータマークを付加できないという不具合があった。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、上記従来技術における不充分な点に鑑みてなされたものであり、本発明は、独自のプリントプロセッサを必要とせず、スプール形式にかかわらず、描画オブジェクトを付加して描画処理することができるプログラム、情報処理装置および画像処理システムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
コンピュータを、設定情報を取得する設定取得手段、上記設定取得手段により取得された設定情報に基づいて描画オブジェクトのパスの情報を準備するパス準備手段、上記パス準備手段により準備されたパスの情報を、保存手段に所定インタフェースを介して設定するパス設定手段、描画オブジェクトの描画に際し、上記保存手段から所定インタフェースを介して描画オブジェクトのパスの情報を取得するパス取得手段、および、上記パス取得手段により取得されたパスの情報に基づき、所定パターンでパスを描画するよう指令するコマンドを送信するコマンド送信手段として機能させるためのプログラムを提供する。
【発明の効果】
【００１０】
上記構成により、独自のプリントプロセッサを必要とせず、スプール形式にかかわらず、描画オブジェクトを付加して描画処理することができる。
【図面の簡単な説明】
【００１１】
【図１】本実施形態によるプリントシステムの概略図。
【図２】本実施形態におけるホスト装置上で動作するソフトウェア・コンポーネントを示すブロック図。
【図３】本実施形態におけるプリンタドライバを構成するコンポーネントを示すブロック図。
【図４】第１の実施形態における、ＲＡＷスプール形式での描画オブジェクト付加印刷処理を、データの流れとともに説明する図。
【図５】第１の実施形態における、ＥＭＦスプール形式での描画オブジェクト付加印刷処理を、データの流れとともに説明する図。
【図６】（Ａ）ウォータマークのパス情報が含まれるＰｏｓｔＳｃｒｉｐｔコマンドのデータ構造、（Ｂ）塗りつぶしパターンのデータ構造、（Ｃ）塗りつぶしパターン・イメージおよび（Ｄ）塗りつぶしパターンを作成するＰＳコマンドを示す図。
【図７】第１の実施形態によるランゲージ・モニタが有する、プリントジョブに対応付けてパス情報を保存する機能を説明する図。
【図８】第１の実施形態による描画部が参照する、ウォータマークの透過率とマスクパターンとを対応付けるテーブルを模式的に示す図。
【図９】プリンタドライバのＵＩ部により提供される、ウォータマーク編集設定画面を示す図。
【図１０】（Ａ）原稿画像、（Ｂ）ウォータマークの画像、（Ｃ）原稿画像にウォータマークが透過的に付加された画像、（Ｄ）原稿画像の一部の背景にウォータマークが描画された画像を示す図。
【図１１】第１の実施形態における、ＲＡＷスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図（１／２）。
【図１２】第１の実施形態における、ＲＡＷスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図（２／２）
【図１３】第１の実施形態における、ＥＭＦスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図（１／４）。
【図１４】第１の実施形態における、ＥＭＦスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図（２／４）。
【図１５】第１の実施形態における、ＥＭＦスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図（３／４）。
【図１６】第１の実施形態における、ＥＭＦスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図（４／４）。
【図１７】第２の実施形態における、ＲＡＷスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図。
【図１８】第２の実施形態における、ＥＭＦスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図（１／２）。
【図１９】第２の実施形態における、ＥＭＦスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図（２／２）。
【図２０】本実施形態による汎用コンピュータ装置のハードウェア構成図。
【発明を実施するための形態】
【００１２】
以下、本実施形態について説明するが、本実施形態は、以下に説明する実施形態に限定されるものではない。なお、以下の説明では、プログラム、および情報処理装置として、プリンタドライバ、および該プリンタドライバを動作させるホスト装置を一例として説明する。
【００１３】
図１は、本実施形態によるプリントシステム１００の概略構成を示す図である。図１に示すようにプリントシステム１００は、ネットワーク１０２を介して相互に接続される、ホスト装置１１０と、画像形成装置１８０とを含む。ホスト装置１１０は、パーソナル・コンピュータ、ワークステーションなどの汎用コンピュータなどとして構成される。画像形成装置１８０は、レーザプリンタや複合機などのプリント機能を備える画像処理装置として構成される。ネットワーク１０２は、例示的には、ＴＣＰ／ＩＰプロトコルスタックによる有線や無線のＬＡＮ（Local Area Network）などとして構成される。
【００１４】
ホスト装置１１０は、本実施形態によるプリンタドライバを動作させており、画像形成装置１８０に対し、ネットワーク１０２を介して、印刷データとともに印刷要求を送信するホスト・コンピュータである。画像形成装置１８０は、ネットワーク１０２を介したホスト装置１１０からの印刷要求に応答して、受信した印刷データに従い、画像形成処理を実行する周辺機器である。
【００１５】
なお、図１に示すプリントシステム１００では、ホスト装置１１０および画像形成装置１８０は、ネットワーク１０２を介して直接接続されているが、これは一例であり、図１に示す実施形態に限定されるものではない。例えば、画像形成装置１８０に接続するプリントサーバをネットワーク１０２上に設け、ホスト装置１１０からプリントサーバを経由して画像形成装置１８０に印刷要求を行う実施形態としてもよい。また、ＬＡＮに代えて例えばＵＳＢなどのバスを介してホスト装置１１０および画像形成装置１８０を接続する実施形態としてもよい。
【００１６】
図２は、本実施形態におけるホスト装置１１０上で動作するソフトウェア・コンポーネントを示すブロック図である。図２には、ホスト装置１１０上のソフトウェア・コンポーネントとして、アプリケーション１１２と、プリンタドライバ１１４と、ＧＤＩ（Graphics Device Interface）１２０と、プリント・スプーラ１２２と、プリントプロセッサ１２４と、ランゲージ・モニタ１２６と、ポートモニタ１３２と、ポートドライバ１３４とが示されている。なお、説明する実施形態は、Ｗｉｎｄｏｗｓ（登録商標）のプリント・アーキテクチャに基づくものである。
【００１７】
アプリケーション１１２は、ワードプロセッサやスプレッドシート、プレゼンテーション、ドロー、フォトレタッチ、ブラウザ、文書ビューアなどの印刷機能を備えた各種アプリケーションである。アプリケーション１１２は、ユーザ操作に応答して、プリンタドライバ１１４が提供する印刷設定ユーザ・インタフェースを呼び出し、また、印刷設定に基づく印刷命令をプリンタドライバ１１４に発行する。
【００１８】
プリンタドライバ１１４は、本実施形態によるプログラムが提供する画像処理ドライバであり、ホスト装置１１０にインストールされている。プリンタドライバ１１４は、アプリケーション１１２からの印刷命令に応答して、印刷データを生成し、画像形成装置１８０に印刷要求と共に印刷データを送信する。プリンタドライバ１１４は、より具体的には、印刷設定用ＧＵＩ（Graphical User Interface）を提供するＵＩ部１１６と、描画部１１８とを含み構成される。描画部１１８は、ＧＤＩ１２０を支援しながら印刷データの描画を行い、描画データにプリンタ用のコマンドを付与してプリント・スプーラ１２２へ渡すグラフィック・ドライバである。
【００１９】
本実施形態によるプリンタドライバ１１４は、印刷設定に基づいて、アプリケーション１１２により作成された画像に対し所定の描画オブジェクトを付加する、描画オブジェクト付加印刷機能を実現する。なお、以下に説明する実施形態では、基本ソフトウェア（ＯＳ：Operating System）が提供するアウトライン・フォント・システム（例えばＴｒｕｅＴｙｐｅフォント）から取得される所定文字列のウォータマークが描画オブジェクトとして付加されるものとする。しかしながら、描画オブジェクトは、これに限定されるものではなく、任意の文字、図形および記号これらの組み合わせを用いることができる。
【００２０】
ＧＤＩ１２０は、ＯＳにより提供されるＷｉｎｄｏｗｓ（登録商標）のサブシステムであり、描画オブジェクトの表示や、画像形成装置などの出力装置へのデータ転送を制御する。プリント・スプーラ１２２も、ＯＳにより提供され、印刷処理にかかるデータを一時的に保存し、処理状況に応じて印刷処理の実行を管理する。プリントプロセッサ１２４は、プリントジョブのスプールされたデータを、プリンタドライバ１１４の描画部１１８を利用して、送信すべきフォーマットへ変換する。プリントプロセッサ１２４は、上記ＯＳによって標準のものが提供されるが、ベンダで独自に開発されたカスタム・プリント・プロセッサが用いられてもよい。
【００２１】
ランゲージ・モニタ１２６は、プリント・モニタの一種であり、プリント・スプーラ１２２から受信したデータを、ポートモニタ１３２へ送信する。ポートモニタ１３２もプリント・モニタの一種であり、ランゲージ・モニタ１２６からデータを受信し、通信プロトコルに基づく処理を行い、ポートドライバ１３４に印刷データを送信する。ポートドライバ１３４は、入出力ポートへアクセスし、画像形成装置１８０とホスト装置１１０との接続インタフェース（ＵＳＢやネットワーク・インタフェース・カード）を制御して、画像形成装置１８０に印刷データを送信する。ランゲージ・モニタ１２６およびポートモニタ１３２は、上記ＯＳにより標準のものが提供されているが、ベンダで独自に開発されたものが用いられてもよい。
【００２２】
説明する実施形態において、ランゲージ・モニタ１２６は、データ保存部１２８と、通信部１３０とを含み構成される。通信部１３０は、通常のランゲージ・モニタとしてのデータ送受信制御を実現する機能部である。これに対して、データ保存部１２８は、本実施形態において、プリンタドライバ１１４のＵＩ部１１６と描画部１１８との間で、所定のデータを受け渡しするためデータを一時保持する保存手段である。
【００２３】
図３は、本実施形態におけるプリンタドライバ１１４を構成するコンポーネントを示すブロック図である。図３に示すプリンタドライバ１１４は、例えばＰｏｓｔＳｃｒｉｐｔ用の標準ミニ・ドライバをベースとして構成されている。プリンタドライバ１１４は、ミニ・ドライバ（テキストファイル）１４８と、バイナリ・データ・ファイル１５０と、ＣＰＳＵＩ（Common Property Sheet User Interface）ＤＬＬ（Dynamic Link Library）１５２と、プリンタ・インタフェース（Printer Interface）ＤＬＬ１４０と、プリンタ・グラフィックス（Printer Graphics）ＤＬＬ１５４とを含み構成される。
【００２４】
ミニ・ドライバ１４８は、ＰｏｓｔＳｃｒｉｐｔの場合は、ＰｏｓｔＳｃｒｉｐｔプリンタで利用可能なすべての機能を記述するＰＰＤ（PostScript Printer Description）ファイルとして提供される、テキストベースのミニ・ドライバである。バイナリ・データ・ファイル１５０は、プリンタ・インタフェースＤＬＬ１４０のパーサ（ＰＰＤパーサ）１４２によりミニ・ドライバ（テキストファイル）１４８に含まれる情報を解析した後に生成される一時ファイルである。ＣＰＳＵＩ  ＤＬＬ１５２は、プリンタやドキュメントのプロパティシートを取り扱うユーザ・インタフェースを提供する。
【００２５】
プリンタ・インタフェースＤＬＬ１４０は、上記パーサ１４２と、すべてのＰｏｓｔＳｃｒｉｐｔをサポートするプリンタに対する共通ユーザ・インタフェース・コード（Common UI code）１４４とを提供する。プリンタドライバ１１４は、適宜、ユーザ・インタフェース・プラグイン１４６を備えてもよい。ユーザ・インタフェース・プラグイン１４６は、任意で提供されるものであり、プリンタ・インタフェースＤＬＬ１４０と組み合わせられて、プリンタ固有のユーザ・インタフェースを提供することができる。
【００２６】
プリンタ・グラフィックスＤＬＬ１５４は、ＰｏｓｔＳｃｒｉｐｔレンダラであり、テキストの出力およびイメージのレンダリングを処理し、プリント・スプーラ１２２にテキストおよびイメージ・データを送信する。プリンタドライバ１１４は、さらに、レンダリング・プラグイン１５６を備えることができる。レンダリング・プラグイン１５６は、プリンタ・グラフィックスＤＬＬ１５４に対し追加的に提供されるものであり、プリンタ・グラフィックスＤＬＬ１５４と組み合わせられて、追加レンダリング機能を提供する。なお、説明する実施形態では、レンダリング・プラグイン１５６は、後述する描画オブジェクト付加印刷機能の処理の一端を担う。
【００２７】
なお、図３において点線の矩形１１６で囲まれたコンポーネントが、ＵＩ部１１６を構成し、点線の矩形１１８で囲まれたコンポーネントが、描画部１１８を構成する。プリンタドライバ１１４は、典型的には、ＯＳにより提供されるソフトウェア・コンポーネントと、プリンタドライバのインストーラなどにより外部から提供される固有のコンポーネント（１４８，１４６，１５６）とから構成される。
【００２８】
（第１の実施形態）
以下、図４〜図１０を参照しながら、第１の実施形態による描画オブジェクト付加印刷機能を実現する印刷処理の流れについて説明する。図４および図５は、それぞれ、ＲＡＷスプール形式およびＥＭＦスプール形式での描画オブジェクト付加印刷処理をデータの流れとともに説明する図である。以下、描画オブジェクト付加印刷処理について、まず、図４を参照しながら、ＲＡＷスプール形式の場合を参照して説明する。ＲＡＷスプール形式においては、アプリケーション１１２、ＯＳが提供するＧＤＩ１２０およびプリント・スプーラ１２２、並びにプリンタドライバ１１４のＵＩ部１１６および描画部１１８が処理に関与している。
【００２９】
まず、ユーザは、（１）プリンタドライバ１１４のＵＩ部１１６が提供する印刷設定用ＧＵＩを介して印刷設定を行い、（２）アプリケーション１１２に対し印刷指示を行う。この印刷指示に応答して、（３）アプリケーション１１２は、ＵＩ部１１６との間で、印刷設定を保持するＤＥＶＭＯＤＥ構造体をやり取りし、ユーザが行った印刷設定情報を取得する。（４）アプリケーション１１２は、さらに、ＧＤＩ１２０に対し、印刷命令をＧＤＩコールとして伝達する。（５）ＧＤＩ１２０は、プリンタドライバ１１４の描画部１１８に対し、ＧＤＩコールをＤＤＩ関数として伝達する。（６）描画部１１８は、プリンタ言語に変換されたＲＡＷデータとして、印刷データをプリント・スプーラ１２２に送信する。
【００３０】
描画部１１８からプリント・スプーラ１２２へ送信されたＲＡＷデータは、プリント・スプーラ１２２から、ランゲージ・モニタ１２６、ポートモニタ１３２およびポートドライバ１３４を介して、画像形成装置１８０へ送信され、印刷されることになる。
【００３１】
上述した印刷処理の流れにおいて、上記（４）でのアプリケーション１１２からのジョブ開始に際した所定ＧＤＩコールに応答して、ＧＤＩ１２０により、印刷ジョブに関するイベントを処理するためのＵＩ部１１６の所定ＤＤＩ関数のコールが行われる。具体的には、Ｗｉｎｄｏｗｓ（登録商標）におけるDrvDocumentEvent関数がコールされる。DrvDocumentEvent関数は、印刷中、描画部１１８に対するＤＤＩ関数の合間合間にコールされて単独の処理を行う、ＵＩ部１１６に対するＤＤＩ関数である。このため、前後のDrvDocumentEvent関数の間でデータの共有はできない。しかしながら、ＵＩ部１１６に対するＤＤＩ関数であるので、ＧＤＩコールを行うことが可能である。また、DrvDocumentEvent関数は、引数にデバイスコンテキストを有しているため、ＤＤＩ関数の中で、デバイスコンテキストを引数にＡＰＩ（Application Programing Interface）をコールすることにより、描画部１１８に対して命令を伝達することができる。
【００３２】
本実施形態によるプリンタドライバ１１４のＵＩ部１１６は、上記所定ＤＤＩ関数のコールに応答して、所定エスケープコマンド（具体的には、Ｗｉｎｄｏｗｓ（登録商標）におけるExtEscape関数を用いることができる。）にて、プリンタドライバ１１４の描画部１１８から印刷設定情報を取得する（設定取得関数）。ユーザが設定した印刷設定情報は、ＤＥＶＭＯＤＥとしてアプリケーション１１２からＧＤＩ１２０を介して描画部１１８に渡される。ＵＩ部１１６は、取得したデバイスコンテキストに対してExtEscape関数をコールすることにより、ＯＳを介して、描画部１１８から印刷設定情報を取得している。ExtEscape関数のコールに応答してDrvEscape関数が描画部１１８に通知されるため、描画部１１８は、自身が保持している印刷設定情報を返す。上述した構成によれば、ＵＩ部１１６がＯＳのＡＰＩをコールするだけで、描画部１１８からデータが取得されるので、上記構成は、独自のＡＰＩを提供する必要がない点で有利である。
【００３３】
ＵＩ部１１６は、さらに、取得された印刷設定情報内に所定文字列のウォータマークの付加が指定される場合は、アウトライン・フォント・システムを用いて所定文字列のウォータマークを生成し、ＧＤＩ１２０を介して、そのパスの情報を準備する（パス準備関数）。
【００３４】
図６（Ａ）は、第１の実施形態によるＵＩ部１１６が生成する、ウォータマークのパス情報を含んだＰｏｓｔＳｃｒｉｐｔコマンドのデータ構造を例示する図である。図６（Ａ）に例示するコマンドは、ウォータマークの文字「Ａ」のパスの情報を含んでいる。ＵＩ部１１６は、アウトライン・フォントのパスを生成し、所定関数（具体的には、Ｗｉｎｄｏｗｓ（登録商標）におけるGetPath関数）を用いてＯＳからパス情報を取得し、これに基づいて、このパスを塗りつぶすという所定プリンタ言語のコマンド（以下、ＰｏｓｔＳｃｒｉｐのコマンドをＰＳコマンドと参照する。）を生成する。図６（Ａ）に示すＰＳコマンドでは、SetPatternからClosePathで特定されたパスを塗りつぶす（fill）コマンドが指定されている。
【００３５】
そして、ＵＩ部１１６は、準備されたウォータマークのパス情報をランゲージ・モニタ１２６に所定インタフェースを介して設定する（パス設定関数）。説明する実施形態では、パス情報は、図６（Ａ）に示すような、ウォータマークのパス情報が含まれるＰＳコマンドの形でランゲージ・モニタ１２６に渡される。
【００３６】
ランゲージ・モニタに対しては、ＯＳにより、所定のインタフェースが定められており、ベンダ独自のランゲージ・モニタでも、ＯＳで定められたインタフェースに適合させて開発される。本実施形態によるランゲージ・モニタ１２６は、所定のインタフェース（具体的には、Ｗｉｎｄｏｗｓ（登録商標）におけるSendRecvBidiDataFromPort関数）を介して、呼び出し元のコンポーネントとのデータのやり取りを行うことができるよう構成されている。
【００３７】
図７は、第１の実施形態によるランゲージ・モニタ１２６が有する、プリントジョブに対応付けてパス情報を保存する機能を説明する図である。本実施形態によるランゲージ・モニタ１２６は、呼び出し元からキーを伴う設定要求（ｓｅｔ）を受け取り、このキーに対応付けてパス情報２００などのデータをデータ保存部１２８に保存することができる。ランゲージ・モニタ１２６は、呼び出し元からキーを伴う取得要求（ｇｅｔ）を受け取り、このキーに対応付けてデータ保存部１２８に保存されたデータ２００を読み出し、呼び出し元に返すことができる。
【００３８】
上記キーとしては、特に限定されるものではないが、好適にはジョブ識別子（ＩＤ）を用いることができる。ジョブ識別子は、ＯＳ１３６によって、プリントジョブに対し印刷開始から印刷終了まで一意性のあるＩＤとしてセットされるためである。ランゲージ・モニタ１２６は、データ保存部１２８に、図７に示すような、キーとデータ（パス情報）との組み合わせを保持するテーブル２１０を格納する。これにより、複数のアプリケーション１１２Ａ，１１２Ｂから前後して（図７の例では、アプリケーション１１２Ａ、アプリケーション１１２Ｂ、アプリケーション１１２Ａの順で行われている。）印刷指示が行われたとしても、各プリントジョブに、適切にパス情報を対応付けて処理することができる。
【００３９】
再び図４を参照すると、上述した印刷処理の流れにおいて、上記（４）でのアプリケーション１１２からのページ終了に際した所定ＧＤＩコール（より具体的にはEndPage関数）に応答して、ＧＤＩ１２０により、描画部１１８のＤＤＩ関数のコールが行われる。本実施形態による描画部１１８は、上記ＤＤＩ関数のコールに応答して、所定インタフェースを介してランゲージ・モニタ１２６からパス情報を取得する（パス取得関数）。
【００４０】
ここで描画部１１８が取得するパス情報は、ＵＩ部１１６側でプリントジョブについて事前に準備されたウォータマークのパス情報であり、描画部１１８に渡されるジョブ識別子をキーとして取得される。すなわち、ＵＩ部１１６および描画部１１８は、アプリケーション１１２からのジョブ開始の指令に際してＯＳ１３６により与えられるジョブ識別子をキーとして、ランゲージ・モニタ１２６との間で、各ジョブについての描画オブジェクトのパスの情報の設定および取得を行っている。
【００４１】
描画部１１８は、さらに、所定の塗りつぶしパターンを準備する。図６（Ｂ）〜（Ｄ）は、（Ｂ）塗りつぶしパターンのデータ構造、（Ｃ）塗りつぶしパターン・イメージおよび（Ｄ）塗りつぶしパターンを作成するＰＳコマンドを示す。塗りつぶしパターンは、図６（Ｂ）および（Ｃ）に示すように、文字列のパスを塗りつぶす部分（図６（Ｂ）で「１」が設定され、図６（Ｃ）で黒である部分）と、文字列のパスを塗りつぶさずに印刷データを透過させる部分（図６（Ｂ）で「０」が設定され、図６（Ｃ）で白である部分）とからなるマスクパターンである。図６（Ｄ）に示すＰＳコマンドは、特に限定されるものではないが、８×８の領域において、黒で塗りつぶす領域と、透過させる領域とが、１行２列の単位で市松模様を形成するように、マスクパターンを規定している。
【００４２】
描画部１１８は、典型的には、印刷設定情報内に規定されたウォータマークの透過率の指定値に応じた塗りつぶしパターンを準備することができる。図８は、第１の実施形態による描画部１１８が参照する、ウォータマークの透過率と、マスクパターンとを対応付けるテーブルを模式的に示す図である。透過率の指定値に対応付けて、予め複数の塗りつぶしパターンが準備されており、描画部１１８は、テーブルの中から、印刷設定情報内の指定値に対応するものを選択して、必要なマスクパターンを準備することができる。
【００４３】
図８に模式的に示すように、透過率が１００％の場合は、典型的には、塗りつぶしは行われず、パスのみが出力される。一方、透過率が０％の場合は、パスの囲まれた領域がすべて指定色で塗りつぶされて出力される。また、透過率が０〜１００％の間の中間値（図８には５０％が示されている。）の場合は、パスの囲まれた領域が指定色で、塗りつぶす部分と透過させる部分とが混在するマスクパターンにより部分的に塗りつぶされて出力される。
【００４４】
図９は、上記（１）でプリンタドライバ１１４のＵＩ部１１６により提供される、ウォータマークを編集するための設定用ＧＵＩ画面を示す図である。ウォータマーク編集画面３００は、ウォータマークのプロファイルを選択するプルダウン・メニュー３０２と、選択されたウォータマークのプレビュー表示を行うプレビュー領域３０４と、ウォータマークのプロファイルを削除するボタン３０６と、選択されたウォータマークのプロファイルの編集を行う編集領域３１０と、ウォータマークを配置決めするための配置決め領域３４０と、設定内容を反映させるボタン３５０と、設定内容を破棄するためのボタン３５２とを含む。
【００４５】
編集領域３１０は、選択されたウォータマークのプロファイルの名称が入力されるテキストボックス３１２と、ウォータマークの文字列が入力されるテキストボックス３１４と、文字列のフォントを選択するためのプルダウン・メニュー３１６と、文字列のフォントスタイルを選択するためのプルダウン・メニュー３１８と、文字列の指定色を選択するためのプルダウン・メニュー３２０と、文字列の文字修飾を選択するためのプルダウン・メニュー３２２とを含む。編集領域３１０は、さらに、文字列のサイズを指定するためのスピンボタン３２４、文字列の角度を指定するためのスピンボタン３２６、文字列の透過率（図中では濃度と示されている。）を指定するためのスピンボタン３２８と、プレビュー領域３０４を更新するためのボタン３３０と、編集中の内容でウォータマークのプロファイルを追加するためのボタン３３２とを含む。
【００４６】
配置決め領域３４０は、水平方向の位置を指定するためのスピンボタン３４２、垂直方向の位置を指定するためのスピンボタン３４４と、位置を中央に設定するためのボタン３４６とを含む。図９に示したウォータマーク編集画面３００において、プルダウン・メニュー３０２でウォータマークが選択されて、ボタン３５０が押下されると、所定のウォータマークの印刷が印刷設定に指定される。
【００４７】
再び図４を参照すると、描画部１１８は、上記準備された塗りつぶしパターンで、上記取得されたパスの塗りつぶしを指令するＰＳコマンドを生成する。このＰＳコマンドは、描画部１１８で準備された塗りつぶしパターンを規定する第１のコマンドと、パスをセットし、パスを描画（塗りつぶす）よう指令する第２のコマンドとを含む。描画部１１８は、所定プリンタ言語（ＰｏｓｔＳｃｒｉｐｔ）に変換されたＲＡＷデータとして、上記ＰＳコマンドをプリント・スプーラ１２２に送信する。
【００４８】
上記構成により、アプリケーション１１２で生成された原稿画像（図１０（Ａ））の上に、ＵＩ部１１６で準備されたパスが、描画部１１８で準備された塗りつぶしパターンで塗りつぶされたウォータマーク（図１０（Ｂ））が描画される。ひいては、図１０（Ｃ）に示すような透過的なウォータマークの印刷が実現される。なお、説明する実施形態では、上述したパス情報を取得し、ＰＳコマンドを生成して送信する機能は、レンダリング・プラグイン１５６により提供される。
【００４９】
以下、描画オブジェクト付加印刷処理について、図５を参照しながら、ＥＭＦスプール形式の場合について説明する。ＲＡＷスプールの場合と類似した処理の流れとなるが、ＥＭＦスプール形式においては、アプリケーション１１２、ＧＤＩ１２０、プリント・スプーラ１２２、ＵＩ部１１６および描画部１１８に加えて、プリントプロセッサ１２４が処理に関与する。
【００５０】
まず、ＲＡＷスプール形式の場合と同様に、ユーザは、（１）プリンタドライバ１１４のＵＩ部１１６が提供する印刷設定用ＧＵＩを介して印刷設定を行い、（２）アプリケーション１１２に対し印刷指示を行う。この印刷指示に応答して、（３）アプリケーション１１２は、プリンタドライバ１１４のＵＩ部１１６との間で、ＤＥＶＭＯＤＥ構造体をやり取りすることによって、ユーザが行った印刷設定情報を取得する。
【００５１】
（４）アプリケーション１１２は、さらに、ＧＤＩ１２０に対し、印刷命令をＧＤＩコールとして伝達する。（５）ＧＤＩ１２０は、ＥＭＦスプール形式においては、プリント・スプーラ１２２に対し、ＥＭＦデータをスプールデータとして渡す。アプリケーション１１２の印刷データが一通りスプールされると、（６）プリント・スプーラ１２２は、プリントプロセッサ１２４に対しデスプールを伝達し、スプールデータを渡す。（７）プリントプロセッサ１２４は、スプールデータをページごとに編集し、これにより、集約、逆順および製本の機能を実現し、編集した内容をＧＤＩ１２０にＧＤＩコールとして伝達する。（８）ＧＤＩ１２０は、プリンタドライバ１１４の描画部１１８に対し、ＧＤＩコールをＤＤＩ関数として伝達する。（９）プリンタドライバの描画部１１８は、プリンタ言語に変換されたＲＡＷデータとして、印刷データをプリント・スプーラ１２２に送信する。
【００５２】
描画部１１８からのＲＡＷデータは、ＲＡＷスプール形式の場合と同様に、プリント・スプーラ１２２により、ランゲージ・モニタ１２６、ポートモニタ１３２およびポートドライバ１３４を介して、画像形成装置１８０へ送信されることになる。ＥＭＦスプール形式では、一旦、ＥＭＦデータがスプールされ、プリントプロセッサ１２４により再印刷がかけられるが、概ね同様な処理となる。
【００５３】
ＥＭＦスプール形式の場合も、上述した処理の流れにおいて、ＧＤＩ１２０は、上記（４）でのアプリケーション１１２からのジョブ開始に際した所定ＧＤＩコールに応答して、所定ＤＤＩ関数のコールを行う。本実施形態によるプリンタドライバ１１４のＵＩ部１１６は、この所定ＤＤＩ関数のコールに応答して、設定取得関数、パス準備関数およびパス設定関数を呼び出し、印刷設定情報に応じたウォータマークのパス情報をランゲージ・モニタ１２６に設定する。
【００５４】
一方、描画部１１８は、上記（７）でのプリントプロセッサ１２４からのページ終了に際した所定ＧＤＩコール（より具体的にはGdiEndPageEMF関数）に応答して、ランゲージ・モニタ１２６からパス情報を取得する（パス取得関数）。描画部１１８は、同時に、所定の塗りつぶしパターンでパスを塗りつぶすＰＳコマンドを生成し、ＲＡＷデータとして、上記ＰＳコマンドをプリント・スプーラ１２２に送信する。これにより、ＥＭＦスプール形式でも、図１０（Ｃ）に示すような透過的なウォータマークの印刷が実現される。
【００５５】
以下、図１１および図１２、並びに図１３〜図１６を参照しながら、第１の実施形態による各スプール形式での描画オブジェクト付加印刷機能を実現する印刷処理における、各機能部間の相互作用および処理の流れについて、より詳細に説明する。なお、各機能部間の相互作用は、図１１および図１２、並びに図１３〜図１６に示す通りであるが、以下、本実施形態による画オブジェクト付加印刷機能に関連する主要な箇所について説明する。
【００５６】
図１１および図１２は、ＲＡＷスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図である。図１１および図１２に示す処理では、ステップＳ１では、アプリケーション（図中ＡＰで表される。）１１２は、CreateDC関数をコールし、プリンタのデバイスコンテキストを作成する。CreateDC関数の引数で指定されたＤＥＶＭＯＤＥ構造体（印刷設定情報）へのポインタが、ステップＳ１．３のDrvEnablePDEV関数の引数として描画部（図中ＧＲで表される。）１１８に伝達される。これにより、プリンタドライバ１１４の描画部１１８は、ステップＳ１．３のDrvEnablePDEV関数からＳ７．２のDrvDisablePDEV関数までの間にコールされる描画部１１８のＤＤＩ関数において、印刷設定情報が参照可能となる。
【００５７】
ステップＳ２では、アプリケーション１１２は、StartDoc関数をコールし、プリントジョブを開始する。プリンタドライバ１１４の描画部１１８は、ステップＳ２．３のDrvStartDoc関数で、ＯＳによって当該プリントジョブに付されたジョブ識別子を受け取ることができる。これにより、以降の描画部１１８のＤＤＩ関数において、ジョブ識別子が参照可能となる。これに対して、プリンタドライバ１１４のＵＩ部１１６は、ステップＳ２．４のDrvDocumentEvent関数（iESC=DOCUMENTEVENT_STARTDOCPOST）でのみ、ジョブ識別子を受け取ることができる。ＧＤＩ１２０は、この関数の引数にジョブ識別子を設定するからである。そこで、本実施形態によるＵＩ部１１６は、このタイミングで、設定取得関数、パス準備関数およびパス設定関数を呼び出す。
【００５８】
より具体的には、ステップＳ２．４．１で、デバイスコンテキストを引数としてExtEscape関数をコールし、描画部１１８が保持する印刷設定情報を要求する。取得された印刷設定情報において、ウォータマークの付加が指定されていれば、ＵＩ部１１６は、ステップＳ２．４．２で、ウォータマークを生成し、ステップＳ２．４．２．１でGetPath関数を用いて、ウォータマークの文字列のパス情報をＯＳから受け取る。ステップＳ２．４．３では、ＵＩ部１１６は、上記ステップＳ２．４で取得されたジョブ識別子をキーとして、SendRecvBidiDataFromPort関数をコールして、上記ステップＳ２．４．２．１で準備されたパス情報をランゲージ・モニタ１２６に設定（ｓｅｔ）する。
【００５９】
以降、ステップＳ３では、アプリケーション１１２は、StartPage関数をコールし、プリンタドライバ１１４に対し新しいページのデータを受け入れるよう指示する。ステップＳ４では、アプリケーション１１２は、所定の描画関数をコールし、プリンタドライバ１１４に描画データを渡す。
【００６０】
ステップＳ５では、アプリケーション１１２は、EndPage関数をコールし、ページ分の書き込みが終了したことを通知し、新しいページに進むように指示する。ページの書き込みが終了し、ページのデータを送信できるようになったことに応答して、ステップＳ５．２では、ＧＤＩ１２０により描画部１１８のDrvSendPage関数がコールされる。描画部１１８は、プリントジョブのデータ・ストリーム中のSHOWPAGEコマンド（１ページ毎の記述の後に呼び出されるコマンドである。）前のタイミングで、ステップＳ５．２．１で示すように、IPrintOemPS::Commandメソッドをコールする。
【００６１】
IPrintOemPS::Commandメソッドは、プリントジョブのデータ・ストリーム中にＰＳコマンドを挿入するためのものである。このとき、IPrintOemPS::Commandメソッドの第２引数（インデックス）がPSINJECT_SHOWPAGEである場合、レンダリング・プラグイン（図中Ｐｌｕｇｉｎで示されている。）１５６は、ステップＳ５．２．１．１で、保持するジョブ識別子をキーとして、SendRecvBidiDataFromPort関数をコールして、ランゲージ・モニタ１２６からウォータマークのパス情報を含むＰＳコマンドを取得する（ｇｅｔ）。
【００６２】
ステップＳ５．２．１．２では、描画部１１８は、こうして取得したパスを所定塗りつぶしパターンで塗りつぶすよう指令するＰＳコマンドをプリンタに向けて送信する。なおジョブ識別子をキーに関連付けて保存されていた情報は、このタイミングで不要となるので、ランゲージ・モニタ１２６にジョブ識別子をキーとしてデータ破棄要求を送信し、情報を破棄させてもよい。
【００６３】
ウォータマークを付加する場合、アプリケーション１１２で生成した原稿画像の背面にウォータマークが印刷されてしまい、図１０（Ｄ）のような印刷結果が生じてしまう場合がある。この事象は、ウォータマークの描画オブジェクトを印刷した後に、アプリケーション１１２で生成したオブジェクトが描画されてしまうことに起因して発生する。説明する実施形態では、ポストスクリプトのコマンドのＩＤが「PSINJECT_SHOWPAGE」のタイミングを、各ページでのウォータマークの描画のタイミングとし、ウォータマークのＰＳコマンドを出力している。これにより、図１０（Ｃ）で示すような、当該ページに対するウォータマークの透過的な付加印刷を行うことができる。
【００６４】
以降は、通常の印刷シーケンスと同様であり、アプリケーション１１２は、ステップＳ６で、EndDoc関数をコールし、印刷ジョブを終了させ、ステップＳ７で、DeleteDC関数をコールし、ステップＳ１で生成されたデバイスコンテキストを削除する。以上が、ＲＡＷスプール形式での印刷処理のシーケンスである。
【００６５】
図１３〜図１６は、ＥＭＦスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図である。なお、図中の白色の機能部は、アプリケーションのプロセスで動作するものであり、図中の灰色で示す機能部は、スプーラのプロセスで動作するものである。ステップＳ１〜Ｓ６で示す主にアプリケーション１１２のプロセス間で行われるメッセージのやり取りが、ＥＭＦデータへの変換処理となる。ＥＭＦスプール形式では、その後、スプーラ・プロセスにおいて、ステップＳ８で再度印刷処理がかかり、これ以降で、ＥＭＦデータからＲＡＷデータへの変換処理が行われる。ステップＳ８以降の主にスプーラ・プロセス間のメッセージのやり取りが、ＲＡＷデータへの変換処理に対応する。
【００６６】
ステップＳ１では、アプリケーション１１２は、CreateDC関数をコールする。ステップＳ１．３のアプリケーション・プロセスにおけるDrvEnablePDEV関数で、アプリケーション１１２で決定されたＤＥＶＭＯＤＥ構造体（印刷設定情報）へのポインタが描画部１１８に伝達される。これにより、プリンタドライバ１１４の描画部１１８は、描画部１１８のＤＤＩ関数において、印刷設定情報が参照可能となる。
【００６７】
ステップＳ２では、アプリケーション１１２は、StartDoc関数をコールし、プリントジョブを開始する。ＵＩ部１１６は、ステップＳ２．２のDrvDocumentEvent関数（iESC=DOCUMENTEVENT_STARTDOCPOST）でのみ、ジョブ識別子を受け取ることができる。本実施形態によるＵＩ部１１６は、ここで、ステップＳ２．２．１で、デバイスコンテキストを引数としてExtEscape関数をコールし、描画部１１８が保持している印刷設定情報を要求する。ステップＳ２．２．１．１では、描画部１１８にDrvEscape関数が通知されるので、描画部１１８は、保持している印刷設定を返却する。
【００６８】
取得された印刷設定情報において、ウォータマークの付加が指定されていれば、ＵＩ部１１６は、ステップＳ２．２．２で、指定のウォータマークを生成する。ステップＳ２．２．２．１では、ＵＩ部１１６は、GetPath関数を用いて、指定されたウォータマークのパス情報をＯＳから受け取る。ステップＳ２．２．３では、ＵＩ部１１６は、ステップＳ２．２で取得されたジョブ識別子をキーとして、SendRecvBidiDataFromPort関数をコールし、ステップＳ２．２．２．１で準備されたパス情報をランゲージ・モニタ１２６に設定する。
【００６９】
アプリケーション・プロセスでの処理が終了した後は、スプーラ・プロセスでの再印刷処理となる。アプリケーション・プロセスにおけるEndDoc関数以降、ステップＳ７では、プリント・スプーラ１２２は、OpenPrintProcessor関数をコールし、プリントプロセッサ（図中ＰＰで示されている。）１２４を準備する。ステップＳ８では、プリント・スプーラ１２２は、PrintDocumentOnPrintProcessor関数をコールし、プリントプロセッサ１２４によるＲＡＷデータへの変換処理を開始させる。
【００７０】
ステップＳ８．１で、プリントプロセッサ１２４により、GetJobAttributes関数が呼び出されると、DrvQueryJobAttributes関数がコールされる。ステップＳ８．２では、プリントプロセッサ１２４は、GdiGetSpoolFileHandle関数で、スプールファイルのハンドルを取得し、ステップＳ８．３では、GdiGetDC関数で、プリンタのデバイスコンテキストを取得する。ステップＳ８．４では、GdiStartDocEMF関数で、ＥＭＦ形式のプリントジョブのための初期化を行う。ステップＳ８．４．２のDrvStartDoc関数では、プリンタドライバ１１４の描画部１１８は、ジョブ識別子を受け取ることができる。これによって描画部１１８のＤＤＩ関数において、ジョブ識別子が参照可能となる。ステップＳ８．５では、プリントプロセッサ１２４は、GdiStartPageEMF関数で、ＥＭＦ形式のプリントジョブのページの初期化を行い、ステップＳ８．６では、プリントプロセッサ１２４は、GdiPlayPageEMF関数をコールする。
【００７１】
ステップＳ８．７では、プリントプロセッサ１２４は、GdiEndPageEMF関数をコールし、ＥＭＦ形式のプリントジョブのページについてのＥＭＦの再生を終了させる。ページの書き込みが終了し、ページをプリンタに送信できるようになったことに応答して、ステップＳ８．７．５で、ＧＤＩ１２０により描画部１１８のDrvSendPage関数がコールされる。描画部１１８は、ステップＳ８．７．５．１で示すCommand()で第２引数がPSINJECT_SHOWPAGEの場合、レンダリング・プラグイン１５６により、ステップＳ８．７．５．１．１で、SendRecvBidiDataFromPort関数をコールし、ランゲージ・モニタ１２６からウォータマークのパス情報を含むＰＳコマンドを取得する。ステップＳ８．７．５．１．２では、こうして取得したパスを所定塗りつぶしパターンで塗りつぶすよう指令するコマンドを出力する。これにより、ウォータマークの透過的な付加が実現される。
【００７２】
以降は、通常の印刷シーケンスと同様であり、アプリケーション１１２は、ステップＳ９で、DeleteDC関数をコールする。スプーラ・プロセスにおいても、ステップＳ８．８で、プリントプロセッサ１２４は、GdiEndDocEMF関数をコールし、ステップＳ８．９で、GdiDeleteSpoolFileHandle関数をコールし、スプールファイルのハンドルを解放する。プリント・スプーラ１２２は、ステップＳ１１で、ControlPrintProcessor関数をコールしてプリントジョブを制御しつつ、ステップＳ１２で、ClosePrintProcessor関数をコールし、プリントジョブの印刷を完了させる。以上が、ＥＭＦスプール形式での印刷処理のシーケンスである。
【００７３】
図１１および図１２で示したＲＡＷスプール形式の印刷処理シーケンスと、図１３〜図１６で示したＥＭＦスプール形式の印刷処理シーケンスとは異なってはいる。しかしながら、プリンタドライバ１１４のＵＩ部１１６のDrvDocumentEvent関数（iESC=DOCUMENTEVENT_STARTDOCPOST）、ランゲージ・モニタ１２６のSendRecvBidiDataFromPort関数（set）、SendRecvBidiDataFromPort関数（get）、プリンタドライバ１１４の描画部１１８のDrvEnablePDEV関数、DrvStartDoc関数、DrvSendPage関数、DrvEscape()関数の各関数内で行っている処理は、ＲＡＷスプール形式でもＥＭＦスプール形式でも同一である。よって、本実施形態によるプリンタドライバ１１４は、スプール形式によらず、描画オブジェクト付加印刷処理を実現可能である。
【００７４】
上記構成によれば、プリンタドライバ１１４のＵＩ部１１６は、ＯＳからジョブ識別子を受け取る機能（DrvDocumentEvent関数（iESC=DOCUMENTEVENT_STARTDOCPOST））と、ＯＳを介してプリンタドライバ１１４の描画部１１８からデータを取得する機能（設定取得関数）と、印刷開始後に、ＧＤＩコールによりパス情報を準備し、上記パス情報からウォータマークのＰＳコマンドを生成する機能（パス準備関数）とを備える。ランゲージ・モニタ１２６は、キーを指定したデータ設定要求（SendRecvBidiDataFromPort関数（set））に対し、キーとデータの組み合わせを保持する機能と、キーに対応したデータ取得要求（SendRecvBidiDataFromPort関数（get））に対しデータを返却する機能とを備える。プリンタドライバ１１４の描画部１１８は、ジョブ識別子を受け取る機能（DrvStartDoc関数）と、ジョブ識別子をキーとしてパス情報をランゲージ・モニタ１２６から取得し、塗りつぶしパターンのＰＳコマンドを生成してプリンタに送信する機能（IPrintOemPS::Command methodメソッド）とを備える。
【００７５】
プリンタドライバ１１４およびランゲージ・モニタ１２６が上記機能を備えることにより、プリンタドライバ１１４のＵＩ部１１６が描画オブジェクトのパス情報を準備してランゲージ・モニタ１２６に設定する。一方で、描画部１１８がランゲージ・モニタ１２６からパス情報を読み出して、ＲＡＷデータのストリーム中にウォータマークのＰＳコマンドを挿入することができる。したがって、独自のプリントプロセッサを必要とせず、スプール形式にかかわらず、アウトライン・フォントの文字列など、描画オブジェクトを透過させて付加することができる。また、独自のＡＰＩを提供する必要もない。
【００７６】
（第２の実施形態）
以上説明した第１の実施形態では、ウォータマークの設定を含む印刷設定は、ユーザによる印刷指示が行われる前にアプリケーション１１２から呼び出された印刷設定画面を介して設定されるものとして説明した。一方、印刷開始後にポップアップ画面を立ち上げて印刷設定を変更する技術が知られている。以下、ポップアップ画面による印刷設定機能とともに、上述した描画オブジェクト付加印刷機能を実現する第２の実施形態について説明する。なお、第２の実施形態は、上述した第１の実施形態と同様な構成を備えているので、以下、相違点を中心に説明する。
【００７７】
以下、図１７〜図１９を参照しながら、第２の実施形態による各スプール形式での描画オブジェクト付加印刷機能を実現する印刷処理について説明する。図１７は、第２の実施形態における、ＲＡＷスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図であり、図１１および図１２で説明した第１の実施形態におけるシーケンス図との相違点が抜き出されて示されている。
【００７８】
図１１および図１２に示す処理と同様に、アプリケーション１１２は、ステップＳ１で、CreateDC関数をコールし、ステップＳ２で、StartDoc関数をコールする。第２の実施形態でも、描画部１１８は、ステップＳ２．３のDrvStartDoc関数でジョブ識別子を受け取る。ステップＳ２．４では、ＵＩ部１１６は、DrvDocumentEvent関数（iESC=DOCUMENTEVENT_STARTDOCPOST）でジョブ識別子を受け取り、ステップＳ２．４．１で、ExtEscape関数をコールし、描画部１１８が保持している印刷設定情報を取得する。
【００７９】
第２の実施形態では、ステップＳ２．４．２で、ＵＩ部１１６は、ステップＳ２．４．１で取得した印刷設定情報を初期値として、ポップアップ設定画面を表示する。ポップアップ画面は、図９に示したＧＵＩ画面と同様のものである。ＵＩ部１１６は、ユーザによりポップアップ設定画面で入力された変更後の印刷設定情報を取得する。取得された印刷設定情報において、ウォータマークの付加が指定されていれば、ＵＩ部１１６は、ステップＳ２．４．３で、ウォータマークを生成する。ステップＳ２．４．３．１では、ＵＩ部１１６は、GetPath関数を用いて、生成されたウォータマークの文字列のパス情報をＯＳから受け取る。ステップＳ２．４．４では、ＵＩ部１１６は、上記ステップＳ２．４で取得されたジョブ識別子をキーとして、SendRecvBidiDataFromPort関数をコールして、上記ステップＳ２．４．２で取得された印刷設定情報と、上記ステップＳ２．４．３．１で準備されたパス情報とを、ランゲージ・モニタ１２６に設定（ｓｅｔ）する。
【００８０】
ステップＳ３では、アプリケーション１１２は、StartPage関数をコールする。ステップＳ３．２では、ＧＤＩ１２０により描画部１１８のDrvStartPage関数がコールされる。描画部１１８は、最初のページ処理の場合は、ステップＳ３．２．１で、保持していたジョブ識別子をキーとして、SendRecvBidiDataFromPort関数をコールし、ランゲージ・モニタ１２６に保存された情報のうちの印刷設定情報を取得する（ｇｅｔ）。
【００８１】
以降、第１の実施形態と同様に（ここでは図１２を参照して説明する。）、アプリケーション１１２は、ステップＳ４で、所定の描画関数をコールし、ステップＳ５で、EndPage関数をコールする。ステップＳ５．２では、ＧＤＩ１２０により描画部１１８のDrvSendPage関数がコールされる。ステップＳ５．２．１で示すIPrintOemPS::Commandメソッドの第２引数がPSINJECT_SHOWPAGEである場合、レンダリング・プラグイン１５６は、ステップＳ５．２．１．１で、SendRecvBidiDataFromPort関数をコールして、ランゲージ・モニタ１２６から、ランゲージ・モニタ１２６に保存された情報のうちのパス情報を含むＰＳコマンドを取得する（ｇｅｔ）。ステップＳ５．２．１．２では、取得したパスを所定塗りつぶしパターンで塗りつぶすよう指令するＰＳコマンドをプリンタに向けて送信する。以降は、通常の印刷シーケンスと同様である。
【００８２】
図１８および図１９は、第２の実施形態によるＥＭＦスプール形式での描画オブジェクト付加印刷処理を示すシーケンス図であり、図１３〜図１６で説明した第１の実施形態におけるシーケンス図との相違点が抜き出されて示されている。
【００８３】
ＲＡＷスプール形式の場合と同様に、アプリケーション１１２は、ステップＳ１で、CreateDC関数をコールし、ステップＳ２で、StartDoc関数をコールする。第２の実施形態では、ＵＩ部１１６は、ステップＳ２．２のDrvDocumentEvent関数（iESC=DOCUMENTEVENT_STARTDOCPOST）でジョブ識別子を受け取る。ステップＳ２．２．１で、ExtEscape関数をコールし、描画部１１８が保持している印刷設定情報を要求する。ステップＳ２．２．１．１では、描画部１１８にDrvEscape関数が通知されるので、描画部１１８は、保持している印刷設定を返却する。
【００８４】
ＵＩ部１１６は、ExtEscape関数の処理から戻ってくるタイミングで、ステップＳ２．２．２で、取得した印刷設定情報を初期値として、ポップアップ設定画面を表示、ユーザにより入力された変更後の印刷設定情報を取得する。取得された印刷設定情報内でウォータマークの付加が指定されていれば、ＵＩ部１１６は、ステップＳ２．２．３で、ウォータマークを生成し、ステップＳ２．２．３．１でGetPath関数を用いて、生成されたウォータマークの文字列のパス情報を受け取る。ステップＳ２．２．４では、ＵＩ部１１６は、上記ステップＳ２．２で取得されたジョブ識別子をキーとして、上記ステップＳ２．２．２で取得した印刷設定情報と、上記ステップＳ２．２．３．１で準備されたパス情報とを、SendRecvBidiDataFromPort関数をコールして、ランゲージ・モニタ１２６に設定する（ｓｅｔ）。
【００８５】
アプリケーション・プロセスでの処理が終了した後は、スプーラ・プロセスでの再印刷処理となる。ここでは図１４および図１５を参照して説明すると、アプリケーション・プロセスにおけるEndDoc関数以降、ステップＳ７では、プリント・スプーラ１２２は、OpenPrintProcessor関数をコールする。ステップＳ８では、プリント・スプーラ１２２は、PrintDocumentOnPrintProcessor関数をコールする。
【００８６】
プリントプロセッサ１２４は、ステップＳ８．１で、GetJobAttributes関数をコールし、ステップＳ８．２で、GdiGetSpoolFileHandle関数をコールし、ステップＳ８．３で、GdiGetDC関数をコールする。ステップＳ８．４では、プリントプロセッサ１２４は、GdiStartDocEMF関数をコールする。ステップＳ８．４．２のDrvStartDoc関数では、スプーラ・プロセスにおけるプリンタドライバ１１４の描画部１１８は、ジョブ識別子を受け取る。引き続き、プリントプロセッサ１２４は、ステップＳ８．５で、GdiStartPageEMF関数をコールし、ステップＳ８．６で、GdiPlayPageEMF関数をコールする。
【００８７】
ここで、図１９を参照すると、ステップＳ８．７では、プリントプロセッサ１２４は、GdiEndPageEMF関数をコールし、８．７．２では、ＧＤＩ１２０により描画部１１８のDrvStartPage関数がコールされる。描画部１１８は、最初のページ処理の場合は、ステップＳ８．７．２．１で、SendRecvBidiDataFromPort関数をコールして、保持していたジョブ識別子をキーとして、ランゲージ・モニタ１２６に保存された情報のうちの印刷設定情報を取得する（ｇｅｔ）。
【００８８】
ステップＳ８．７．５では、ＧＤＩ１２０により描画部１１８のDrvSendPage関数がコールされる。描画部１１８は、ステップＳ８．７．５．１で示すCommand()で第２引数がPSINJECT_SHOWPAGEの場合で、レンダリング・プラグイン１５６により、ステップＳ８．７．５．１．１で、SendRecvBidiDataFromPort関数をコールし、保持していたジョブ識別子をキーとして、ランゲージ・モニタ１２６からウォータマークのパス情報を含むＰＳコマンドを取得する（ｇｅｔ）。ステップＳ８．７．５．１．２では、取得したパスを所定塗りつぶしパターンで塗りつぶすよう指令するＰＳコマンドを出力する。これにより、ウォータマークの透過的な付加が実現される。以降は、通常の印刷シーケンスと同様である。
【００８９】
上記第２の実施形態によれば、ジョブ開始に際して、ステップＳ２．２のDrvDocumentEvent関数（iESC=DOCUMENTEVENT_STARTDOCPOST）で受け取ったジョブ識別子に関連付けて、パス情報と印刷設定情報との両方がランゲージ・モニタ１２６に設定される。このため、ポップアップ画面による印刷設定機能を有する場合でも、描画オブジェクト付加印刷機能の両方を適切に実現することが可能となる。
【００９０】
（ハードウェア構成）
以下、図２０を参照しながら、上述までの実施形態におけるホスト装置１１０のハードウェア構成について説明する。ホスト装置１１０は、典型的には、汎用コンピュータ装置として構成される。図２０は、本実施形態による汎用コンピュータ装置のハードウェア構成を示す図である。
【００９１】
汎用コンピュータ装置１１０は、デスクトップ型のパーソナル・コンピュータ、ワークステーションなどとして構成されている。汎用コンピュータ装置１１０は、ＣＰＵ（Central Processing Unit）１２と、ＣＰＵ１２とメモリとの接続を担うノースブリッジ１４と、サウスブリッジ１６とを含む。サウスブリッジ１６は、上記ノースブリッジ１４と専用バスまたはＰＣＩバスを介して接続され、ＰＣＩバスやＵＳＢなどのＩ／Ｏとの接続を担う。
【００９２】
ノースブリッジ１４には、ＣＰＵ１２の作業領域を提供するＲＡＭ（Random Access Memory）１８と、映像信号を出力するグラフィックボード２０とが接続される。グラフィックボード２０には、アナログＲＧＢ、ＨＤＭＩ（High-Definition Multimedia Interface；ＨＤＭＩおよびHigh-Definition Multimedia Interfaceは登録商標または商標である）、ＤＶＩ（Digital Visual Interface）などの映像出力インタフェースを介してディスプレイ５０に接続される。
【００９３】
サウスブリッジ１６には、ＰＣＩ（Peripheral Component Interconnect）２２、ＬＡＮポート２４、ＩＥＥＥ１３９４、ＵＳＢ（Universal Serial Bus）ポート２８、補助記憶装置３０、オーディオ入出力３２、シリアルポート３４が接続される。補助記憶装置３０は、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などであり、コンピュータ装置を制御するためのＯＳ、上記プリンタドライバのプログラムや各種システム情報や各種設定情報を格納する。ＬＡＮポート２４は、汎用コンピュータ装置１１０を有線および無線でネットワークに接続させるインタフェース機器である。ＵＳＢポート２８には、キーボード５２およびマウス５４などの入力装置が接続され、操作者からの各種指示の入力を受け付けるためのユーザ・インタフェースを提供する。
【００９４】
本実施形態による汎用コンピュータ装置１１０は、補助記憶装置３０からプログラムを読み出し、ＲＡＭ１８が提供する作業空間に展開することにより、ＣＰＵ１２の制御の下、上述した各機能部および各処理を実現する。なお、汎用コンピュータ装置１１０のハードウェア構成について説明したが、画像形成装置１８０についても、画像形成処理、画像読取処理、ファクシミリ送受信処理など特定の用途に応じたハードウェアを備える他、ＣＰＵおよびＲＡＭ等などのハードウェアを備える点では共通しており、同様な構成とすることができる。
【００９５】
上述した実施形態によれば、独自のプリントプロセッサを必要とせず、スプール形式にかかわらず、描画オブジェクトを付加して描画処理することができるプログラム、情報処理装置、および、上記プログラムと画像処理装置とを含む画像処理システムを提供することができる。
【００９６】
なお、上記機能部は、アセンブラ、Ｃ、Ｃ＋＋、Ｃ＃、Ｊａｖａ（登録商標）などのレガシープログラミング言語やオブジェクト指向プログラミング言語などで記述されたコンピュータ実行可能なプログラムにより実現でき、ＲＯＭ、ＥＥＰＲＯＭ、ＥＰＲＯＭ、フラッシュメモリ、フレキシブルディスク、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ブルーレイディスク、ＳＤカード、ＭＯなど装置可読な記録媒体に格納して、あるいは電気通信回線を通じて頒布することができる。また、上記説明では、ホスト装置１１０と画像形成装置１８０とを含み構成されるプリントシステムについて説明したが、上記プリンタドライバおよび画像形成装置を含むシステムとして提供されてもよい。
【００９７】
これまで本発明の実施形態について説明してきたが、本発明の実施形態は上述した実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
【符号の説明】
【００９８】
１００…プリントシステム、１０２…ネットワーク、１１０…ホスト装置、１１２…アプリケーション、１１４…プリンタドライバ、１１６…ＵＩ部、１１８…描画部、１２０…ＧＤＩ、１２２…プリント・スプーラ、１２４…プリントプロセッサ、１２６…ランゲージ・モニタ、１２８…データ保存部、１３０…通信部、１３２…ポートモニタ、１３４…ポートドライバ、１３６…ＯＳ、１４８…ミニ・ドライバ、１５０…バイナリ・データ・ファイル、１５２…ＣＰＳＵＩＤＬＬ、１４０…プリンタ・インタフェースＤＬＬ、１５４…プリンタ・グラフィックスＤＬＬ、１４４…共通ユーザ・インタフェース・コード、１４６…ユーザ・インタフェース・プラグイン、１５６…レンダリング・プラグイン、１４２…パーサ、１８０…画像形成装置、２００…パス情報、２１０…テーブル、３００…ウォータマーク編集画面、３０２…プルダウン・メニュー、３０４…プレビュー領域、３０６，３５０，３５２，３３０，３３２，３４６…ボタン、３１０…編集領域、３４０…配置決め領域、３１２，３１４…テキストボックス、３１６，３１８，３２０，３２２…プルダウン・メニュー、３２４，３２６，３２８，３４２…スピンボタン，３４４…スピンボタン、１２…ＣＰＵ、１４…ノースブリッジ、１６…サウスブリッジ、１８…ＲＡＭ、２０…グラフィックボード、２２…ＰＣＩ、２４…ＬＡＮポート、２６…ＩＥＥＥ１３９４ポート、２８…ＵＳＢポート、３０…補助記憶装置、３２…オーディオ入出力、３４…シリアルポート、５２…キーボード、５４…マウス
【先行技術文献】
【特許文献】
【００９９】
【特許文献１】特開２０１２−１１８９４１号公報
【図１】
2015041268.tif 000003
【図２】
2015041268.tif 000004
【図３】
2015041268.tif 000005
【図４】
2015041268.tif 000006
【図５】
2015041268.tif 000007
【図６】
2015041268.tif 000008
【図７】
2015041268.tif 000009
【図８】
2015041268.tif 000010
【図９】
2015041268.tif 000011
【図１０】
2015041268.tif 000012
【図１１】
2015041268.tif 000013
【図１２】
2015041268.tif 000014
【図１３】
2015041268.tif 000015
【図１４】
2015041268.tif 000016
【図１５】
2015041268.tif 000017
【図１６】
2015041268.tif 000018
【図１７】
2015041268.tif 000019
【図１８】
2015041268.tif 000020
【図１９】
2015041268.tif 000021
【図２０】
2015041268.tif 000022