(57)【要約】      （修正有）【課題】ＸＰＳ（ＸＭＬ  Ｐａｐｅｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）標準フィルターを組み込んだＶ４プリンタードライバーにおいて、高度な印刷体裁の出力を実現することが可能な印刷制御装置を提供する。【解決手段】拡張印刷情報を、プリプロセスフィルター４０３からＸＰＳ標準フィルター４０４を介さずにポストプロセスフィルター４０５に送信することにより、プリンターベンダーによって仕様拡張されたコマンドを生成し、送信する。【選択図】図４
2016134045.tif 000002
【特許請求の範囲】
【請求項１】
プリプロセスフィルター、ＸＰＳ標準フィルター、ポストプロセスフィルターから構成される印刷装置であって、
前記プリプロセスフィルターは、ページ情報を前記ＸＰＳ標準フィルターに送信するページ情報送信手段と、
印刷ジョブに関わる拡張印刷情報を送信する拡張印刷情報送信手段と、を有し、
前記ＸＰＳ標準フィルターはＸＰＳをＰＤＬに変換するＸＰＳＰＤＬ化手段と、
前記ＰＤＬを前記ポストプロセスフィルターに送信するＰＤＬ送信手段と、を有し、
前記ポストプロセスフィルターは前記ＰＤＬを受信するＰＤＬ受信手段と、
前記拡張印刷情報を受信する拡張印刷情報受信手段と、
前期ＰＤＬと前期拡張印刷情報から高度な印刷体裁を表現する拡張ＰＤＬを生成する拡張ＰＤＬ生成手段と、
前記拡張ＰＤＬを送信するコマンド送信手段と、
を有することを特徴とする印刷制御装置。
【請求項２】
前記拡張印刷情報はブランクページコマンドの生成を促すためのブランクページ属性であることを特徴とする請求項１に記載の印刷制御装置。
【請求項３】
前記拡張印刷情報は分冊の体裁を実現するためのバインダー開始属性であることを特徴とする請求項１に記載の印刷制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンタードライバーにおけるＰＤＬの生成方法に関する。
【背景技術】
【０００２】
従来、標準ＸＰＳフィルターを用いたＶ４プリンタードライバーを開発する手法が開示されている（非特許文献１）。Ｍｉｃｒｏｓｏｆｔ（登録商標）のＷｉｎｄｏｗｓ(登録商標）  ８では、Ｖ４プリンタードライバーという新しいアークテクチャーに基づいたプリンタードライバーの開発が可能となった。さらに、Ｗｉｎｄｏｗｓ  ８にはＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）としてＰＣＬ（登録商標）をサポートするＭｉｃｒｏｓｏｆｔ製の標準ＸＰＳフィルター（ＭＳｘｐｓＰＣＬ６．ｄｌｌ）があらかじめ提供されている。
【０００３】
ＸＰＳ（ＸＭＬ  Ｐａｐｅｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）は、Ｍｉｃｒｏｓｏｆｔの規定する文書フォーマットであり、Ｖ４プリンタードライバーの印刷用データとして用いられる。
【０００４】
標準ＸＰＳフィルターは、入力されたＸＰＳを、ＰＣＬに変換して出力するモジュールであり、プリンターベンダーは、これらモジュールをプリンタードライバーに組み込むことにより、ＰＣＬのＶ４プリンタードライバーの開発を容易に行うことが可能である。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】http://msdn.microsoft.com/en-us/library/windows/hardware/jj218733(v=vs.85).aspx
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の非特許文献１では、より高度な印刷体裁のジョブを生成する方法については考慮されていなかった。たとえば、ブランクページコマンドによって両面かつ部単位の体裁を出力したり、複数冊子からなる分冊の体裁を出力することはできなかった。
【０００７】
本発明の目的は、ＸＰＳ標準フィルターを組み込んだＶ４プリンタードライバーにおいて、高度な印刷体裁の出力を実現することが可能な印刷制御装置を提供することにある。
【課題を解決するための手段】
【０００８】
上記の目的を達成するために、本発明の印刷制御装置は、
プリプロセスフィルター、ＸＰＳ標準フィルター、ポストプロセスフィルターから構成され、
前記プリプロセスフィルターは、ページ情報を前記ＸＰＳ標準フィルターに送信するページ情報送信手段と、
印刷ジョブに関わる拡張印刷情報を送信する拡張印刷情報送信手段と、を有し、
前記ＸＰＳ標準フィルターはＸＰＳをＰＤＬに変換するＸＰＳＰＤＬ化手段と、
前記ＰＤＬを前記ポストプロセスフィルターに送信するＰＤＬ送信手段と、を有し、
前記ポストプロセスフィルターは前記ＰＤＬを受信するＰＤＬ受信手段と、
前記拡張印刷情報を受信する拡張印刷情報受信手段と、
前期ＰＤＬと前期拡張印刷情報から高度な印刷体裁を表現する拡張ＰＤＬを生成する拡張ＰＤＬ生成手段と、
前記拡張ＰＤＬを送信するコマンド送信手段と、
を有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、ＸＰＳ標準フィルターを組み込んだＶ４プリンタードライバーにおいて、高度な印刷体裁の出力を実現することが可能な印刷制御装置を提供できる。
【図面の簡単な説明】
【００１０】
【図１】本発明の印刷システムが適用可能な装置構成例
【図２】本発明の印刷システムに関わるハードウェア構成を示すブロック図
【図３】本発明の印刷システムに関わるソフトウェアモジュールとデータファイルの静的なパッケージ構成を示す図
【図４】本発明の印刷処理に関わるソフトウェアモジュールが実行された際の、動的なプログラムオブジェクトの配置を示す図
【図５】本発明の第１の実施形態における印刷出力例
【図６】本発明の第１の実施形態におけるプリプロセスフィルターの処理の流れを示すフローチャート
【図７】本発明の第１の実施形態におけるＸＰＳ標準フィルターの処理の流れを示すフローチャート
【図８】本発明の第１の実施形態におけるポストプロセスフィルターの処理の流れを示すフローチャート
【図９】ＸＰＳの例
【図１０】本発明の第２の実施形態におけるプリプロセスフィルターの処理の流れを示すフローチャート
【図１１】本発明の第２の実施形態におけるポストプロセスフィルターの処理の流れを示すフローチャート
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための第１の形態について図面を用いて説明する。
【００１２】
［第１の形態］
図１は本発明の印刷システムが適用可能な装置構成例を示す図である。本印刷システムは、ＰＣ（１０）とプリンター（２０）から構成される。ＰＣ（１０）、プリンター（２０）はＬＡＮ（１）を介して接続されている。ＬＡＮ（１）はイーサーネットの通信方式に対応している。ＬＡＮ（１）は有線ＬＡＮ、無線ＬＡＮ、Ｂｌｕｅｔｏｏｔｈ、ＵＳＢなどその他の接続形態であっても良い。
【００１３】
図２は各装置に適用可能なハードウェア構成を示すブロック図である。最初に、ＰＣ（１０）について説明する。ＣＰＵ（１０１）は、ＲＡＭ（１０２）に記憶されているプログラムに従って、システムバス（１０４）に接続される各デバイスを総括的に制御する。このＲＡＭ（１０２）は、ＣＰＵ（１０１）の主メモリ、ワークエリア等としても機能する。ＲＯＭ（１０３）は、各種プログラム及びデータを格納しており、各種フォントを記憶するフォントＲＯＭ（１０３ａ）、ブートプログラムやＢＩＯＳ等を記憶するプログラムＲＯＭ（１０３ｂ）、及び各種データを記憶するデータＲＯＭ（１０３ｃ）に区分けして構成される。
【００１４】
ネットワークＩ／Ｆ（１０５）は、ＬＡＮ（１）に接続され、通信処理を行なう。キーボードコントローラＩ／Ｆ（１０６）は、キーボード（１０９）や不図示のポインティングデバイス（マウス）からのキー入力を制御する。ディスプレイＩ／Ｆ（１０７）は、ディスプレイ（１１０）への表示処理を制御する。外部メモリＩ／Ｆ（１０８）は、例えばハードディスク（ＨＤ）等の外部メモリ（１１１）とのアクセスを制御する。外部メモリ（１１１）は、オペレーティングシステム（以下、ＯＳ）（１１２）や本発明の印刷システムを担う各種ソフトウェア（１１３）、さらに、ユーザファイル、編集ファイル等の各種データ（１１４）を記憶する記憶媒体として機能する。なお、ＯＳ（１１２）は本実施例ではＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  ８を使用するものとする。
【００１５】
図３はＰＣ（１０）における本発明の印刷システムに関わるソフトウェアモジュールとデータファイルの静的なパッケージ構成を示す図である。図３に示すすべてのソフトウェアモジュールとデータは外部メモリ（１１１）に記憶されており、実行時にＲＡＭ（１０２）にロードされＣＰＵ（１０１）によって実行されたり、読み込まれたりする。
【００１６】
プリンタードライバーパッケージ（３０）は、プリンターベンダーによって開発され提供されるソフトウェアモジュールやデータファイルを含むパッケージである。プリンタードライバーパッケージ（３０）は、ユーザーによってＯＳ（１１２）にセットアップされることによって、プリンタードライバーとして動作可能となる。ＯＳドライバーパッケージ（３１）は、プリンタードライバーパッケージ（３０）によって利用されるソフトウェアパッケージであり、Ｍｉｃｒｏｓｏｆｔによって開発され提供される。
【００１７】
セットアップファイル（３０１）は、セットアップ時にＯＳ（１１２）によって読み込まれるデータファイルであり、プリンタードライバーパッケージ（３０）自身の構成や、依存するＯＳドライバーパッケージ（３１）に関する情報を含んでいる。マニフェストファイル（３０２）は、プリンタードライバーの初期化情報を記述したデータファイルである。
【００１８】
ＧＰＤファイル（３０３）は、プリンタードライバーの機能情報を定義したデータファイルである。具体的には、利用可能な用紙サイズ、両面、ホチキスといった機能に関する情報が記述されている。ＧＰＤファイル（３０３）は、ＯＳドライバーパッケージ（３１）に含まれるＯＳコンフィグモジュール（３１１）によって読み込まれる。
【００１９】
ＯＳコンフィグモジュール（３１１）は、ＧＰＤファイル（３０３）に定義された情報に基づいてプリンタードライバーのユーザーインターフェースを表示したり、ＸＰＳに含まれる印刷設定データであるＰｒｉｎｔＴｉｃｋｅｔを生成したりする。パイプラインコンフィグファイル（３０４）は、印刷処理の順序をどのように構成するかについて定義したデータファイルである。ベンダーフィルターモジュール（３０５）には、プリンターベンダーによって開発された印刷処理が組み込まれている。一方の、ＯＳフィルターモジュール（３１２）には、Ｍｉｃｒｏｓｏｆｔによって開発された印刷処理が組み込まれている。
【００２０】
図４は本発明の印刷処理に関わるソフトウェアモジュールがＲＡＭ（１０２）にロードされＣＰＵ（１０１）によって実行された際の、動的なプログラムオブジェクトの配置を示す図である。アプリケーション（４０１）は文書を作成し、印刷指示を与えるためのソフトウェアである。印刷指示がユーザーによって与えられると、アプリケーション（４０１）は文書をＸＰＳに変換し、ＯＳ（１１２）の提供する印刷ＡＰＩを通じてＸＰＳをフィルターパイプラインマネージャー（４０２）に送信する。Ｖ４プリンタードライバーでは、ＸＰＳプリントフィルターパイプラインと呼ばれるプログラミングモデルに従って印刷処理が実行される。
【００２１】
ＸＰＳプリントフィルターパイプラインにおける印刷処理の単位はフィルターと呼ばれ、複数のフィルターはフィルターパイプラインマネージャー（４０２）によって順にリンクされて実行される。すなわち、あるフィルターの出力がその次に連結されたフィルターの入力となり、各フィルターが順次処理を実行することによってプリンター（２０）に送信するＰＤＬを生成する仕組みになっている。フィルターパイプラインマネージャー（４０２）はＸＰＳを受信すると、パイプラインコンフィグファイル（３０４）を読み込み、記述されたフィルター構成情報にしたがってフィルターをロードし、互いの入出力インターフェースを連結する。
【００２２】
プリプロセスフィルター（４０３）、ＸＰＳ標準フィルター（４０４）、ポストプロセスフィルター（４０５）はフィルターパイプラインマネージャー（４０２）によってロードされたフィルターである。プリプロセスフィルター（４０３）とポストプロセスフィルター（４０５）はベンダーフィルターモジュール（３０５）に組み込まれているフィルターである。一方、ＸＰＳ標準フィルター（４０４）はＯＳフィルターモジュール（３１２）に組み込まれているフィルターである。フィルターによって出力されたＰＣＬは、スプーラー（４０６）によってスケジューリングされ、ポートモニター（４０７）によってプリンター（２０）に送信される。
【００２３】
パイプラインプロパティバッグ（４０８）は、すべてのフィルターがアクセスすることができる共有データ管理用のオブジェクトである。互いに入出力のインターフェースが連結されていないフィルター同士であってもデータを登録したり取得したりできるため、プリプロセスフィルター（４０３）からポストプロセスフィルター（４０５）に対して、間にあるＸＰＳ標準フィルターを介さず情報を送信することも可能である。
【００２４】
バイパスオブジェクト（４０９）はパイプラインプロパティバッグ（４０８）において拡張ページ情報（４１０）の送受信機能を提供するオブジェクトである。拡張ページ情報（４１０）は、プリンターベンダーによって独自に拡張されたＰＣＬコマンドを生成するために必要な情報を含むページ単位のデータオブジェクトである。バイパスオブジェクト（４０９）は、内部的に拡張ページ情報（４１０）をキュー構造のリストで管理しており、プリプロセスフィルター（４０３）からの送信要求（リストへの追加）と、ポストプロセスフィルター（４０４）からの受信要求（リストからの取り出し）を受け付ける機能を有する。
【００２５】
図５は第１の実施形態において実現される印刷体裁の出力例である。プリンタードライバーは、様々な印刷体裁を実現するためにしばしばジョブ内にブランクページコマンドというプリンターベンダーによって独自に仕様拡張されたコマンドを挿入することがある。例えば、両面＋部単位印刷の体裁を出力する場合、ページ数が奇数のときは次の部の表面が前の部の裏面に回り込んでしまわないよう、プリンタードライバーは部と部の間にブランクページコマンドを「１２３［Ｂ］１２３・・・」のように挿入する（ブランクページコマンドを［Ｂ］で表現）。ブランクページコマンドは、アプリケーションから入力された通常の描画を含むページや、何も描画を含まない白紙のページとは異なる属性のページとしてプリンターに処理させる必要がある。
【００２６】
しかしながら、ＸＰＳ標準フィルターは仕様拡張されたコマンドの生成をサポートしないため、ＸＰＳ標準フィルターをプリンタードライバーに組み込んだだけでは両面＋部単位のような印刷体裁を実現できないという課題が存在する。
【００２７】
そこで、以下では、バイパスオブジェクトを用いて拡張印刷情報をプリプロセスフィルターからポストプロセスフィルターに送信することにより、ブランクページコマンドの生成を行うための処理について説明する。
【００２８】
図６は第１の実施形態におけるプリプロセスフィルター（４０３）の印刷処理を示すフローチャートである。
【００２９】
はじめに、プリプロセスフィルター（４０３）は、フィルターパイプラインマネージャー（４０２）によってロードされると、バイパスオブジェクト（４０９）を生成し、パイプラインプロパティバッグ（４０８）に登録する（Ｓ１０１）。
【００３０】
次に、プリプロセスフィルター（４０３）は、フィルターパイプラインマネージャー（４０２）が提供するＡＰＩを通じて、アプリケーション（４０１）から入力されたＸＰＳを構成するパーツにアクセスし、Ｊｏｂ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔを取得し、解析する（Ｓ１０２）。
【００３１】
図９に、ＸＰＳのデータ例を模式図で示す。ＸＰＳはパーツと呼ばれるデータを構成要素とする文書フォーマットであり、パーツ同士はＸＰＳ内で互いに関連付けられている。文書構造を規定するパーツにはＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ、ＦｉｘｅｄＤｏｃｕｍｅｎｔ、ＦｉｘｅｄＰａｇｅがあり、それぞれジョブ、ドキュメント、ページという文書の階層構造を表現している。ここで、ＦｉｘｅｄＰａｇｅは、ＸＰＳで規定された様々な描画コマンドが記述されたＸＭＬ形式のデータである。さらに各文書構造のパーツには印刷設定をＸＭＬ形式で表現したＰｒｉｎｔＴｉｃｋｅｔと呼ばれるパーツが関連付けられる。
【００３２】
ＰｒｉｎｔＴｉｃｋｅｔは、どの文書構造のパーツに関連付けられているかによってそれぞれ
Ｊｏｂ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔ、
Ｄｏｃｕｍｅｎｔ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔ、
Ｐａｇｅ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔ
と呼び分けられる。
Ｊｏｂ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔはジョブ全体に渡る印刷設定を規定し、
Ｐａｇｅ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔは各ページ固有の印刷設定を規定する。
Ｄｏｃｕｍｅｎｔ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔはページの集まりであるドキュメントに対する印刷設定である。
【００３３】
本実施例におけるＶ４プリンタードライバーの機能を定義するＧＰＤファイル（３０３）には、部単位印刷や両面印刷など様々な印刷体裁を指定するための機能情報が記述されている。これにより、ＧＰＤファイル（３０３）を元にＯＳコンフィグモジュール（３１１）によって表示された印刷設定を行うためのユーザーインターフェースでは、ユーザーが様々な印刷体裁の有効または無効を選択的に入力することができる。アプリケーション（４０１）からの印刷指示時にこのユーザーインターフェースによって部単位かつ両面印刷を有効にした設定が入力されると、入力結果はＯＳコンフィグモジュール（３１１）によってＰｒｉｎｔＴｉｃｋｅｔ形式に変換される。変換されたＰｒｉｎｔＴｉｃｋｅｔは、アプリケーション（４０１）がＸＰＳを生成する際にＪｏｂ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔとしてＸＰＳ内に書き込まれる。
【００３４】
次に説明するＳ１０３〜Ｓ１０８は部単位印刷の１部目を処理するためのステップである。プリプロセスフィルター（４０３）は、フィルターパイプラインマネージャー（４０２）が提供するＡＰＩを通じて、ＦｉｘｅｄＰａｇｅのパーツを取り出す（Ｓ１０３）。パーツが取り出せたときはＳ１０４に進む。次のＦｉｘｅｄＰａｇｅがＡＰＩを通じて取り出せなかったときは、それはフィルターがジョブに含まれる全ページを取り出し終わったことを表すので、Ｓ１０８に進む。
【００３５】
次に、プリプロセスフィルター（４０３）は、ＦＰリストに取り出したＦｉｘｅｄＰａｇｅを追加する（Ｓ１０４）。ＦＰリストとはプリプロセスフィルターが有するリストデータであり、Ｓ１０７以降で２部目以降の処理をするために用いられる。
【００３６】
次に、プリプロセスフィルター（４０３）は、通常印刷ページ属性を拡張ページ情報にセットし、バイパスオブジェクトに送信する（Ｓ１０５）。通常印刷ページ属性は、拡張ページ情報に設定することができるページ属性の一種で、その名のとおり通常に印刷するページであることを示す。後述するが、ページ属性には他にもブランクページ属性、バインダー開始属性などがある。
【００３７】
次に、プリプロセスフィルター（４０３）は、ＸＰＳ標準フィルター（４０４）にＦｉｘｅｄＰａｇｅを送信する（Ｓ１０６）。以上が１部目を処理するステップである。
【００３８】
次のＳ１０７〜Ｓ１１３は２部目以降を処理するステップであり、Ｓ１０７のループに含まれるＳ１０８〜Ｓ１１３は（Ｎ−１）回繰り返される。ここでＮは部数の数を表す。
【００３９】
プリプロセスフィルター（４０３）は、ＦＰリストから次のＦｉｘｅｄＰａｇｅを取得する（Ｓ１０８）。なお、ここでＦＰリストは２部目以降の処理で繰り返し参照されるリストデータであり、ＦｉｘｅｄＰａｇｅを取得した後もリストの長さは変化しない。次のＦｉｘｅｄＰａｇｅがＡＰＩを通じて取り出せなかったときは、それは全ページを取り出し終わったことを表すので、ＦＰリストの参照先をリストの先頭に戻し、再びループの開始Ｓ１０７に戻る。
【００４０】
次に、プリプロセスフィルター（４０３）は、ブランクページを発行する条件が真であるかどうかを判断する（Ｓ１０９）。真ならＳ１１０へ、偽ならＳ１１２に進む。ここで、ブランクページを発行する目的は、両面＋部単位の体裁で前の部の裏面に次の部の表面が回り込むのを防ぐことなので、発行の条件は「両面印刷が有効、かつＦＰリストに格納されたページ数が奇数であるとき」となる。
【００４１】
次に、プリプロセスフィルター（４０３）は、ブランクページ属性を拡張ページ情報にセットし、バイパスオブジェクトに送信する（Ｓ１１０）。
【００４２】
さらに、ブランクページに対応するＦｉｘｅｄＰａｇｅとして空のＦｉｘｅｄＰａｇｅを生成してＸＰＳ標準フィルターに送信する（Ｓ１１１）。ここで、空のＦｉｘｅｄＰａｇｅとは描画コマンドをひとつも含まないＦｉｘｅｄＰａｇｅのことを指し、ＰＣＬに変換するとやはり描画コマンドをひとつも含まない白紙のＰａｇｅとなる。この白紙のＰａｇｅを後にポストプロセスフィルター（４０５）において単なる白紙でなく、ブランクページとして扱うことができるのは、同時にブランクページ属性をセットした拡張ページ情報を送信しているためである。
【００４３】
条件が偽であった場合、プリプロセスフィルター（４０３）は、通常印刷ページ属性を拡張ページ情報にセットし、バイパスオブジェクトに送信する（Ｓ１１２）。
【００４４】
さらに、ＦＰリストからＦｉｘｅｄＰａｇｅを取得し、ＸＰＳ標準フィルター（４０４）に送信する（Ｓ１１３）。なお、前記条件が真となり、ブランクページを生成した場合であっても、ＦＰリストからＦｉｘｅｄＰａｇｅを取り出しているのでＳ１１２−Ｓ１１３は実行される。
【００４５】
図７は第１の実施形態におけるＸＰＳ標準フィルター（４０４）の印刷処理を示すフローチャートである。ＸＰＳ標準フィルター（４０４）は前段のプリプロセスフィルター（４０３）からＸＰＳを入力として受信し、ポストプロセスフィルター（４０５）にＰＣＬを出力として送信する。図１０（ａ）に、ＰＣＬのデータ例を模式図で示す。ＰＣＬのデータ構造もＸＰＳと同様に文書構造を表す階層を有しており、上から順にＰＪＬ、Ｓｅｓｓｉｏｎ、Ｐａｇｅとなっている。
【００４６】
ＰａｇｅはＯｒｉｅｎｔａｔｉｏｎやＭｅｄｉａＳｉｚｅといった印刷設定コマンドと、Ｔｅｘｔ、Ｇｒａｐｈｉｃｓ、Ｉｍａｇｅの各種描画コマンドから構成される。
【００４７】
はじめに、ＸＰＳ標準フィルター（４０４）は、Ｊｏｂ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔを解析し（Ｓ２０１）、解析結果を元にＰＣＬにおけるＰＪＬとＳｅｓｓｉｏｎを生成し（Ｓ２０２）、ポストプロセスフィルター（４０５）に送信する（Ｓ２０３）。
【００４８】
次に、ＸＰＳ標準フィルター（４０４）は、ＦｉｘｅｄＰａｇｅを取得し（Ｓ２０４）、ＦｉｘｅｄＰａｇｅをＰＣＬのＰａｇｅに変換し（Ｓ２０５）、ポストプロセスフィルター（４０５）に送信する（Ｓ２０６）。次のＦｉｘｅｄＰａｇｅが取り出せなかったとき、すなわち全ページの処理が終わったら、フィルターの処理を終了する。なお、Ｓ２０４において取得するＦｉｘｅｄＰａｇｅの中にはブランクページとして送信されたものも含まれるが、ＸＰＳ標準フィルター（４０４）においては単に何も描画のないＦｉｘｅｄＰａｇｅとして扱われ、白紙のＰａｇｅコマンドが生成される。
【００４９】
図８は第１の実施形態におけるポストプロセスフィルター（４０５）の印刷処理を示すフローチャートである。
【００５０】
はじめに、ポストプロセスフィルター（４０５）は、パイプラインプロパティバッグ（４０８）からバイパスオブジェクト（４０９）を取得する（Ｓ３０１）。
【００５１】
次に、Ｊｏｂ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔに記述された印刷設定を解析する（Ｓ３０２）。
【００５２】
次に、各ページに対する処理をＳ３０３〜Ｓ３１１で行う。ステップＳ３０３ではＸＰＳ標準フィルター（４０４）からの出力であるＰＣＬのデータがまだ入力としてあるかどうか判定する。あればＰＣＬのデータを取得し（Ｓ３０４）、なければ処理を終了する。
【００５３】
次に、取得したＰＣＬを解析し、ＰＣＬにおける最小の命令単位であるオペレーターを取得しさらにそれを記憶する（Ｓ３０５）。オペレーターにはページ開始命令であるＢｅｇｉｎＰａｇｅ、ページ終了命令であるＥｎｄＰａｇｅ、パス描画命令であるＬｉｎｅＰａｔｈ、画像描画命令であるＢｅｇｉｎＩｍａｇｅなどがある。これらのうち、ＢｅｇｉｎＰａｇｅとＥｎｄＰａｇｅの間に現れる一連のオペレーター（ＢｅｇｉｎＰａｇｅとＥｎｄＰａｇｅを含む）はページ単位の制御に関係する命令である。このページ単位の制御に関係するオペレーターのことをページレベルのオペレーターと呼ぶ。
【００５４】
次のステップＳ３０６では、Ｓ３０５で取得したオペレーターがページレベルのオペレーターであるかどうか判定し、そうであればＳ３０６に進み、そうでなければＳ３０８に進んで取得したオペレーターをフィルターパイプラインマネージャー（４０２）に送信してＳ３０３に戻る。そこで、Ｓ３０６では、ＢｅｇｉｎＰａｇｅからＥｎｄＰａｇｅまでのオペレーターが記憶されたかどうか判定し、そうである場合はＳ３０７に進み、そうでない場合はＳ３０３に戻る。
【００５５】
Ｓ３０８では取得したページレベルのオペレーターを記憶し蓄積する。
【００５６】
次に、ＢｅｇｉｎＰａｇｅからＥｎｄＰａｇｅまでのオペレーターが蓄積されたかどうかを判定し（Ｓ３０９）、そうである場合はＳ３１０に進み、そうでない場合はＳ３０３に戻る。
【００５７】
次に、ポストプロセスフィルター（４０５）はバイパスオブジェクト（４０９）から拡張ページ情報（４１０）を取り出す（Ｓ３１０）。前述の通り、バイパスオブジェクト（４０９）内で拡張ページ情報（４１０）はキュー構造のリストとして管理されており、Ｓ３０８で取り出される拡張ページ情報（４１０）のページ番号は、これから出力されるＰＣＬのＰａｇｅコマンドのページ番号と一致している。
【００５８】
次に、ポストプロセスフィルター（４０５）は、拡張ページ情報（４１０）にブランクページ属性がセットされているか判定する（Ｓ３１１）。
【００５９】
セットされていなければフィルターパイプラインマネージャー（４０２）に蓄積された一連のページレベルのコマンドであるＢｅｇｉｎＰａｇｅからＥｎｄＰａｇｅまでを送信し（Ｓ３１３）、セットされていればブランクページコマンドを送信する（Ｓ３１２）。
【００６０】
Ｓ３１２、Ｓ３１３のいずれの場合も処理後はＳ３０３に戻る。
【００６１】
なお、Ｗｉｎｄｏｗｓ  ８ではＰＣＬだけでなくＰＳ（Ｐｏｓｔ  Ｓｃｒｉｐｔ）をサポートする標準ＸＰＳフィルター（ＭＳｘｐｓＰＳ．ｄｌｌ）も提供されているが、本実施例で述べた方法がＰＣＬと同様に適用可能であることは言うまでもない。
【００６２】
以上、本発明における第１の実施形態では、拡張ページ情報（４１０）をＸＰＳ標準フィルター（４０４）を介さずに送信することによって、ブランクページコマンドの生成が実現できることを示した。
【００６３】
［第２の形態］
次に、図１０と図１１を用いて、本発明を実施するための第２の形態について説明する。プリンタードライバーによって実現される、高度な印刷体裁のさらなる例としては、分冊がある。分冊とは、製本印刷の一種であり、ひとつの冊子に用いる紙の最大枚数を規定して面付けして出力する印刷体裁である。たとえば、全部で２０ページからなる文書を分冊した場合、第１の冊子には１〜８ページ目、第２の冊子には９〜１６ページ目、最後の冊子には１７〜２０ページ目がそれぞれ製本印刷のレイアウトで面付けされる。
【００６４】
分冊の体裁を実現するには、連続して送信されるＰＣＬのページコマンドの合間に、ひとつの冊子の始まりと終わりをプリンターが認識できるようバインダーコマンドを送信する必要がある。しかしながら、バインダーコマンドはやはりプリンターベンダーによって独自に仕様拡張されたコマンドであるため、ＸＰＳ標準フィルターをプリンタードライバーに組み込んだだけでは分冊を実現できないという課題がある。
【００６５】
そこで、本発明における第２の実施形態では、バイパスオブジェクト（４０９）を用いて拡張ページ情報（４１０）をポストプロセスフィルター（４０５）に送信することにより、バインダーコマンドの生成を行うための処理について説明する。図１０は第２の実施形態における、プリプロセスフィルター（４０３）の処理の流れを示すフローチャートである。
【００６６】
はじめに、プリプロセスフィルター（４０３）は、フィルターパイプラインマネージャー（４０２）によってロードされると、バイパスオブジェクト（４０９）を生成し、パイプラインプロパティバッグ（４０８）に登録する（Ｓ４０１）。
【００６７】
次に、プリプロセスフィルター（４０３）は、フィルターパイプラインマネージャー（４０２）が提供するＡＰＩを通じて、アプリケーション（４０１）から入力されたＸＰＳを構成するパーツにアクセスし、Ｊｏｂ−ｌｅｖｅｌ  ＰｒｉｎｔＴｉｃｋｅｔを取得し、解析する（Ｓ４０２）。
【００６８】
次に、プリプロセスフィルター（４０３）は、フィルターパイプラインマネージャー（４０２）が提供するＡＰＩを通じて、ＦｉｘｅｄＰａｇｅのパーツを取り出す（Ｓ４０３）。パーツが取り出せたときはＳ４０４に進む。次のＦｉｘｅｄＰａｇｅがＡＰＩを通じて取り出せなかったときは、それはフィルターがジョブに含まれる全ページを取り出し終わったことを表すので、処理を終了する。
【００６９】
次に、プリプロセスフィルター（４０３）は、分冊リストが空であるかどうか判定し、空ならＳ４０５に、そうでないならＳ４０６に進む（Ｓ４０４）。
【００７０】
Ｓ４０５ではバインダー開始属性を拡張ページ情報（４１０）にセットしバイパスオブジェクト（４０９）に送信する。
【００７１】
一方、Ｓ４０６では通常ページ属性を拡張ページ情報（４１０）にセットしバイパスオブジェクト（４０９）に送信する。
【００７２】
ここで、分冊リストとは小冊子としてのレイアウトを実現するためにＦｉｘｅｄＰａｇｅを並び替えて記憶するオブジェクトである。例えば２０ページの原稿データで最大枚数２枚の小冊子を構成する場合、分冊リストにははじめに１〜８ページ目のＦｉｘｅｄＰａｇｅが小冊子のページ出現順となるよう並び替えられて記憶される。新しい小冊子を構成するごとに、ＰＣＬのバインダーコマンドを送信して小冊子同士の区切り位置をプリンターに指示する必要がある。分冊リストが空の状態、すなわち小冊子の生成を開始した時点で、バインダー開始属性を拡張ページ情報（４１０）にセットするのは、後述するポストプロセスフィルター（４０５）の処理において小冊子の始まりが検知できるようにするためである。
【００７３】
次に、プリプロセスフィルター（４０３）は、分冊リストに取り出したＦｉｘｅｄＰａｇｅを追加する（Ｓ４０７）。
【００７４】
次に、プリプロセスフィルター（４０３）は、Ｓ４０８において小冊子が完成したかどうか、すなわち分冊リストに最大枚数分のページが格納されたかどうかを判定し、完成した場合はＳ４０９に進み、そうでないならＳ４０３に戻る。
【００７５】
Ｓ４０９において、プリプロセスフィルター（４０３）は分冊リストに含まれるＦｉｘｅｄＰａｇｅをＸＰＳ標準フィルター（４０４）に送信する。また、分冊処理がいったん終了したので分冊リストに含まれるデータをクリアする。第２の実施形態におけるＸＰＳ標準フィルター（４０４）の処理は、図７に示した第１の実施形態における処理と同様である。
【００７６】
図１１は第２の実施形態における、ポストプロセスフィルター（４０５）の処理の流れを示すフローチャートである。Ｓ５０１〜Ｓ５１０の処理は、第１の実施形態におけるポストプロセスフィルター（４０５）の処理Ｓ３０１〜Ｓ３１０と同様である。
【００７７】
Ｓ５１１では、Ｓ５１０で取得した拡張ページ情報（４１０）がバインダー開始属性であるかどうかを判断する。バインダー開始属性である場合は小冊子の始まりであることをプリンターに指示する命令であるバインダーコマンドをフィルターパイプラインマネージャー（４０２）に送信し（Ｓ５１２）、一連のページレベルのオペレーターＢｅｇｉｎＰａｇｅからＥｎｄＰａｇｅまでを送信する（Ｓ５１３）。
バインダー開始属性でない場合は、小冊子の始まりではないということなのでページレベルのオペレーターだけを送信する。
【００７８】
以上、本発明における第２の実施形態では、拡張ページ情報（４１０）をＸＰＳ標準フィルター（４０４）を介さずに送信することによって、分冊の印刷体裁が実現できることを示した。
【符号の説明】
【００７９】
１  ＬＡＮ、１０  ＰＣ、２０  プリンター
【図３】
2016134045.tif 000003
【図９】
2016134045.tif 000004
【図１】
2016134045.tif 000005
【図２】
2016134045.tif 000006
【図４】
2016134045.tif 000007
【図５】
2016134045.tif 000008
【図６】
2016134045.tif 000009
【図７】
2016134045.tif 000010
【図８】
2016134045.tif 000011
【図１０】
2016134045.tif 000012
【図１１】
2016134045.tif 000013