(57)【要約】【課題】印刷データの生成に要する時間を短くする。【解決手段】プリンタドライバは一のフィルタのみを備える。フィルタはプログラムを有する。プログラムは、プリントチケットを解析し、複数のステージで構成されるパイプラインを構築する。一乃至複数のステージにおいて、印刷対象データのコンテントボックスが改変される。コンテントボックスが改変される際に、アフィン変換行列を示すコマンドが生成される（Ｓ２１、Ｓ３１、Ｓ４１）。コマンドは、コマンドスタックにプッシュされる（Ｓ２２、Ｓ３２、Ｓ４２）。プッシュされたコマンドは、ビジュアル要素の改変に用いられる（Ｓ８１）。具体的には、各コマンドが示すアフィン変換行列が互いに乗算されて統合され、統合された統合変換行列が、ビジュアル要素のアフィン変換行列に乗じられて、ビジュアル要素が改変される。【選択図】図３
2019067049.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを備えた情報処理装置によって実行されるプリンタドライバであって、
前記コンピュータに、
描画オブジェクトを示す第１オブジェクトデータと、編集指示データとを含むＸＰＳ形式の印刷対象データを前記情報処理装置にインストールされたＯＳから受け付ける受付処理と、
前記編集指示データに応じた複数の第１コマンドを生成する生成処理と、
前記第１コマンドによって前記第１オブジェクトデータを改変する改変処理と、を実行させ、
前記第１コマンドは、前記第１オブジェクトデータに付与された行列を変換する変換行列をそれぞれ指示しており、
前記改変処理は、複数の前記変換行列を乗じて統合変換行列を生成し、前記統合変換行列を前記第１オブジェクトデータに付与された行列に乗じるプリンタドライバ。
【請求項２】
当該プリンタドライバは、前記受付処理、前記生成処理、及び前記改変処理を実行する第１フィルタを備える請求項１に記載のプリンタドライバ。
【請求項３】
当該プリンタドライバは、前記改変処理で改変されたデータを所定の型式の印刷データに変更する第１変更処理をさらに実行する前記第１フィルタを備える請求項２に記載のプリンタドライバ。
【請求項４】
当該プリンタドライバは、
入力されたデータを所定の形式の印刷データに変更する第２フィルタと、
前記改変処理で改変されたデータを前記第２フィルタが読み込み可能な型式のデータに変更する第２変更処理をさらに実行する前記第１フィルタと、を備える請求項２に記載のプリンタドライバ。
【請求項５】
前記印刷対象データは、印刷可能範囲を示すコンテントボックスデータを含んでおり、
前記生成処理は、前記編集指示データによって前記コンテントボックスデータを改変し、前記コンテントボックスデータの改変に基づいて前記第１コマンドを生成する処理である請求項１から４のいずれかに記載のプリンタドライバ。
【請求項６】
前記生成処理は、
前記コンテントボックスデータが示すコンテントボックスを回転させ、前記コンテントボックスの回転角度に応じた前記変換行列を生成する処理を実行するステージと、
前記コンテントボックスを拡縮させ、前記コンテントボックスの拡縮率に応じた前記変換行列を生成する処理を実行するステージと、
前記印刷対象データが示す複数のページを１ページにまとめ、前記複数のページの前記各コンテントボックスを１ページにまとめる改変に応じた変換行列を生成する処理を実行するステージと、を含み、
一の前記ステージから他の一の前記ステージにデータが受け渡される請求項５に記載のプリンタドライバ。
【請求項７】
前記生成処理は、生成した前記第１コマンドをコマンドスタックにプッシュする処理を含み、
前記改変処理は、前記第１コマンドを前記コマンドスタックからポップし、ポップした前記第１コマンドが示す前記変換行列を乗算して統合する処理を含む請求項６に記載のプリンタドライバ。
【請求項８】
前記生成処理は、
第２オブジェクトデータを追加する前記編集指示データに応じた第２コマンドをさらに生成する処理と、
生成した前記第２コマンドを前記コマンドスタックにプッシュする処理と、を含む請求項７に記載のプリンタドライバ。
【請求項９】
前記受付処理は、ストリーム入力される前記印刷対象データを受け付ける請求項１から８のいずれかに記載のプリンタドライバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンタドライバに関する。
【背景技術】
【０００２】
マイクロソフト（登録商標）社は、ＸＰＳプリンタドライバというアーキテクチャを採用している。ＸＰＳプリンタドライバは、複数のフィルタによって構成されるパイプラインを有する。各フィルタには、それぞれ異なる機能が実装される。具体的には、印刷対象データを拡縮する機能や、印刷対象データを回転させて向きを変える機能である。
【０００３】
プリンタの開発ベンダが、各フィルタを開発することも認められている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−２２５４８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＸＰＳデータは、文字、図形、塗りつぶしなどの描画オブジェクトを示すオブジェクトデータと、オブジェクトデータを対象とした変換を指示する変換指示データとを含んでいる。フィルタは、変換指示データを元に、回転、拡大や縮小、平行移動などの変換処理をオブジェクトデータに対して行う。１つのページを示すＸＰＳデータは、ページを構成する複数のオブジェクト各々を示す複数のオブジェクトデータを含んでいる。オブジェクトデータは行列を含んでいる、変換処理は、描画オブジェクトに含まれる行列に、変換処理に対応する行列を乗算する処理である。そのため、１つのページを対象に複数の変換処理を行うと、Ｎ（描画オブジェクトの数）×Ｍ（変換処理の数）回の行列演算が必要になる。すなわち、変換処理の開始から印刷データの生成までに、多くの時間が必要になる。
【０００６】
本発明は、上記の事情に鑑みてなされたものであり、その目的は、印刷データの生成に要する時間を短くできる手段を提供することにある。
【課題を解決するための手段】
【０００７】
本明細書では様々な開示を行う。開示例の一例であるプリンタドライバは、コンピュータを備えた情報処理装置によって実行される。該プリンタドライバは、前記コンピュータに、描画オブジェクトを示す第１オブジェクトデータと、編集指示データとを含むＸＰＳ形式の印刷対象データを前記情報処理装置にインストールされたＯＳから受け付ける受付処理と、前記編集指示データに応じた複数の第１コマンドを生成する生成処理と、前記第１コマンドによって前記第１オブジェクトデータを改変する改変処理と、を実行させる。前記第１コマンドは、前記第１オブジェクトデータに付与された行列を変換する変換行列をそれぞれ指示する。前記改変処理は、複数の前記変換行列を乗じて統合変換行列を生成し、前記統合変換行列を前記第１オブジェクトデータに付与された行列に乗じる処理である。
【０００８】
上記構成によれば、改変処理において、変換行列を乗じて統合変換行列を生成し、生成した統合変換行列を第１オブジェクトデータに付与された行列に乗じるから、各変換行列によってそれぞれ第１オブジェクトデータを改変するよりも、情報処理装置のＣＰＵの演算回数が低減する。その結果、印刷データの生成時間が短くなる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施形態に係るＰＣ１０の構成図である。
【図２】図２は、ＯＳ３１及びプリンタドライバ２３の処理を説明する図である。
【図３】図３（Ａ）は、第１のステージを示すフローチャートであり、図３（Ｂ）は、第２のステージを示すフローチャートであり、図３（Ｃ）は、第３のステージを示すフローチャートである。
【図４】図４（Ａ）は、第４のステージを示すフローチャートであり、図４（Ｂ）は、Ｎｕｐ処理を示すフローチャートである。
【図５】図５は、最後のステージを示すフローチャートである。
【図６】図６は、改変処理を示すフローチャートである。
【図７】図７は、改変処理の具体的な処理を示すフローチャートである。
【図８】図８は、コンテントボックスの回転を説明する説明図である。
【図９】図９は、Ｎｕｐを説明する説明図である。
【図１０】図１０（Ａ）及び図１０（Ｂ）は、コマンドスタックにプッシュされるコマンドを示す図であり、図１０（Ｃ）〜図１０（Ｊ）は、コマンドが解決される手順を示す説明図である。
【図１１】図１１（Ａ）は、変形例に係るプリンタドライバ６０の構成を示す図であり、図１１（Ｂ）は、変形例に係る最後のステージを説明するフローチャートである。
【発明を実施するための形態】
【００１０】
以下、適宜図面を参照して本発明の実施形態について説明する。なお、以下に説明される実施形態は本発明の一例にすぎず、本発明の要旨を変更しない範囲で、本発明の実施形態を適宜変更できることは言うまでもない。例えば、後述する各処理の実行順序は、本発明の要旨を変更しない範囲で、適宜変更することができる。
【００１１】
図１は、本実施形態のプリンタドライバ３２がインストールされて実行されるＰＣ１０の概略構成図である。ＰＣ１０は、例えば、パーソナルコンピュータである。以下では、主に印刷の実行に必要な構成に限定して説明がされる。ＰＣ１０は、情報処理装置の一例である。
【００１２】
ＰＣ１０は、入力Ｉ／Ｆ２１と、通信Ｉ／Ｆ２２と、ＣＰＵ２３と、メモリ２４と、メインメモリ２５と、バス２６とを備える。
【００１３】
入力Ｉ／Ｆ２１は、有線または無線でユーザＩ／Ｆ１１と接続されている。ユーザＩ／Ｆ１１は、キーボードやマウスである。ユーザＩ／Ｆ１１は、印刷指示や印刷設定などのユーザの指示を受け付ける。ユーザＩ／Ｆ１１を用いて入力されたユーザの指示は、入力Ｉ／Ｆ２１を通じてＰＣ１０に入力される。
【００１４】
通信Ｉ／Ｆ２２は、ＵＳＢケーブルやＬＡＮケーブルを用いてプリンタ１２と接続され、或いは無線ＬＡＮでプリンタ１２と接続され、プリンタ１２と通信を行う。例えば、ＰＣ１０から印刷データがプリンタ１２に入力される。プリンタ１２からは、紙詰まりが発生したことを示す情報などがＰＣ１０に入力される。
【００１５】
また、ＰＣ１０は、演算処理を行うＣＰＵ２３と、後述の種々のプログラムを記憶するメモリ２４と、当該プログラムの実行に用いられるメインメモリ２５とを備える。メモリ２４は、例えば、大容量の記憶が可能なハードディスクである。メインメモリ２５は、例えば、データへのアクセスが速いＤＲＡＭなどのＲＡＭである。
【００１６】
ＣＰＵ２３は、メモリ２４に記憶されたプログラムを実行する。具体的には、メモリ２４に記憶されたプログラムがメインメモリ２５にコピーされた後、ＣＰＵ２３は、プログラムの各アドレスに記述された命令を順に実行する。ＣＰＵ２３は、コンピュータの一例である。
【００１７】
メモリ２４は、オペレーティングシステムであるＯＳ３１と、プリンタドライバ３２と、文書プログラム３３と、画像プログラム３４とを記憶する。
【００１８】
メモリ２４及びメインメモリ２５は、コンピュータが読み取り可能なストレージ媒体であってもよい。コンピュータが読み取り可能なストレージ媒体とは、ｎｏｎ−ｔｒａｎｓｉｔｏｒｙな媒体である。ｎｏｎ−ｔｒａｎｓｉｔｏｒｙな媒体には、上記の例の他に、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等の記録媒体も含まれる。また、ｎｏｎ−ｔｒａｎｓｉｔｏｒｙな媒体は、ｔａｎｇｉｂｌｅな媒体でもある。一方、インターネット上のサーバなどからダウンロードされるプログラムを搬送する電気信号は、コンピュータが読み取り可能な媒体の一種であるコンピュータが読み取り可能なストレージ媒体であるが、ｎｏｎ−ｔｒａｎｓｉｔｏｒｙなコンピュータが読み取り可能なストレージ媒体には含まれない。
【００１９】
文書プログラム３３は、文書の作成を行うプログラムである。画像プログラム３４は、写真などの画像の加工を行うプログラムである。本実施例では、文書プログラム３３や画像プログラム３４のことを、便宜上「編集プログラム」とも記載する。ＰＣ１０のユーザが、作成した文書や画像の印刷をユーザＩ／Ｆ１１を用いて指示すると、編集プログラムは、印刷が指示された文書や画像を示す画像データを印刷対象データとして出力する。印刷対象データは、ＯＳ３１が解釈可能な形式である。また、ユーザＩ／Ｆ１１を介して選択されたプリンタである選択プリンタを示す情報と、ユーザＩ／Ｆ１１を介して入力された印刷設定が、印刷対象データとともに出力される。編集プログラムは、プリンタの選択と印刷設定の入力とを示唆する設定画面をＰＣ１０のディスプレイに表示させ、ユーザＩ／Ｆを介した入力を受け付け、選択プリンタを示す情報と印刷設定ともメモリ２４に記憶させる。
【００２０】
なお、文書プログラム３３や画像プログラム３４の他、表計算プログラムやその他のプログラムが編集プログラムの一例であってもよい。編集プログラムは、選択プリンタに対応するプリンタドライバ３２から印刷設定を取得し、印刷対象データとともに出力してもよい。ＯＳ３１が設定画面を表示させ、ユーザＩ／Ｆ１１を介した入力を受け付けて、選択プリンタを示す情報と印刷設定とをメモリ２４に記憶させてもよい。この場合、ＯＳ３１は、編集プログラムが出力した印刷対象データを取得したときに、メモリ２４から、選択されたプリンタを示す情報と印刷設定とを読み出す。
【００２１】
印刷設定には、例えば、Ａ４やＢ５などの用紙サイズの設定、拡大率や縮小率の設定、ウォーターマークの有無の設定、ポートレイやランドスケープなどの印刷方向の設定、モノクロやカラーなどの印刷色の設定、及びＮｕｐの設定などが含まれる。後述するプリントチケットは、印刷設定から変換されたデータであり、編集指示データの一例である。プリントチケットの例を図９（Ｂ）に示す。図９（Ｂ）に示すプリントチケットは、印刷対象データの全ページを対象として２ｉｎ１が設定されており、１ページ目を対象として、ウォーターマーク有、向きはポートレートが設定されており、２ページ目を対象として、ウォーターマーク無、向きはランドスケープが設定されていることを示している。もちろん、プリントチケットは、これ以外の設定を示していてもよい。例えば、印刷サイズ、両面印刷か片面印刷か、カラーかモノクロか、などを示していてもよい。
【００２２】
なお、基本的には、後述する第１〜第４のステージでコマンドを生成するために必要な情報の全てがプリントチケットに含まれている。例えば、図９（Ｂ）に示すプリントチケットの、１ページ目を対象とした設定は、ウォーターマーク有であることを示す情報だけでなく、テキストデータに基づくウォーターマークであることを示す情報、不図示の”Watermark”というテキストデータそのもの、ウォーターマークの位置、サイズを示す情報なども含まれている。なお、ウォーターマークの位置を示す情報が、後述するコンテントボックス内の相対位置を示していてもよい。この場合、後述するＸＰＳデータ内のコンテントボックスの位置を示す情報もコマンドの生成に用いられる。
【００２３】
ウォーターマークとは、印刷される文字や画像に重ねられる半透明の文字や図形であり、例えば、著作権の存在などを示すために用いられる。
【００２４】
Ｎｕｐとは、２ページや４ページなど複数のページを１枚に集約して印刷することを示す印刷設定であり、Ｎｉｎ１とも称される。
【００２５】
ＯＳ３１は、プリンタドライバ３２や編集プログラムなどの他のプログラムの実行を管理するプログラムであり、例えば、マイクロソフトウインドウズ（登録商標）である。
【００２６】
ＯＳ３１は、編集プログラムが出力した印刷対象データをＸＰＳ（XML Paper Specification）形式の印刷対象データに変更するＤＬＬを有する。また、ＯＳ３１は、編集プログラムが出力した印刷設定からプリントチケットを生成するＤＬＬを有する。また、ＯＳ３１は、ＸＰＳ形式の印刷対象データ及びプリントチケットをＯＰＣ（Open Packaging Conventions）によってパッケージングするＤＬＬを有する。
【００２７】
ＸＰＳは、マイクロソフト（登録商標）により、印刷処理用のファイル形式として開発された型式であり、ＸＡＭＬ（Extensible Application Markup Language）のサブセットである。ＸＡＭＬは、ＸＭＬをベースとしたマークアップ言語である。ＸＰＳ型式のデータは、アフィン変換を行うためのアフィン変換行列を有しており、画質を劣化させることなく画像を拡縮したり回転したりすることができる。
【００２８】
ＸＰＳ形式の印刷対象データは、編集プログラムが出力した印刷対象データをＸＰＳ形式のデータに変更したＸＡＭＬドキュメントである。ＸＰＳ形式の印刷対象データのことをＸＰＳデータとも記載する。ＸＰＳデータは、１ページをFixed Pageというデータ単位で示す示すデータである。すなわち、複数ページを示す印刷対象データは、複数のFixed Pageを含むＸＰＳデータに変換される。Fixed Pageの例を図９（Ａ）に示す。Fixed Pageは、ページの幅を示すPage Width、ページの高さを示すPage Height、ページ内のコンテントボックスを示すContentBox、及びビジュアル要素を有する。図９（Ａ）の例では、１ページ目を示すFixed Pageは、Page Widthが２１０で、Page Heightが２９７である。ContentBoxは、例えば、画像が描画される領域を示し、ページ端からContentBoxの端までの余白を示すMarginや、ContentBoxの幅を示すWidth及びContentBoxの高さを示すHeightのデータを有する。図９（Ａ）の例では、１ページ目のContentBoxは、Marginが幅５、高さ方向５で、Widthが２００で、Heightが２８７である。
【００２９】
ビジュアル要素は、Path要素、Glyphs要素、及びCanvas要素のうち、少なくともいずれかを含む。各ビジュアル要素は、Render Transformとして、アフィン変換行列をそれぞれ有する。アフィン変換行列は、ビジュアル要素の位置や大きさや向きを規定する行列である。すなわち、ビジュアル要素とは、位置や大きさや向きを規定するデータを含む画像データである、とも言える。例えば、ビジュアル要素が有するアフィン変換行列に、縮小を示すアフィン変換行列を乗じることにより、当該ビジュアル要素が縮小され、回転を示すアフィン変換行列を乗じることにより、当該ビジュアル要素が回転される。ビジュアル要素は、描画オブジェクトを示す第１オブジェクトデータの一例であり、アフィン変換行列は、変換行列の一例である。図９（Ａ）は、１ページ目のFixed Pageが「Ａ」という画像を示すビジュアル要素を含み、２ページ目のFixed Pageが「Ｂ」という画像を示すビジュアル要素を含んでいることを示している。なお、「Ａ」「Ｂ」を囲んでいる矩形は、外側がページの範囲を示し、内側がコンテントボックスの範囲を示している。
【００３０】
プリンタドライバ３２は、いわゆるＸＰＳプリンタドライバと称される印刷用のドライバである。プリンタドライバ３２は、フィルタ４１を備える。フィルタ４１は、ＤＬＬである。フィルタ４１は、入力されたＸＰＳ形式の印刷対象データを印刷設定にしたがって改変し、ＰＤＬ形式の印刷データを生成して出力する。すなわち、印刷設定に従った印刷対象データの改変、及び改変された印刷対象データのＰＤＬ形式へのデータ変更は、フィルタ４１のみによって行われる。フィルタ４１は、第１フィルタの一例である。
【００３１】
フィルタ４１は、図６に示される改変処理の実行のために、コマンドがプッシュ及びポップされるコマンドスタック及びビジュアル要素スタックというデータ構造を用いる。
【００３２】
図２を参照して、ＰＣ１０のＯＳ３１及びプリンタドライバ３２が行う処理について説明する。ＯＳ３１は、編集プログラムで作成された文書ファイルや画像ファイル（印刷対象データ）及び印刷設定の入力を受け付けると（Ｓ１１）、前述のＤＬＬを用いて、印刷対象データをＸＰＳ形式の印刷対象データに変更し、また、印刷設定からプリントチケットを生成する（Ｓ１２）。
【００３３】
一方、プリンタドライバ３２は、不図示の入力関数（ＤＬＬ）を用いて、ＯＳ３１が生成したＸＰＳ形式の印刷対象データ及びプリントチケットの入力を受け付ける（Ｓ１３）。ここにおいて、プリンタドライバ３２は、ストリーム入力としてデータを受け付ける。ストリーム入力としてデータを受け付けるか、ＸＰＳ入力としてデータを受け付けるかは、プリンタドライバ３２が指定する入力関数によって決定される。なお、プリンタドライバ３２は、ＸＰＳ入力によってデータを受け付けてもよい。
【００３４】
なお、ＯＳ３１及びプリンタドライバ３２は、いずれもメインメモリ２５上で実行されるから、「ＯＳ３１からプリンタドライバ３２への入力」は、データ処理上のものであり、ユーザＩ／Ｆ１１からＰＣ１０への印刷設定の入力や、ＰＣ１０からプリンタ１２への印刷データの入力における物理的な入力とは相違する。プリンタドライバ３２がＸＰＳ形式の印刷対象データ及びプリントチケットの入力を受け付ける処理は、受付処理の一例である。
【００３５】
なお、本明細書では、基本的に、プログラムに記述された命令に従ったＣＰＵ２３の処理を示す。すなわち、以下の説明における「判断」「抽出」「選択」「算出」「決定」「特定」「取得」「受付」「制御」「設定」等の処理は、ＣＰＵ２３の処理を表している。ＣＰＵ２３による処理は、ＯＳ３１を介したハードウェア制御も含む。なお、「取得」は、要求を必須とはしない概念で用いる。すなわち、ＣＰＵ２３が要求することなくデータを受信するという処理も、「ＣＰＵ２３がデータを取得する」という概念に含まれる。また、本明細書中の「データ」とは、コンピュータに読取可能なビット列で表される。そして、実質的な意味内容が同じでフォーマットが異なるデータは、同一のデータとして扱われるものとする。本明細書中の「情報」についても同様である。また、「命令」「応答」「要求」等の処理は、「命令」「応答」「要求」等を示す情報を通信することにより行われる。また、「命令」「応答」「要求」等の文言を、「命令」「応答」「要求」等を示す情報そのものという意味で記載してもよい。
【００３６】
プリンタドライバ３２は、入力されたＸＰＳ形式の印刷対象データに対して、印刷設定にしたがって印刷対象データを改変し、改変した印刷対象データをＰＤＬ型式の印刷データに変換する（Ｓ１４〜Ｓ１６、及び、図３〜図６の処理）。
【００３７】
プリンタドライバ３２は、ＰＤＬ形式の印刷データの作成後、不図示の出力関数（ＤＬＬ）を用いて、ＰＤＬ形式の印刷データをＯＳ３１へ出力する（Ｓ１７）。ここにおいて、プリンタドライバ３２は、ＸＰＳ出力として印刷データを出力する。ストリーム出力として印刷データを出力するか、ＸＰＳ出力として印刷データを出力するかは、プリンタドライバ３２が指定する出力関数によって決定される。なお、プリンタドライバ３２は、ストリーム出力によってデータを出力してもよい。
【００３８】
一方、ＯＳ３１は、プリンタドライバ３２が出力したＰＤＬ形式の印刷データを、そのままの形式で、或いは、他の形式にデータを変更して、通信Ｉ／Ｆ２２を介してプリンタ１２へ送信する（Ｓ１８）。
【００３９】
プリンタドライバ３２が実行するＳ１４〜Ｓ１６について、図３から図１０を参照して詳しく説明する。
【００４０】
プリンタドライバ３２は、ＸＰＳ形式の印刷対象データ、及びプリントチケットの入力を受け付ける。プリンタドライバ３２は、図３に示される第１のステージ、第２のステージ、第３のステージ、図４に示される第４のステージ、及び図５に示される最後のステージによってパイプラインを構築している。具体的には、プリンタドライバ３２は、不図示のステージマネージャを備えており、ステージマネージャには、第１〜第４のステージの順番でＸＰＳデータをパイプライン処理すること、及び、ＸＰＳデータ全体に対して第１〜第４のステージのパイプライン処理が完了したら、最後のステージによってＸＰＳデータを処理すること、がプログラミングされている。なお、具体的には、ステージマネージャがＸＰＳ形式の印刷対象データ、及びプリントチケットの入力を受け付ける。
【００４１】
ステージマネージャは、パイプライン処理の開始前に、ＸＰＳデータに含まれる各Fixed Pageそれぞれに、コマンドスタック及びビジュアル要素スタックを対応付ける。ステージマネージャは、スタックが対応付けられたFixed Pageを、パイプラインの最初のステージに受け渡す（Ｓ１５）。最初のステージとは、具体的には、第１のステージである。なお、「スタックを対応付ける」とは、スタックをFixed Pageに追加するということも含む概念であってよい。Ｓ１５の処理は、まず、先頭ページのFixed Pageを対象に行われる。ステージマネージャは、Fixed Pageのパイプライン処理が完了すると、次のページのFixed Pageをパイプラインの最初のステージに受け渡す（Ｓ１５）。この処理は、全てのFixed Pageに対してループして実行される（Ｓ１４、Ｓ１６）。詳しくは後述するが、最初のステージに受け渡された印刷対象データは、パイプラインの各ステージで処理される。
【００４２】
図３（Ａ）に示される第１のステージは、印刷対象データにビジュアル要素を追加するステージである。フィルタ４１は、第１のステージにおいて、プリントチケットに、ビジュアル要素の追加が必要となる設定が含まれているかを判断する（Ｓ２１）。ビジュアル要素とは、例えば、ウォーターマークである。フィルタ４１は、ビジュアル要素の追加が必要となる設定が含まれているとＳ２１で判断した場合（Ｓ２１：Ｙｅｓ）、プリントチケットに含まれる情報に従って、ビジュアル要素をFixed Pageに追加するコマンドである追加コマンドを生成し（Ｓ２２）、生成した追加コマンドを、Fixed Pageに対応するコマンドスタックにプッシュする（Ｓ２３）。追加コマンドは、第２コマンドの一例である。
【００４３】
図９（Ｂ）の例では、１ページ目がウォーターマーク有であることを示す情報がプリントチケットに含まれている。そのため、フィルタ４１は、ステージマネージャから１ページ目のFixed Pageが受け渡されたとき（Ｓ２１：Ｙｅｓ）、ウォーターマークをFixed Pageに追加するための追加コマンドを生成する（Ｓ２２）。フィルタ４１は、プリントチケットに含まれる情報に従って、テキスト”Watermark”に基づいた画像データ（ビジュアル要素の一例）を生成する。フィルタ４１は、生成した画像データと、ウォーターマークの位置とサイズとを示す情報を含む追加コマンドを生成する。具体的には、ウォーターマークの位置とサイズとを示す情報が画像データに含まれていてもよい。フィルタ４１は、生成した追加コマンドを１ページ目のコマンドスタックにプッシュする（Ｓ２３）
【００４４】
次に、フィルタ４１は、Fixed Pageをステージマネージャに受け渡す（Ｓ２４）。ステージマネージャは、受け渡されたFixed Pageをパイプラインに従って次のステージに受け渡す。
【００４５】
一方、フィルタ４１は、ビジュアル要素の追加が必要となる設定が含まれていないとＳ２１で判断した場合（Ｓ２１：Ｎｏ）、すなわち、図９（Ｂ）の例では、２ページ目の場合、Ｓ２４の処理に移る。
【００４６】
第２のステージから第４のステージまでは、ContentBoxを改変するステージである。印刷設定に従って、第２のステージから第４のステージまででContentBoxが改変され、ContentBoxの改変の際に、改変に応じた種々のコマンドが生成される。生成されたコマンドにより、最後のステージの改変処理（Ｓ８１）において、ビジュアル要素が改変される。以下、詳しく説明がされる。
【００４７】
図３（Ｂ）に示される第２のステージは、ContentBoxを回転するステージである。フィルタ４１は、第２のステージにおいて、プリントチケットに、ContentBoxの回転が必要となる設定が含まれているか否かを判断する（Ｓ３１）。フィルタ４１は、ContentBoxの回転が必要となる設定が含まれているとＳ３１で判断すると（Ｓ３１：Ｙｅｓ）、プリントチケットに含まれる情報に従って、ContentBoxを回転するコマンドを生成し（Ｓ３２）、生成したコマンドを、Fixed Pageに対応するコマンドスタックにプッシュする（Ｓ３３）。
【００４８】
図９（Ｂ）の例では、２ページ目がポートレートであるため、フィルタ４１は、ステージマネージャから２ページ目のFixed Pageを受け渡されると（Ｓ３１：Ｙｅｓ）、印刷設定に従ってContentBoxを９０度回転する。その際、フィルタ４１は、ContentBoxの回転に応じたコマンドを生成し、生成したコマンドをFixed Pageに対応するコマンドスタックにプッシュする。
【００４９】
次に、フィルタ４１は、Fixed Pageをステージマネージャに受け渡す（Ｓ３４）。ステージマネージャは、受け渡されたFixed Pageをパイプラインに従って次のステージに受け渡す。
【００５０】
一方、フィルタ４１は、ContentBoxの回転が必要となる設定が含まれていないとＳ３１で判断した場合（Ｓ３１：Ｎｏ）、すなわち、図９（Ｂ）の例では、１ページ目の場合、Ｓ３４の処理に移る。
【００５１】
図３（Ｃ）に示される第３のステージは、ContentBoxを拡縮するステージである。フィルタ４１は、第３のステージにおいて、プリントチケットに、ContentBoxの拡縮が必要となる設定が含まれているか否かを判断する（Ｓ４１）。フィルタ４１は、ContentBoxの拡縮が必要となる設定が含まれているとＳ４１で判断すると（Ｓ４１：Ｙｅｓ）、プリントチケットに含まれる情報に従って、ContentBoxを拡縮するコマンドを生成し（Ｓ４２）、生成したコマンドを、Fixed Pageに対応するコマンドスタックにプッシュする（Ｓ４３）。
【００５２】
次に、フィルタ４１は、Fixed Pageをステージマネージャに受け渡す（Ｓ４４）。ステージマネージャは、受け渡されたFixed Pageをパイプラインに従って次のステージに受け渡す。
【００５３】
一方、フィルタ４１は、ContentBoxの拡縮が必要となる設定が含まれていないとＳ４１で判断した場合（Ｓ４１：Ｎｏ）、すなわち、図９（Ｂ）の例では、１ページ目の場合と２ページ目の場合の両方の場合、Ｓ４４の処理に移る。
【００５４】
図４（Ａ）に示される第４のステージは、印刷設定の「Ｎｕｐ」に対応するステージであり、複数のページの各ContentBoxを１ページにまとめるステージである。ステージマネージャは、受け渡されたFixed Pageをメモリ２４に記憶させる（Ｓ５１）。次にステージマネージャは、印刷対象データの全てのFixed PageをＳ５１で記憶させたか否かを判断する（Ｓ５２）。ステージマネージャは、全てのFixed Pageが入力されていないと判断すると（Ｓ５２：Ｎｏ）、Ｎページ分のFixed Pageを記憶したか否かを判断する（Ｓ５３）。ステージマネージャは、Ｎページ分のFixed Pageを記憶していないと判断すると（Ｓ５３：Ｎｏ）、ステージマネージャに、次のFixed Pageを要求する情報を受け渡す。具体的には、ＮＵＬＬを受け渡してもよい。
【００５５】
一方、ステージマネージャは、Ｎページ分のFixed Pageデータを記憶した判断すると（Ｓ５３：Ｙｅｓ）、或いは、印刷対象データの全てのFixed Pageが入力されたと判断すると（Ｓ５２：Ｙｅｓ）、Ｎｕｐ処理を実行する（Ｓ５４）。
【００５６】
図４（Ｂ）を参照して、Ｓ５４のＮｕｐ処理について説明する。まず、ステージマネージャは、印刷設定に従って、１ページ目（以下、第１ページと記載する）のContentBoxの拡縮率（縮小率）を決定し、決定した拡縮率のアフィン変換行列を示すコマンドを生成する（Ｓ６１）。次に、ステージマネージャは、生成したコマンドを第１ページのコマンドスタックにプッシュする（Ｓ６２）。次に、ステージマネージャは、印刷設定に従って、第１ページのContentBoxを移動し、コマンドを生成する（Ｓ６３）。Ｓ６３で生成されるコマンドは、移動のアフィン変換行列を示す。当該アフィン変換行列は、ContentBoxの移動量に応じた移動を示す。すなわち、生成されたコマンドが示すアフィン変換行列が乗じられたビジュアル要素は、ContentBoxの移動量に等しい移動量で移動される。
【００５７】
次に、ステージマネージャは、印刷設定に従って、２ページ目（以下、第２ページと記載する）の拡縮率（縮小率）を決定し、決定した拡縮率のアフィン変換行列を示すコマンドを生成する（Ｓ６６）。なお、以下に説明されるＳ６６〜Ｓ７０の処理は、第２ページ以降の各ページに対してループして行われる（Ｓ６５、Ｓ７１）。すなわち、印刷設定が４ｉｎ１である場合、Ｓ６６〜Ｓ７０の処理は、２〜４ページ目に対してループして実行される。
【００５８】
次に、ステージマネージャは、Ｓ６６で生成したコマンドを、第２ページのコマンドスタックにプッシュする（Ｓ６７）。次に、ステージマネージャは、印刷設定に従って、第２ページのContentBoxを移動し、コマンドを生成する（Ｓ６８）。Ｓ６８で生成されるコマンドは、移動のアフィン変換行列を示す。当該アフィン変換行列は、第２ページのContentBoxの移動量に応じた移動を示す。ステージマネージャは、Ｓ６８で生成したコマンドを第２ページのコマンドスタックにプッシュする（Ｓ６９）。
【００５９】
次に、ステージマネージャは、縮小及び移動した第２ページのContentBoxを第１ページに追加するための追加コマンドを生成する。生成される追加コマンドは、縮小及び移動した第２ページのビジュアル要素を第１ページに追加することを示すコマンドである。ステージマネージャは、生成したコマンドを第１ページのコマンドスタックにプッシュする（Ｓ７０）。
【００６０】
ステージマネージャは、各ページについてＳ６６〜Ｓ７０の処理をループして実行すると、Ｎｕｐ処理を終了する。
【００６１】
図４（Ａ）に示されるように、ステージマネージャは、Ｎｕｐ処理（Ｓ５４）の実行後、パイプラインに従って次のステージにFixed Pageを受け渡す（Ｓ５５）。ステージマネージャは、第４のステージからFixed Pageを受け渡された場合、Fixed Pageをパイプラインに従って最後のステージに受け渡す。一方、ステージマネージャは、第４のステージから次のページのFixed Pageを要求する情報を受け渡された場合、次のページのFixed Pageをパイプラインに従って最初のステージに受け渡す。
【００６２】
図５に示される最後のステージは、他の全てのステージの実行後に実行される。まず、ステージマネージャは、最後のステージにおいて、改変処理を実行する（Ｓ８１）。改変処理は、最後のステージまでの他のステージにおいてコマンドスタックにプッシュしたコマンドを用いてビジュアル要素を改変する処理である。
【００６３】
図６を参照して、改変処理について説明する。以下で説明されるＳ８３からＳ８８の処理は、各ページについて、コマンドが空になるまでループして実行される（Ｓ８２、Ｓ８９）。また、Ｓ８２〜Ｓ９０の処理は、全ページに対してループして実行される（Ｓ８１、Ｓ９１）。
【００６４】
フィルタ４１は、第ｎページのコマンドスタックからコマンドをポップし、ポップしたコマンドの種類を判断する（Ｓ８３）。ｎは自然数である。フィルタ４１は、ポップしたコマンドが、平行移動や回転や拡縮のアフィン変換行列を示す「ｍ」であると判断すると、コマンドが示すアフィン変換行列を統合アフィン変換行列Ａに乗じて新たな統合アフィン変換行列とする（Ｓ８４）。なお、統合アフィン変換行列の初期値は、単位行列Ｅである。
【００６５】
フィルタ４１は、ポップしたコマンドが、ビジュアル要素の追加を示す「ｖ」であると判断すると、コマンドｖ’を生成する（Ｓ８５）。具体的に説明すると、ポップしたコマンドが示すビジュアル要素が有するアフィン変換行列を統合アフィン変換行列に乗じ、乗じて得たアフィン変換行列を有するビジュアル要素を示すコマンドをコマンドｖ’とする。フィルタ４１は、生成したコマンドを第ｎページのビジュアル要素スタックにプッシュする（Ｓ８６）。
【００６６】
フィルタ４１は、ポップしたコマンドが、ページの追加を示す「ｐ」であると判断すると、コマンドｐ’を生成する（Ｓ８７）。具体的に説明すると、ポップしたコマンドが示すページのコマンドスタックからコマンドスタックが空になるまでコマンドをポップして、Ｓ８３〜Ｓ８８の処理を実行する。Ｓ８３〜Ｓ８８の処理を実行することによって得られたビジュアル要素の追加を示すコマンドをコマンドｐ’として生成する。フィルタ４１は、生成したコマンドｐ’を第ｎページのビジュアル要素スタックにプッシュする（Ｓ８８）。
【００６７】
フィルタ４１は、各ページについて、コマンドスタックが空になったと判断すると、ビジュアル要素スタックからコマンドをプッシュし、プッシュしたコマンドが示すビジュアル要素をFixed Pageの末尾に加える（Ｓ９０）。
【００６８】
図５に示されるように、改変処理（Ｓ８１）の終了後、フィルタ４１は、改変処理によって改変されたFixed PageをＰＤＬ（Page Description Language）形式の印刷データに変更する（Ｓ８２）。ＰＤＬ形式は、ＰＣＬ（Printer Control Language）や、ＰＣＬ／ＸＬや、ＥＳＣ／Ｐや、ＰＤＦ（Portable Document Format）やＸＰＳを含む。ステップＳ８２の処理は、第１変更処理の一例である。
【００６９】
フィルタ４１は、ＰＤＬ変更処理（Ｓ８２）によって生成した印刷データを出力し（Ｓ８３）、最後のステージの処理を終了する。
【００７０】
以下、パイプラインの処理及び改変処理によるコマンドスタックの変化について、図９（Ｂ）に示された印刷設定を例に、図７及び図１０を参照して詳しく説明する。
【００７１】
フィルタ４１は、第１のステージが第１ページのFixed Pageを受け取ると、図１０（Ａ）に示されるように、第１ページにウォーターマークを追加するコマンドｖ１を第１ページのコマンドスタックにプッシュする。
【００７２】
次に、フィルタ４１は、第２のステージが第１ページのFixed Pageを受け取ると、第１ページに対しては回転を行わないと判断する。すなわち、第１ページの第２のステージにおいては、コマンドは生成されない。
【００７３】
次に、フィルタ４１は、第３のステージが第１ページのFixed Pageを受け取ると、第１ページに対しては拡縮を行わないと判断する。すなわち、第１ページの第３のステージにおいては、コマンドは生成されない。
【００７４】
次に、フィルタ４１は、第４のステージが第１ページのFixed Pageを受け取ると、図１０（Ａ）に示されるように、コマンドｍ３、ｍ４を生成し、第１ページのコマンドスタックにプッシュする。コマンドｍ３は、縮小のアフィン変換行列を示すコマンドである。当該アフィン変換行列は、図９（Ａ）に示される第１ページのContentBoxを図９（Ｃ）に示されるContentBoxの大きさに縮小する行列である。コマンドｍ４は、平行移動のアフィン変換行列を示すコマンドである。当該アフィン変換行列は、図９（Ａ）に示される第１ページのContentBoxを図９（Ｃ）に示されるContentBoxの位置に移動する行列である。
【００７５】
次に、フィルタ４１は、図１０（Ａ）に示されるように、第２ページのビジュアル要素を第１ページに追加する追加コマンドｐ２を生成し、第１ページのコマンドスタックにプッシュする。
【００７６】
第１ページについて、第１のステージから第４のステージが実行されることにより、図１０（Ｂ）に示されるように、第１ページのコマンドスタックに、コマンドｖ１、コマンドｍ３、コマンドｍ４、コマンドｐ２が順にプッシュされる。
【００７７】
一方、フィルタ４１は、第１のステージが第２ページのFixed Pageを受け取ると、第２ページについてはウォーターマークを追加しないと判断する。すなわち、第２ページの第１のステージにおいては、コマンドは生成されない。
【００７８】
次に、フィルタ４１は、第２のステージが第２ページのFixed Pageを受け取ると、コマンドｍ１及びコマンドｍ２を生成し、第２ページのコマンドスタックにプッシュする。コマンドｍ１は、図９（Ａ）に示される第２ページのContentBoxを図９（Ｃ）に示されるContentBoxの向きに回転させる行列である。すなわち、コマンドｍ１は、９０度回転のアフィン変換行列を示すコマンドである。
【００７９】
コマンドｍ２は、平行移動のアフィン変換行列を示すコマンドである。図８を参照して詳しく説明する。図８（Ａ）は、画像の初期状態を示している。図８（Ｂ）は、ContentBoxのWidth（２００）とHeight（２８７）とを入れ替えてContentBoxを９０度回転させた状態を示している。図８（Ｃ）は、ビジュアル要素「Ｂ」を９０度回転させた後の状態を示している。図８（Ｃ）に示されるように、ビジュアル要素「Ｂ」を９０度回転させると、ビジュアル要素「Ｂ」とContentBoxとの相対位置がずれる。コマンドｍ２は、ビジュアル要素「Ｂ」を図８（Ｄ）に示される適正位置に、ｘ軸方向に平行移動させるアフィン変換行列を示す。平行移動量は、印刷対象データが有するPage Width（２１０）である。
【００８０】
フィルタ４１は、第３のステージが第２ページのFixed Pageデータを受け取ると、第２ページについては拡縮しないと判断する。すなわち、第２ページの第３のステージにおいては、コマンドは生成されない。
【００８１】
次に、フィルタ４１は、第４のステージが第２ページのFixed Pageを受け取ると、図１０（Ａ）に示されるように、コマンドｍ５、ｍ６を生成し、第１ページのコマンドスタックにプッシュする。コマンドｍ５は、縮小のアフィン変換行列を示すコマンドである。当該アフィン変換行列は、図９（Ａ）に示される第２ページのContentBoxを図９（Ｃ）に示されるContentBoxの大きさに縮小する行列である。コマンドｍ６は、平行移動のアフィン変換行列を示すコマンドである。当該アフィン変換行列は、図９（Ａ）に示される第２ページのContentBoxを図９（Ｃ）に示されるContentBoxの位置に移動する行列である。
【００８２】
第２ページについて、第１のステージから第４のステージが実行されることにより、図１０（Ｂ）に示されるように、第２ページのコマンドスタックに、コマンドｍ１、コマンドｍ２、コマンドｍ５、コマンドｍ６が順にプッシュされる。
【００８３】
次に、改変処理おけるコマンドの解決について、図７及び図１０を参照して説明する。フィルタ４１は、図１０（Ｃ）に示されるように、第１ページのコマンドスタックからコマンドｐ２をポップする（Ｓ１０１）。コマンドｐ２の解決に当たり、フィルタ４１は、図１０（Ｃ）及び図１０（Ｄ）に示されるように、第２ページのコマンドスタックからコマンドｍ６、ｍ５、ｍ２、ｍ１を順にポップして解決する。
【００８４】
詳しく説明すると、フィルタ４１は、コマンドｍ６をポップし（Ｓ１０２）、ポップしたコマンドｍ６が示すアフィン変換行列Ｍ６を、第２ページの統合アフィン変換行列Ａ２とする（Ｓ１０３）。具体的には、単位行列Ｅ（初期値）であった統合アフィン変換行列Ａ２にアフィン変換行列Ｍ６を乗じて新たな統合アフィン変換行列Ａ２（＝Ｍ６）とする。次に、フィルタ４１は、コマンドｍ５をポップし（Ｓ１０４）、ポップしたコマンドｍ５が示すアフィン変換行列Ｍ５を統合アフィン変換行列Ａ２に乗じて新たな統合アフィン変換行列Ａ２（＝Ｍ６×Ｍ５）とする（Ｓ１０５）。次に、フィルタ４１は、コマンドｍ２をポップし（Ｓ１０６）、ポップしたコマンドｍ２が示すアフィン変換行列Ｍ２を統合アフィン変換行列Ａ２に乗じて新たな統合アフィン変換行列Ａ２（＝Ｍ６×Ｍ５×Ｍ２）とする（Ｓ１０７）。次に、フィルタ４１は、コマンドｍ１をポップし（Ｓ１０８）、ポップしたコマンドｍ１が示すアフィン変換行列Ｍ１を統合アフィン変換行列Ａ２に乗じて新たな統合アフィン変換行列Ａ２（＝Ｍ６×Ｍ５×Ｍ２×Ｍ１）とする（Ｓ１０９）。
【００８５】
次に、フィルタ４１は、第２ページのコマンドスタックが空になったことにより、図１０（Ｄ）に示されるように、統合アフィン変換行列Ａ２に、第２ページの各ビジュアル要素がそれぞれ有する各アフィン変換行列を乗じる（Ｓ１１０）。フィルタ４１は、乗じて得た各ビジュアル要素を示すコマンドｐ２’を、図１０（Ｅ）に示されるように、第１ページのビジュアル要素スタックにプッシュする（Ｓ１１１）。
【００８６】
フィルタ４１は、コマンドｐ２を解決した後、図１０（Ｆ）及び図１０（Ｇ）に示されるように、コマンドｍ４をポップして解決し、次いでコマンドｍ３をポップして解決する。詳しく説明すると、フィルタ４１は、コマンドｍ４をポップし（Ｓ１１２）、コマンドｍ４が示すアフィン変換行列Ｍ４を第１ページの統合アフィン変換行列Ａ１とする（Ｓ１１３）。具体的には、単位行列Ｅ（初期値）であった統合アフィン変換行列Ａ１にアフィン変換行列Ｍ４を乗じて新たな統合アフィン変換行列Ａ１（＝Ｍ４）とする。次に、フィルタ４１は、コマンドｍ３をポップし（Ｓ１１４）、コマンドｍ３が示すアフィン変換行列Ｍ３を第１ページの統合アフィン変換行列Ａ１に乗じて新たな統合アフィン変換行列Ａ１（＝Ｍ４×Ｍ３）とする（Ｓ１１５）。
【００８７】
次に、フィルタ４１は、図１０（Ｈ）に示されるように、第１ページのコマンドスタックからコマンドｖ１をポップし（Ｓ１１６）、ポップしたコマンドｖ１を解決する。具体的には、フィルタ４１は、図１０（Ｉ）及び図１０（Ｊ）に示されるように、第１ページの統合アフィン変換行列Ａ１に、コマンドｖ１が示すビジュアル要素が有するアフィン変換行列を乗じ、乗じて得られた行列を示すコマンドｖ１’を、第１ページのビジュアル要素スタックにプッシュする（Ｓ１１７）。
【００８８】
フィルタ４１は、第１ページのコマンドスタックが空になったことにより、第１ページのビジュアル要素スタックからコマンドｖ１’をポップし、コマンドｖ１’が示すビジュアル要素を第１ページのFixed Pageデータの末尾に追加する（Ｓ１１９）。
【００８９】
次に、フィルタ４１は、第１ページのビジュアル要素スタックからコマンドｐ２’をポップし（Ｓ１２０）、ポップしたコマンドｐ２’が示すビジュアル要素を第１ページのFixed Pageデータの末尾に追加する（Ｓ１２１）。
【００９０】
アフィン変換行列Ｍ１、Ｍ２、Ｍ３、Ｍ４、Ｍ５、Ｍ６は、変換行列の一例である。統合アフィン変換行列Ａ１、Ａ２は、統合変換行列の一例である。アフィン変換行列Ｍ１、Ｍ２、Ｍ３、Ｍ４、Ｍ５、Ｍ６を示すコマンドは、第１コマンドの一例である。
【００９１】
[実施形態の効果]
上述の実施形態では、アフィン変換行列を乗じて統合アフィン変換行列を生成するから、各アフィン変換行列によってビジュアル要素をそれぞれ改変するよりも、ＰＣ１０のＣＰＵ２３の演算回数が低減する。その結果、印刷データの生成時間が短くなる。
【００９２】
また、受け付けた印刷対象データからＰＤＬ形式の印刷データを出力するまでの処理がフィルタ４１のみで実行されるから、複数のフィルタで構成される従来のプリンタドライバに比べ、印刷データの生成時間が短くなる。詳しく説明すると、複数のフィルタ（ＤＬＬ）で構成される従来のプインタドライバでは、一のフィルタから他のフィルタにデータを受け渡す際に、ＸＰＳ形式やバイナリデータに変更する必要がある。そうすると、各フィルタにおいて、入力時及び出力時にデータの形式の変更を行う必要が生じる。また、各フィルタにおけるデータの入出力がストリーム入力及びストリーム出力であると、各フィルタにおいて、データの変更（シリアライス及びデシリアライズ）が必要になる。本実施形態では、受け付けた印刷対象データからＰＤＬ形式の印刷データを出力するまでの処理がフィルタ４１のみで実行されるから、複数のフィルタで構成される従来のプリンタドライバに比べ、前述のデータの変更を行わない分だけＣＰＵ２３の演算回数が低減する。その結果、印刷データの生成時間が短くなる。
【００９３】
なお、本実施形態では、フィルタ４１のみによって、受け付けた印刷対象データからＰＤＬ形式の印刷データを出力するまでの処理が実行されるから、フィルタ４１がストリーム入力によって印刷対象データを受け付けても（Ｓ１３）、１回のデシリアライズだけで印刷データを出力することができる。
【００９４】
また、ビジュアル要素の改変を行う前に、ビジュアル要素よりもデータ量の小さなコンテントボックスの改変を行ってアフィン変換行列及びコマンドを生成するから、ビジュアル要素の改変に必要なコマンド及びアフィン変換行列をＣＰＵ２３の少ない演算回数で生成することができる。その結果、印刷データの生成時間がさらに短くなる。
【００９５】
また、生成されたコマンドはコマンドスタックにプッシュされるから、順序を規定しつつコマンドを保存することができる。その結果、改変処理において、コマンドスタックからコマンドをポップし、コマンドが指示するアフィン変換行列を統合して統合アフィン変換行列を生成することができる。
【００９６】
また、ウォーターマークを追加する改変は、ビジュアル要素の改変とともに実行されるから、ウォーターマークを追加する改変を元のビジュアル要素の改変とは別に実行する場合に比べ、ＣＰＵの演算回数が低減する。その結果、印刷データの生成時間がさらに短くなる。
【００９７】
[変形例]
上述の実施形態では、フィルタ４１のみを備えるプリンタドライバ３２が説明された。本変形例では、図１１（Ａ）に示されるように、第１フィルタ６１及び第２フィルタ６２の２つのフィルタを備えるプリンタドライバ６０が説明される。なお、実施形態と同一の構成には同一の符号が付されて説明が省略される。
【００９８】
プリンタドライバ６０は、第１フィルタ６１と、第２フィルタ６２とを備える。第２フィルタ６２は、いわゆるＰＤＬコンバータである。第２フィルタ６２には、例えば、既存のＰＤＬコンバータが流用される。
【００９９】
第２フィルタ６２は、図５に示される最後のステージの処理に代えて、図１１（Ｂ）に示される最後のステージの処理を実行する。第１フィルタ６１は、改変処理（Ｓ８１）を実行した後、Fixed Pageを第２フィルタ６２が受け取り可能な形式のデータに変更する変更処理を実行する（Ｓ１２０）。第２フィルタ６２が受け取り可能な形式とは、ＸＰＳ形式またはバイナリデータである。ステップＳ１２０の変更処理は、第２変更処理の一例である。その後、第１フィルタ６１は、変更したFixed Pageを出力し（Ｓ１２１）、第２フィルタ６２に受け渡す。なお、第１フィルタ６１の出力は、ストリーム出力であってもよいし、ＸＰＳ出力であってもよい。
【０１００】
第１フィルタ６１で改変されたFixed Pageを受け取った第２フィルタ６２は、ＰＤＬ変更処理を実行し（Ｓ８２）、ＰＤＬ形式の印刷データを出力する（Ｓ８３）。
【０１０１】
本変形例では、既存のＰＤＬコンバータを流用することができるから、第１フィルタ６１のプログラミングが容易になる。
【０１０２】
[損他の変形例]
上述の実施形態では、予め定められたパイプラインが構築される例が説明された。しかしながら、フィルタ４１のステージマネージャは、プリントチケット（印刷設定）に応じたパイプラインを構築してもよい。具体的には、プリントチケットに、そのステージによるコマンド生成が必要となる設定がされているステージをパイプラインに追加する。例えば、図９（Ｂ）に示されるプリントチケットの場合、ステージマネージャは、図３に示される第１のステージ、第２のステージ、及び図４に示される第４のステージをパイプラインに追加する。また、ステージマネージャは、最後のステージが必ず最後に実行されるようにパイプラインを構築する。
【０１０３】
印刷設定に応じてパイプラインが構築されるから、不要な処理が省かれる。その結果、印刷データの生成時間がさらに短くなる。
【符号の説明】
【０１０４】
１０・・・ＰＣ
２３・・・ＣＰＵ
３１・・・ＯＳ
４１・・・フィルタ
６１・・・第１フィルタ
６２・・・第２フィルタ
【図１】
2019067049.tif 000003
【図２】
2019067049.tif 000004
【図３】
2019067049.tif 000005
【図４】
2019067049.tif 000006
【図５】
2019067049.tif 000007
【図６】
2019067049.tif 000008
【図７】
2019067049.tif 000009
【図８】
2019067049.tif 000010
【図９】
2019067049.tif 000011
【図１０】
2019067049.tif 000012
【図１１】
2019067049.tif 000013