(57)【特許請求の範囲】
【請求項１】
文書データの構成情報が記述されたページ構成データのファイル、前記ページ構成データのファイルに記述された構成情報に従って参照される印刷対象となるページ情報が記述された印刷対象データのファイルがアーカイブされたアーカイブデータを入力する入力手段と、
前記入力されたアーカイブデータを伸長する伸張手段と、
印刷設定を示す印刷設定情報を取得する印刷設定情報取得手段と、
前記アーカイブデータを前記取得した印刷設定情報に応じた印刷順で受信しながら印刷装置で印刷準備を可能にするべく、前記伸長されたデータの前記ページ構成データのファイルに示される構成情報の前記印刷対象データのファイルを参照するための参照情報を前記印刷設定情報に従って変更する変更手段と、
前記変更された参照情報に従って参照される前記印刷対象データのファイルを、前記印刷設定に応じた印刷順で印刷装置が受信可能なように並べ替え、当該印刷対象データの各ファイルの前に前記ページ構成データのファイルを配置したアーカイブデータを生成する印刷データ生成手段とを備えることを特徴とする情報処理装置。
【請求項２】
前記印刷設定情報は、製本印刷または逆順印刷であることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記印刷設定情報取得手段で取得した印刷設定情報が逆順印刷であった場合、前記変更手段は、前記入力手段で入力された前記印刷対象データのファイルが逆順印刷となるように前記参照情報を変更することを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記印刷設定情報取得手段で取得した印刷設定情報が製本印刷であった場合、印刷対象となるファイルを追加するか否かを決定するファイル追加決定手段と、
前記ファイル追加決定手段で追加すると決定された場合、前記印刷対象となるファイルを作成する第１のファイル作成手段と、
前記印刷対象となるファイルを参照するための参照情報を含む構成情報が記述されたページ構成データのファイルを作成する第２のファイル作成手段とをさらに備え、
前記変更手段は、前記第１のファイル作成手段で作成された前記印刷対象となるファイルと、前記入力手段で入力された前記印刷対象データのファイルと、前記第２のファイル作成手段で作成された前記印刷対象となるファイルを参照するための参照情報を含む構成情報が記述されたページ構成データのファイルとを用いて、製本印刷となるように前記参照情報を変更することを特徴とする請求項２記載の情報処理装置。
【請求項５】
前記第１のファイル作成手段で作成する印刷対象となるファイルの数を算出する算出手段をさらに備え、
前記第１のファイル作成手段は、前記算出手段で算出されたファイル数分の白紙の印刷対象データのファイルを作成することを特徴とする請求項４記載の情報処理装置。
【請求項６】
少なくとも前記ページ構成データのファイルを複数のファイルに分割する分割手段をさらに備え、
前記印刷データ生成手段は、前記分割手段で分割されたページ構成データのファイル及び前記印刷対象データのファイルを並び替えてアーカイブデータを生成することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記分割手段は、印刷対象データのファイルを分割し、
前記印刷データ生成手段で並び替える印刷対象データは、前記分割手段で分割された印刷対象データのファイルであることを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記変更手段で変更される前記参照情報は、前記ページ構成データのファイルの構成情報に示される前記印刷対象データのファイルのパスであることを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
前記ページ構成データのファイルに示される構成情報の参照情報は、印刷対象となるファイルのファイル名であり、
前記変更手段は、印刷対象となるファイルのファイル名の添え字を変更することを特徴とする請求項１乃至８のいずれか１項に記載の情報処理装置。
【請求項１０】
印刷装置へアーカイブデータを送信する情報処理装置の処理方法において、
文書データの構成情報が記述されたページ構成データのファイル、前記ページ構成データのファイルに記述された構成情報に従って参照される印刷対象となるページ情報が記述された印刷対象データのファイルがアーカイブされたアーカイブデータを入力する入力工程と、
前記入力されたアーカイブデータを伸長する伸張工程と、
印刷設定を示す印刷設定情報を取得する印刷設定情報取得工程と、
前記アーカイブデータを前記取得した印刷設定情報に応じた印刷順で受信しながら印刷装置で印刷準備を可能にするべく、前記伸長されたデータの前記ページ構成データのファイルに示される構成情報の前記印刷対象データのファイルを参照するための参照情報を前記印刷設定情報に従って変更する変更工程と、
前記変更された参照情報に従って参照される前記印刷対象データのファイルを、前記印刷設定に応じた印刷順で印刷装置が受信可能なように並べ替え、当該印刷対象データの各ファイルの前に前記ページ構成データのファイルを配置したアーカイブデータを生成する印刷データ生成工程とを備えることを特徴とする印刷制御方法。
【請求項１１】
印刷装置へアーカイブデータを送信する情報処理装置で実行可能なプログラムであって、
前記情報処理装置を、
文書データの構成情報が記述されたページ構成データのファイル、前記ページ構成データのファイルに記述された構成情報に従って参照される印刷対象となるページ情報が記述された印刷対象データのファイルがアーカイブされたアーカイブデータを入力する入力手段と、
前記入力されたアーカイブデータを伸長する伸張手段と、
印刷設定を示す印刷設定情報を取得する印刷設定情報取得手段と、
前記アーカイブデータを前記取得した印刷設定情報に応じた印刷順で受信しながら印刷装置で印刷準備を可能にするべく、前記伸長されたデータの前記ページ構成データのファイルに示される構成情報の前記印刷対象データのファイルを参照するための参照情報を前記印刷設定情報に従って変更する変更手段と、
前記変更された参照情報に従って参照される前記印刷対象データのファイルを、前記印刷設定に応じた印刷順で印刷装置が受信可能なように並べ替え、当該印刷対象データの各ファイルの前に前記ページ構成データのファイルを配置したアーカイブデータを生成する印刷データ生成手段として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び処理方法、並びにプログラムに関し、特に、パーソナルコンピュータ等の情報処理装置とプリンタ等の印刷装置とからなるシステムにおける情報処理装置及び処理方法、並びにプログラムに関する。
【背景技術】
【０００２】
パーソナルコンピュータ等の情報処理装置には、キーボード入力や画像出力といった入出力機能、ディスクやメモリの管理機能などの多くのアプリケーションソフト（以下、単に「アプリケーション」と呼ぶ。）により共通して利用される基本的な機能を提供し、情報処理装置全体を管理するソフトウェアであるオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：ＯＳ）が搭載されている。例えば、Ｍｉｃｒｏｓｏｆｔ社製のＷｉｎｄｏｗｓ(登録商標)  ＸＰ、Ｗｉｎｄｏｗｓ（登録商標）  ２０００やＷｉｎｄｏｗｓ（登録商標）  Ｖｉｓｔａなどが挙げられる。
【０００３】
このような情報処理装置を用いてユーザが各種文書を閲覧できるように様々な文書ファイルフォーマットが存在するが、その一つにＸＭＬ  Ｐａｐｅｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＸＰＳ）という文書ファイルフォーマットがある。上述のＷｉｎｄｏｗｓ(登録商標)  Ｖｉｓｔａでは、ＸＰＳが文書ファイルフォーマットとしてのみでなく印刷スプールファイルのフォーマットとして利用され、さらにページ記述言語（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ：ＰＤＬ）のフォーマットとしても利用され得る。ＸＰＳのフォーマットに従ったデータをＸＰＳデータ、データがＸＰＳ形式のファイルをＸＰＳファイルと呼ぶ。
【０００４】
ところで、情報処理装置とプリンタなどの印刷装置とからなるシステムにおいて印刷を実施する場合、通常、情報処理装置内のアプリケーションがユーザからの印刷実行命令を受けると、当該アプリケーションが起動しているＯＳ及びＯＳが提供する印刷システムに応じた印刷命令の発行処理を行う。例えば、Ｗｉｎｄｏｗｓ(登録商標)  ＸＰやＷｉｎｄｏｗｓ(登録商標)  ２０００などのＯＳ上で起動しているアプリケーションは、ＯＳが提供するＧＤＩ（Ｇｒａｐｈｉｃｓ  Ｄｅｖｉｃｅ  Ｉｎｔｅｒｆａｃｅ）プリントパスと呼ばれる印刷システムの形式に従って印刷命令を発行している。
【０００５】
一方、Ｗｉｎｄｏｗｓ(登録商標)  Ｖｉｓｔａにおいては、前述したＧＤＩプリントパスに加えて、ＸＰＳプリントパスと呼ばれる印刷システムが新たに提供されている。ＧＤＩプリントパス、ＸＰＳプリントパスの詳細については後述する。
【０００６】
ここで、ＸＰＳデータのフォーマットについて説明する。
【０００７】
ＸＰＳデータは、複数のファイルがＺＩＰ圧縮形式で圧縮されて一つのファイルにアーカイブされたアーカイブデータである。アーカイブされるファイルは、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）ファイル、ＪＰＥＧ（Ｊｏｉｎｔ  Ｐｈｏｔｏｇｒａｐｈｉｃ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）ファイル、ＰＮＧ（Ｐｏｒｔａｂｌｅ  Ｎｅｔｗｏｒｋ  Ｇｒａｐｈｉｃｓ）ファイル、ＴＩＦＦ（Ｔａｇｇｅｄ  Ｉｍａｇｅ  Ｆｉｌｅ  Ｆｏｒｍａｔ）ファイル、ＨＤ  Ｐｈｏｔｏファイル、及びフォントファイルなどである。
【０００８】
ＸＭＬファイルには、ＸＰＳ文書のページ構成を定義する各種情報がＸＭＬ形式で記述される。なお、記述される情報毎に複数のＸＭＬファイルに分割されている。ＸＰＳでは、一つのＸＰＳ文書は幾つかの括りに分割されて構成されているものと考えられている。すなわち、一つのＸＰＳ文書は一つ若しくは複数のドキュメントという括りから成り、一つのドキュメントは一つ若しくは複数のページという括りから成る。また、ＪＰＥＧ、ＰＮＧ、ＴＩＦＦ、ＨＤ  Ｐｈｏｔｏは各々イメージを表現するためのフォーマットであり、これらのファイルを総称してイメージファイルと呼ぶ。ＸＰＳデータには、一つのＸＰＳ文書を構成するのに必要な数のイメージファイルやフォントファイルが包含される。また、これらのＸＰＳデータに包含されるファイルを各々パーツデータと呼ぶ。つまり、一つのＸＰＳデータには、複数のパーツデータが包含されている。ＸＰＳデータの構成例を図４に示す。
【０００９】
ＸＰＳデータに包含された各パーツデータは他のパーツデータへの参照タグを有する。この参照タグにより、ＸＰＳデータ内の全パーツデータが関係性を持つ一つの文書情報として形成されている。ＸＰＳデータには、イメージファイル８０８，８０９やフォントファイル８０７の他に、例えば、以下のような複数種類のパーツデータが包含され、各々が以下のような参照タグを有する。
【００１０】
ａ）＿ｒｅｌｓ／．ｒｅｌｓ８０１：文書データの開始点となるパーツデータである。後述するＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ（以下、「ＦＤＳ」と略す。）への参照タグを有する。
【００１１】
ｂ）ＦＤＳ８１０：一つの文書データの構成情報が記述されるパーツデータである。後述するＦｉｘｅｄＤｏｃｕｍｅｎｔ（以下、「ＦＤ」と略す。）への参照タグを有する。なお、一つのデータは複数のドキュメントを有する場合がある。つまり、ＦＤＳは、複数のＦＤへの参照タグを有する場合がある。
【００１２】
ｃ）ＦＤ８０４，８０６：一つのドキュメントの構成情報が記述されるパーツデータである。ＦｉｘｅｄＰａｇｅ（以下、「ＦＰ」と略す。）への参照タグを有する。なお、一つのドキュメントは複数のページを有する場合がある。つまり、ＦＤは、複数のＦＰへの参照タグを有する場合がある。
【００１３】
ｄ）ＦＰ８０２，８０３，８０５：一つのページ情報が記述されるパーツデータである。必要に応じて、イメージファイル８０８，８０９やフォントファイル８０７への参照タグを有する。例えば、当該ページにイメージの描画が存在する場合は、当該イメージファイルへの参照タグを有することになる。
【００１４】
図５は、図４のＸＰＳデータにおけるパーツ間の参照関係の論理的構造の一例を示す参考図であり、図６は、パーツデータのＸＭＬファイルの記述に基づいたパーツ間の参照関係の一例を示す参考図である。
【００１５】
図示では、＿ｒｅｌｓ／．ｒｅｌｓ８０１はＦＤＳ８１０を参照し、ＦＤＳ８１０はＦＤ８０４，８０６を参照し、ＦＤ８０４はＦＰ８０２，８０３を参照し、ＦＤ８０６はＦＰ８０５を参照し、ＦＰ８０２はイメージファイル８０８及びフォントファイル８０７を参照し、ＦＰ８０３はイメージファイル８０９を参照し、ＦＰ８０５はイメージファイル８０９を参照している。
【００１６】
次に、ＸＰＳデータを構成するＺＩＰ圧縮形式で圧縮（以下、「ＺＩＰ圧縮」と呼ぶ。）されたデータについて図７を参照して説明する。
【００１７】
図７は、ＸＰＳデータを構成するＺＩＰ圧縮形式で圧縮されたデータの構成例を示す参考図である。
【００１８】
ＺＩＰ圧縮されたデータには、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ６０１やファイルデータ６０２と呼ばれるデータ部分が存在する。図示のように、ファイルデータ６０２の直前には、必ずＬｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ６０１が存在し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ６０１とファイルデータ６０２の組によって伸張データの一つのファイルの情報が構成される。言い換えると、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ６０１とファイルデータ６０２の一組によって伸張データの一つのファイルを伸張することができる。以下、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ６０１とファイルデータ６０２の組み合わせをファイルデータ部と呼ぶ。伸張データに複数のファイルが存在する場合には、ファイルデータ部が複数組列挙される。
【００１９】
ＺＩＰ圧縮では、伸張データ時のディレクトリ構成を保持したままの圧縮が可能である。しかし、あるファイルが伸張データ時のディレクトリ構成では上位の階層に存在したとしても、圧縮データ時に当該ファイルを構成するファイルデータ部がデータの前方にあるとは限らない。言い換えると、伸張データ時のディレクトリ構成上の階層位置と圧縮データ時のファイルデータ部の位置に関連性はない。
【００２０】
Ｗｉｎｄｏｗｓ(登録商標)  Ｖｉｓｔａでは、ＸＰＳが文書ファイルフォーマットや印刷スプールファイルのみでなくＰＤＬのフォーマットとして利用できるが、ＸＰＳをＰＤＬとして利用する場合、例えば、ＺＩＰ圧縮されたデータが情報処理装置からネットワークを介して印刷装置に送信される。なお、送信されるデータは全てが一括で送られるのではなく、幾つかに分割されて印刷装置に送られるのが一般的である。その後、印刷装置は、データを受信する処理を行った後、印刷処理を実施するために受信したデータ（ＸＰＳデータ）を解析する処理を行う。なお、印刷装置は、通常、データ受信処理と既に受信済みのＸＰＳデータの解析処理とを並行して行うことが可能である。
【００２１】
Ｗｉｎｄｏｗｓ(登録商標)  Ｖｉｓｔａの機能の一つとして、Ｍｉｃｒｏｓｏｆｔ  ＸＰＳ  Ｄｏｃｕｍｅｎｔ  Ｗｒｉｔｅｒ（ＭＸＤＷ）なるＸＰＳファイルを生成するためのアプリケーションが存在する。ＭＸＤＷによってＸＰＳファイルが生成された場合、通常は、上述した＿ｒｅｌｓ／．ｒｅｌｓの情報を有するファイルデータ部、ＦＤＳの情報を有するファイルデータ部、ＦＤの情報を有するファイルデータ部、及びＦＰの情報を有するファイルデータ部のデータは各々、図８に示すように、ＦＰ８０２，８０３，８０５→ＦＤ８０４，８０６→ＦＤＳ８１０→＿ｒｅｌｓ／．ｒｅｌｓ８０１の順序に並んで構成される。この順序をデータ順と呼ぶ。
【００２２】
ＸＰＳをＰＤＬのフォーマットとして利用する場合、前述した通り、ＸＰＳデータは幾つかに分割されて印刷装置に送信されるが、データ順に並んだＸＰＳデータは、送信開始後、ＦＰ、ＦＤ、ＦＤＳの情報を有するファイルデータ部が全て送信された後に、＿ｒｅｌｓ／．ｒｅｌｓの情報を有するファイルデータ部が印刷装置に送信される。前述した通り、＿ｒｅｌｓ／．ｒｅｌｓはＸＰＳ文書の開始点となるパーツデータであるため、印刷装置は＿ｒｅｌｓ／．ｒｅｌｓの情報を有するファイルデータ部を受信するまでＸＰＳデータの解析を開始できない。その結果、印刷装置は、ＸＰＳデータの受信処理とＸＰＳデータの解析処理と並行して行うことができず、全体としての印刷スループットが低下してしまう。
【００２３】
仮に、ＸＰＳデータの先頭に＿ｒｅｌｓ／．ｒｅｌｓの情報を有するファイルデータ部があったとしても、次に参照すべきＦＤＳの情報を有するファイルデータ部がＸＰＳデータの最後尾等にあるようなデータ順であった場合には、印刷装置は当該ファイルデータ部を受信するまでＸＰＳデータの解析処理を中断せざるを得ず、同様に、全体としての印刷スループットが低下してしまう。
【００２４】
ところで、ＸＰＳには、一つのパーツデータを複数のパーツデータに分割するインタリーブと呼ばれる仕様が存在する（非特許文献１参照）。
【００２５】
この仕様に即したＸＰＳデータをインタリーブデータ、通常のＸＰＳデータをインタリーブの仕様に即したデータに変換することをインタリーブ化と呼ぶ。例えば、図６に示すＸＰＳデータを、図９に示すインタリーブデータのように、インタリーブ化することができる。図９のインタリーブデータでは、次のパーツデータへの参照タグが存在するところまでで各パーツデータが分割されている。インタリーブ化されたＸＰＳデータの構成例を図１０に示す。
【００２６】
図１０に示すＸＰＳデータでは、＿ｒｅｌｓ／．ｒｅｌｓは２個のパーツデータ８５１，８５２に分割され、ＦＤＳは３個のパーツデータ８５８，８５９，８６０に分割され、１個目のＦＤは３個のパーツデータ８５３，８５４，８５５に分割され、２個目のＦＤは２個のパーツデータ８５６，８５７に分割されている。
【００２７】
図９のように分割された各パーツデータを、図１１に示すように、各参照タグの直後に参照先データが配置されるようなデータ順に並び替えることにより、印刷スループットが低下する問題を解決することが可能である。何故ならば、印刷装置は、解析すべきパーツデータの情報を有するファイルデータ部を順番に受信していくので、当該ファイルデータ部の受信後すぐに当該ファイルデータ部の解析処理を行うことが可能になるからである。
【００２８】
例えば、図１０では、２個に分割された＿ｒｅｌｓ／．ｒｅｌｓ８５１，８５２の１個目のパーツデータ８５１の情報を有するファイルデータ部を受信する。ここで、印刷装置は最初に当該パーツデータを解析する必要があるが、既に当該パーツデータの情報を有するファイルデータ部を受信済みであるため、すぐに当該パーツデータの解析を開始することができる。続いて、３個に分割されたＦＤＳの１個目のパーツデータ８５８の情報を有するファイルデータ部を受信する。ここで、印刷装置は次に当該パーツデータを解析する必要があるが、既に当該パーツデータの情報を有するファイルデータ部を受信済みであるため、すぐに当該パーツデータの解析を開始することができる。
【００２９】
続いて、３個に分割された１つ目のドキュメントの構成情報が記述されたＦＤの１個目のパーツデータ８５３の情報を有するファイルデータ部を受信する。ここで、印刷装置は次に当該パーツデータを解析する必要があるが、既に当該パーツデータの情報を有するファイルデータ部を受信済みであるため、すぐに当該パーツデータの解析を開始することができる。
【００３０】
続いて、１つ目のドキュメントの１ページ目のページ情報が記述されたＦＰ８６１の情報を有するファイルデータ部を受信する。ここで、印刷装置は次に当該パーツデータを解析する必要があるが、既に当該パーツデータの情報を有するファイルデータ部を受信済みであるため、すぐに当該パーツデータの解析を開始することができる。この結果、１つ目のドキュメントの１ページ目の印刷を行うことができる。
【００３１】
続いて、３個に分割された１つ目のドキュメントの構成情報が記述されたＦＤの２個目のパーツデータ８５４の情報を有するファイルデータ部を受信する。ここで、印刷装置は次に当該パーツデータを解析する必要があるが、既に当該パーツデータの情報を有するファイルデータ部を受信済みであるため、すぐに当該パーツデータの解析を開始することができる。
【００３２】
続いて、１つ目のドキュメントの２ページ目のページ情報が記述されたＦＰ８６２の情報を有するファイルデータ部を受信する。ここで、印刷装置は次に当該パーツデータを解析する必要があるが、既に当該パーツデータの情報を有するファイルデータ部を受信済みであるため、すぐに当該パーツデータの解析を開始することができる。この結果、１つ目のドキュメントの２ページ目の印刷を行うことができる。同様に、ファイルデータ部を受信後すぐに当該パーツデータの解析ができるようになり、印刷スループットが低下する問題は解決される。
【００３３】
なお、Ｗｉｎｄｏｗｓ(登録商標)  Ｖｉｓｔａでは、ＸＰＳを文書ファイルフォーマットとしてのみでなく印刷スプールファイルのフォーマットとして利用することができる。ＸＰＳプリントパスが使用される場合、通常ＯＳにより提供される印刷システムが自動で印刷スプールファイルをＸＰＳファイルフォーマットの形で生成する。この際に生成されるＸＰＳデータは、例えば、図１１に示すようなデータ順となる。
【００３４】
しかしながら、上述したＸＰＳプリントパスが使用される場合にＯＳが提供する印刷システムが生成するＸＰＳデータ以外のＸＰＳデータを印刷スプールファイルとして直接通知する技術も存在し、本技術を使用した場合には図１１の通りのデータ順になるとは限らない。
【非特許文献１】ＸＭＬ  Ｐａｐｅｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＸＰＳ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ａｎｄ  Ｒｅｆｅｒｅｎｃｅ  Ｇｕｉｄｅ  Ｖｅｒｓｉｏｎ  １．０  Ｆｉｎａｌ）Ｐ２２２〜Ｐ２２４、インターネット〈ＵＲＬ：http://www.microsoft.com/japan/whdc/xps/xpsspec.mspx〉からダウンロード可能な文献
【発明の開示】
【発明が解決しようとする課題】
【００３５】
上記従来の印刷方法では、ＸＰＳプリントパスが使用され、ＯＳが提供する印刷システムにより生成されるＸＰＳファイルフォーマットの印刷スプールファイルについては、正順印刷の際には印刷スループットが低下する問題を解決できるデータ順となっている。
【００３６】
しかしながら、逆順印刷や製本印刷の場合には、印刷システムが生成するＸＰＳデータのデータ順では印刷スループットが低下する問題は解決されない。例えば、図１１に示すＸＰＳデータでは、正順印刷の際には、印刷装置は、１個目のドキュメントの１ページ目、１個目のドキュメントの２ページ目、１個目のドキュメントの３ページ目、２個目のドキュメントの１ページ目、２個目のドキュメントの２ページ目といった順番で印刷を行う必要がある。
【００３７】
一方、逆順印刷の際には、印刷装置は、２個目のドキュメントの２ページ目、２個目のドキュメントの１ページ目、１個目のドキュメントの３ページ目、１個目のドキュメントの２ページ目、１個目のドキュメントの１ページ目といった順番で印刷を行う必要がある。このため、２個に分割された＿ｒｅｌｓ／．ｒｅｌｓの１個目のパーツデータの情報を有するファイルデータ部を受信し、当該パーツデータを解析した後、３個に分割されたＦＤＳの２個目のパーツデータの情報を有するファイルデータ部を受信するまでＸＰＳデータの解析処理を中断せざるを得ない。
【００３８】
つまり、印刷システムが生成するＸＰＳデータは、逆順印刷の場合に、印刷装置が解析すべきデータ順にはなっていないため、ＸＰＳデータの解析処理の中断が発生することになり、印刷スループットが低下してしまう。同様に、印刷システムが生成するＸＰＳデータは、製本印刷の場合に、印刷装置が解析すべきデータ順にはなっていないため、ＸＰＳデータの解析処理の中断が発生することになり、印刷スループットが低下してしまう。
【００３９】
本発明は、例えば、ＸＰＳデータを用いたプリントパスによって、印刷スプールファイルとして生成されるアーカイブデータから印刷設定に適したデータ順のアーカイブデータを生成することで、印刷装置の印刷処理を高速化することができる情報処理装置及び処理方法、並びにプログラムを提供することを目的とする。
【課題を解決するための手段】
【００４０】
上記目的を達成するために、請求項１記載の情報処理装置は、文書データの構成情報が記述されたページ構成データのファイル、前記ページ構成データのファイルに記述された構成情報に従って参照される印刷対象となるページ情報が記述された印刷対象データのファイルがアーカイブされたアーカイブデータを入力する入力手段と、前記入力されたアーカイブデータを伸長する伸張手段と、印刷設定を示す印刷設定情報を取得する印刷設定情報取得手段と、前記アーカイブデータを前記取得した印刷設定情報に応じた印刷順で受信しながら印刷装置で印刷準備を可能にするべく、前記伸長されたデータの前記ページ構成データのファイルに示される構成情報の前記印刷対象データのファイルを参照するための参照情報を前記印刷設定情報に従って変更する変更手段と、前記変更された参照情報に従って参照される前記印刷対象データのファイルを、前記印刷設定に応じた印刷順で印刷装置が受信可能なように並べ替え、当該印刷対象データの各ファイルの前に前記ページ構成データのファイルを配置したアーカイブデータを生成する印刷データ生成手段とを備えることを特徴とする。
【００４１】
上記目的を達成するために、請求項１０記載の情報処理装置の処理方法は、印刷装置へアーカイブデータを送信する情報処理装置の処理方法において、文書データの構成情報が記述されたページ構成データのファイル、前記ページ構成データのファイルに記述された構成情報に従って参照される印刷対象となるページ情報が記述された印刷対象データのファイルがアーカイブされたアーカイブデータを入力する入力工程と、前記入力されたアーカイブデータを伸長する伸張工程と、印刷設定を示す印刷設定情報を取得する印刷設定情報取得工程と、前記アーカイブデータを前記取得した印刷設定情報に応じた印刷順で受信しながら印刷装置で印刷準備を可能にするべく、前記伸長されたデータの前記ページ構成データのファイルに示される構成情報の前記印刷対象データのファイルを参照するための参照情報を前記印刷設定情報に従って変更する変更工程と、前記変更された参照情報に従って参照される前記印刷対象データのファイルを、前記印刷設定に応じた印刷順で印刷装置が受信可能なように並べ替え、当該印刷対象データの各ファイルの前に前記ページ構成データのファイルを配置したアーカイブデータを生成する印刷データ生成工程とを備えることを特徴とする。
【００４２】
上記目的を達成するために、請求項１１記載のプログラムは、印刷装置へアーカイブデータを送信する情報処理装置で実行可能なプログラムであって、前記情報処理装置を、文書データの構成情報が記述されたページ構成データのファイル、前記ページ構成データのファイルに記述された構成情報に従って参照される印刷対象となるページ情報が記述された印刷対象データのファイルがアーカイブされたアーカイブデータを入力する入力手段と、前記入力されたアーカイブデータを伸長する伸張手段と、印刷設定を示す印刷設定情報を取得する印刷設定情報取得手段と、前記アーカイブデータを前記取得した印刷設定情報に応じた印刷順で受信しながら印刷装置で印刷準備を可能にするべく、前記伸長されたデータの前記ページ構成データのファイルに示される構成情報の前記印刷対象データのファイルを参照するための参照情報を前記印刷設定情報に従って変更する変更手段と、前記変更された参照情報に従って参照される前記印刷対象データのファイルを、前記印刷設定に応じた印刷順で印刷装置が受信可能なように並べ替え、当該印刷対象データの各ファイルの前に前記ページ構成データのファイルを配置したアーカイブデータを生成する印刷データ生成手段として機能させることを特徴とする。
【発明の効果】
【００４３】
本発明によれば、例えば、ＸＰＳデータを用いたプリントパスによって、印刷スプールファイルとして生成されるアーカイブデータから印刷設定に適したデータ順のアーカイブデータを生成することにより、印刷装置の印刷処理を高速化することができる。
【発明を実施するための最良の形態】
【００４４】
以下、本発明の実施の形態を図面を参照して詳細に説明する。
【００４５】
［第１の実施形態］
図１は、本発明の第１の実施形態に係る情報処理装置を含めた印刷システムの構成例を示すブロック図である。
【００４６】
図１において、本発明の実施形態における印刷システムは、情報処理装置としてのコンピュータ３０００と、印刷装置としてのプリンタ１５００とを備え、これらはネットワーク１２１を介して互い接続されている。
【００４７】
コンピュータ３０００は、ＣＰＵ１０１と、ＲＡＭ１０２と、ＲＯＭ１０３と、入力コントローラ（入力Ｃ）１０５と、ビデオコントローラ（ＶＣ）１０６と、メモリコントローラ（ＭＣ）１０７と、通信Ｉ／Ｆコントローラ（通信Ｉ／Ｆ  Ｃ）１０８と、操作装置１０９と、表示装置１１０と、外部メモリ１１１とを備える。ＣＰＵ１０１、ＲＡＭ１０２、ＲＯＭ１０３、入力コントローラ１０５、ビデオコントローラ１０６、メモリコントローラ１０７、及び通信インターフェースコントローラ１０８は、システムバス１０４を介して互いに接続されている。
【００４８】
ＣＰＵ１０１は、後述する処理の実行に際して必要なプログラム等をＲＡＭ１０２にロードして、プログラムを実行することで各種動作を実現する。また、ＣＰＵ１０１は、例えば、ＲＡＭ１０２の表示情報用領域へアウトラインフォントの展開（ラスタライズ）処理を実行することにより、表示装置１１０上での表示を可能としている。また、ＣＰＵ１０１は、表示装置１１０上の不図示のマウスカーソル等でのユーザによる指示を可能とする。
【００４９】
ＲＡＭ１０２は、ＣＰＵ１０１の主メモリ、ワークエリア等として機能する。ＲＯＭ１０３または外部メモリ１１１には、ＣＰＵ１０１の制御プログラムであるＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）やオペレーティングシステムプログラム（以下、「ＯＳ」という。）、後述する各処理を実行するために必要な各種プログラム等が記憶されている。本実施の形態で使用するＯＳは、例えば、Ｗｉｎｄｏｗｓ(登録商標)  Ｖｉｓｔａ（Ｍｉｃｒｏｓｏｆｔ社製）を想定しているが、これに限られるものではない。
【００５０】
入力コントローラ１０５は、マウス等のポインティングデバイスやキーボードで構成される操作装置１０９からの入力を制御する。ビデオコントローラ１０６は、ＣＲＴディスプレイ等の表示装置１１０への表示を制御する。なお、表示装置１１０は、ＣＲＴに限られるものではなく、液晶ディスプレイでも構わない。
【００５１】
メモリコントローラ１０７は、外部メモリ１１１へのアクセスを制御する。外部メモリ１１１は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、及び各種データ等を記憶し、ハードディスク（ＨＤ）、フロッピー（登録商標）ディスク（ＦＤ）、またはＰＣＭＣＩＡカードスロットにアダプタを介して接続されるコンパクトフラッシュ(登録商標)メモリ等から構成される。通信Ｉ／Ｆコントローラ１０８は、ネットワーク等を介した外部機器との接続・通信を制御する。例えば、ＴＣＰ／ＩＰを用いたインターネット通信などにより、ネットワーク１２１を介してプリンタ１５００との間でデータ送受信等が可能である。なお、ネットワーク１２１はＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であっても、インターネットであってもよく、またケーブル等で接続されたローカルなものであってもよい。
【００５２】
プリンタ１５００は、ＣＰＵ１１２、ＲＡＭ１１９、フォントＲＯＭ１１３ａと、プログラムＲＯＭ１１３ｂと、データＲＯＭ１１３ｃと、入力部１１８と、印刷部インターフェース（印刷部Ｉ／Ｆ）１１６と、印刷部（プリンタエンジン）１１７と、操作部１５０１と、メモリコントローラ（ＭＣ）１２０と、外部メモリ１１４とを備える。ＣＰＵ１１２、ＲＡＭ１１９、ＲＯＭ１１３、入力部１１８、印刷部Ｉ／Ｆ１１６、操作部１５０１と、ＭＣ１２０は、システムバス１１５を介して互いに接続されている。
【００５３】
ＣＰＵ１１２は、プログラムＲＯＭ１１３ｂまたは外部メモリ１１４に記憶された制御プログラム等に基づいて、印刷部Ｉ／Ｆ１１６を介して印刷部１１７に出力情報としての画像信号を出力する。プログラムＲＯＭ１１３ｂには、ＣＰＵ１１２により実行される制御プログラム等が記憶される。フォントＲＯＭ１１３ａには、上記出力情報を生成する際に使用するフォントデータ等が記憶される。データＲＯＭ１１３ｃには、プリンタ１５００がハードディスク等の外部メモリ１１４を有していない場合には、コンピュータ３０００上で利用される情報等が記憶される。
【００５４】
ＣＰＵ１１２は、入力部１１８を介してコンピュータ３０００との通信処理を行い、プリンタ１５００内の情報等をコンピュータ３０００に通知することができる。ＲＡＭ１１９は、ＣＰＵ１１２の主メモリであり、ワークエリア等として機能する。また、ＲＡＭ１１９は、不図示の増設ポートに接続されるオプションＲＡＭによりメモリ容量を拡張することができるように構成されている。なお、ＲＡＭ１１９は、出力情報展開領域、環境データ格納領域、ＮＶＲＡＭ等にも用いられる。
【００５５】
メモリコントローラ１２０は、外部メモリ１１４へのアクセスを制御する。外部メモリ１１４は、オプションとして接続され、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶し、ハードディスク（ＨＤ）、ＩＣカード等で構成される。
【００５６】
操作部１５０１は、操作のためのスイッチやＬＥＤ等が配されている操作パネルである。なお、プリンタ１５００が備える外部メモリ１１４は、１個に限られるものではなく、複数であってもよい。また、プリンタ１５００は、内蔵フォントに加えてオプションフォントカード、言語系の異なるプリンタ制御言語を解釈するプログラムを格納した外部メモリを複数接続できるように構成されていてもよい。さらに、プリンタ１５００は、操作部１５０１により設定されたプリンタモード設定情報を記憶するＮＶＲＡＭ（不図示）を有していてもよい。
【００５７】
本実施の形態では、プリンタ１５００がサポートするページ記述言語（以下、「ＰＤＬ」という。）は、上述したＸＰＳを想定しているが、これに限定されるものではなく、同様のファイルフォーマットを有するＰＤＬであってもよい。
【００５８】
本発明を実現するための印刷機器制御プログラム（以下、「プリンタドライバ」という。）は外部メモリ１１１に記録されており、必要に応じてＲＡＭ１０２にロードされることによりＣＰＵ１０１によって実行される。プリンタドライバが用いる定義ファイル及び各種情報テーブルは外部メモリ１１１に格納されている。
【００５９】
なお、上記印刷システムの構成は一例であり、用途や目的に応じて様々な構成例があることは云うまでもない。例えば、本発明の機能が実現されるのであれば、単体の機器に適用されてもよく、ＬＡＮ、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等のネットワークを介して接続された複数の機器からなるシステムに適用されてもよい。
【００６０】
図２は、図１のコンピュータ３０００での印刷制御処理時に機能するソフトウェアの構成を示すブロック図である。
【００６１】
図２において、コンピュータ３０００は、アプリケーションプログラム（以下、「アプリケーション」という。）２０１と、グラフィックスエンジン２０２と、プリンタドライバ２０３と、プリントサブシステム２０４とを備える。これらは、それぞれ外部メモリ１１１にファイルとして保存されたプログラムモジュールである。これらのモジュールは、ＯＳやそのモジュールを利用するモジュールによってＲＡＭ１０２にロードされて実行される。
【００６２】
アプリケーション２０１及びプリンタドライバ２０３は、外部メモリ１１１から、または後述する図３のネットワーク３０１を介して接続された外部機器から、ハードディスク（ＨＤ）等の外部メモリ１１１に追加可能になっている。外部メモリ１１１に保存されているアプリケーション２０１は、ＣＰＵ１０１によってＲＡＭ１０２にロードされて実行される。このアプリケーション２０１からプリンタ１５００に対して印刷を行わせる際には、同様にＣＰＵ１０１によってＲＡＭ１０２にロードされて実行されるグラフィックスエンジン２０２を利用して出力（描画）を行う。
【００６３】
グラフィックエンジン２０２は、プリンタ毎に用意されたプリンタドライバ２０３を起動する。これにより、プリンタドライバ２０３は、ＣＰＵ１０１によって外部メモリ１１１からＲＡＭ１０２にロードさせて実行される。グラフィックスエンジン２０２は、このプリンタドライバ２０３を用いて、アプリケーション２０１から出力された印字命令や描画命令をＰＤＬによるプリンタ制御命令に変換する。
【００６４】
プリンタドライバ２０３により変換されたプリンタ制御コマンドは、プリントサブシステム２０４を経由して、ネットワーク１２１を介してプリンタ１５００に出力される。プリントサブシステム２０４は、ＯＳによって起動されて、ＣＰＵ１０１によって外部メモリ１１１からＲＡＭ１０２にロードされて実行されるものであり、印刷ジョブのスケジューリング、コンピュータ３０００とプリンタ１５００との接続制御、及びプリンタ１５００のステータスの管理を行う。
【００６５】
なお、プリンタドライバ２０３は、前述した、アプリケーション２０１から出力された印字命令や描画命令をプリンタ制御コマンドに変換し、印刷出力に反映されるようプリンタ１５００に指示する機能に加えて、プリンタドライバ２０３やプリンタ１５００が有する機能を制御するための設定を行う機能（以下、「ユーザインターフェース（ＵＩ）」という。）、その設定を記憶する機能、プリンタドライバ２０３やプリンタ１５００が有する機能の情報をアプリケーション２０１やＯＳに提供する機能、ＵＩで設定された機能がプリンタの有する機能である場合にプリンタ制御命令を生成する機能、及び、ＵＩで設定された機能がプリンタドライバ２０３独自で行う機能の場合にその機能を実現する機能等を有する。
【００６６】
図３は、図１のコンピュータ３０００及びプリンタ１５００を利用した印刷システムの一例を示すブロック図である。
【００６７】
図３において、印刷システムは、クライアントコンピュータとしての複数のコンピュータ３０００と、プリンタ１５００と、プリントサーバコンピュータ４０００とを有し、これらがネットワーク３０１を介して互いに接続されている。コンピュータ３０００内の通信Ｉ／Ｆコントローラ１０８は、ネットワークインターフェースカード（ＮＩＣ）の機能を有するものとする。
【００６８】
プリンタ１５００は、セントロニクスやＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）等のローカルインターフェース３０２を介してプリントサーバコンピュータ４０００と接続され、該プリントサーバコンピュータ４０００を介してネットワーク３０１に接続される形態であってもよく、ネットワーク３０１に直接接続される形態であってもよい。なお、ネットワーク３０１に直接接続されたプリンタ１５００内の入力部１１８は、ネットワークインターフェースカード（ＮＩＣ）の機能を有するものとする。
【００６９】
コンピュータ３０００は、プリントサーバコンピュータ４０００を介してネットワーク３０１に接続されたプリンタ１５００に印刷ジョブを送信する場合、まず、プリントサブシステム２０４を介して、プリントサーバコンピュータ４０００へ印刷ジョブを送信する。そして、プリントサーバコンピュータ４０００は、コンピュータ３０００から送信されてきた印刷ジョブを、プリントサーバコンピュータ４０００上の不図示のプリントサブシステムを介して、プリンタ１５００へ送信する。
【００７０】
また、コンピュータ３０００は、ネットワーク３０１に直接接続されたプリンタ１５００に印刷ジョブを送信する場合、プリントサブシステム２０４を介して、プリンタ１５００に直接印刷ジョブを送信する。
【００７１】
次に、図１２を用いて、ＧＤＩプリントパスに従って機能するコンピュータ３０００について説明する。
【００７２】
図１２は、コンピュータ３０００での印刷制御処理時にＧＤＩプリントパスに従って機能する機能部の構成を示す図である。
【００７３】
図１２において、ＧＤＩプリントパスに従って機能するコンピュータ３０００の機能部は、アプリケーション２０１、ＧＤＩ４０１、ユーザインターフェースドライバ４０２、スプーラ４０３、ＥＭＦスプールファイル４０４、プリントプロセッサ４０５、プリンタグラフィックスドライバ４０６、及びランゲージモニタ４０７で構成される。
【００７４】
まず、図１２に示す各機能部の印刷制御機能について説明する。
【００７５】
アプリケーション２０１は、ＧＤＩ４０１を介して、プリンタ１５００に対して印刷条件を設定する。具体的には、アプリケーション２０１は、例えば、印刷に使用する用紙のサイズや逆順で印刷するか否かの設定や製本の体裁で印刷を行う製本印刷を実施するか否かの設定などの各種印刷条件を設定する。また、アプリケーション２０１は、ＧＤＩ４０１を介して、プリンタ１５００に対して文書や写真画像等の描画命令を発行し、印刷実行を指示する。以下、図１２の説明において、描画命令の発行に伴いＧＤＩ４０１を介してスプーラ４０３に通知される文書、画像データ、及び描画命令を総称して「印刷データ」と呼ぶ。
【００７６】
ユーザインターフェースドライバ４０２は、ＧＤＩ４０１を介して通知された印刷条件をプリンタ１５００に適合する内容に変更し、最終的な印刷条件を確定する。また、ユーザインターフェースドライバ４０２は、ＧＤＩ４０１を介して、最終的に確定した印刷条件をスプーラ４０３に通知する。ユーザインターフェースドライバ４０２は、例えば、逆順印刷を行うか否かについては、図２６に示す印刷設定画面上のチェックボックス５８１を提供し、製本印刷を行うか否かについては図２７のコンボボックス５８２を提供するなどの各種印刷設定を行うためのユーザインターフェースを提供し、ユーザにより設定されるそれらの情報に基づいて、前述の最終的な印刷条件を確定する。
【００７７】
スプーラ４０３は、ＧＤＩ４０１を介して通知された印刷データ及び印刷条件をＥＭＦスプールファイル４０４に格納する。プリントプロセッサ４０５は、ＥＭＦスプールファイル４０４に格納された印刷データを１ページ単位で処理する。プリンタグラフィックスドライバ４０６は、印刷データをプリンタ１５００で印刷出力可能なＰＤＬに変換する。ランゲージモニタ４０７は、プリンタ１５００と双方向の通信を行い、プリンタ１５００の情報を取得して表示装置１１０に表示する。また、ランゲージモニタ４０７は、プリンタグラフィックスドライバ４０６が生成したＰＤＬをプリンタ１５００に供給する。なお、ランゲージモニタ４０７は、プリンタ１５００が備えるメモリ容量やエンジンコントローラの構成により異なる転送方法を採用することができる。
【００７８】
次に、ＧＤＩプリントパスにおける印刷制御機能の一連の動作について説明する。
【００７９】
まず、アプリケーション２０１は、ユーザからの操作指示に従って、印刷条件の設定、任意の文書または写真画像等の印刷実行の指示を行う。このようにしてＧＤＩ４０１は、アプリケーション２０１から印刷実行の指示を受け付けると、ユーザインターフェースドライバ４０２に対して、プリンタ１５００での印刷条件の設定内容及び印刷開始のイベントを通知する。
【００８０】
ユーザインターフェースドライバ４０２は、プリンタ１５００での印刷条件の設定内容の通知を受けると、通知された印刷条件の設定内容を参照し、プリンタ１５００にて印刷出力可能な設定内容になっているか否かを判断する。ここで、通知された印刷条件の設定内容が、プリンタ１５００にて印刷出力可能な設定内容になっていないと判断した場合には、ユーザインターフェースドライバ４０２は、プリンタ１５００にて印刷出力可能な設定内容になるように、印刷条件の設定内容を一部更新して印刷条件を確定する。
【００８１】
続いて、アプリケーション２０１は、ＧＤＩ４０１を介して、文書や画像データの描画命令を発行する。スプーラ４０３は、アプリケーション２０１における描画命令の発行に伴って生成された印刷データ及びユーザインターフェースドライバ４０２が確定した印刷条件の通知を受けると、通知された印刷データ及び印刷条件をＥＭＦスプールファイル４０４に格納する。
【００８２】
プリントプロセッサ４０５は、ＥＭＦスプールファイル４０４から印刷条件の設定内容及び印刷データを取得する。また、プリントプロセッサ４０５は、ＧＤＩ４０１を介して、当該印刷条件の設定内容及び印刷データを１ページ単位でプリンタグラフィックスドライバ４０６に供給する。
【００８３】
ＧＤＩ４０１は、プリントプロセッサ４０５からプリンタグラフィックスドライバ４０６に印刷データを供給する際に、印刷データに含まれる描画命令をグラフィックス描画コマンドに変換する。プリンタグラフィックスドライバ４０６は、ＧＤＩ４０１により生成されたグラフィックス描画コマンド及びＧＤＩ４０１から通知された印刷条件の設定内容に基づいて、プリントプロセッサ４０５から供給された印刷データからプリンタ１５００が解釈できるＰＤＬを生成する。ランゲージモニタ４０７は、コンピュータ３０００からプリンタ１５００にＰＤＬを伝送するために使用されるインターフェースを経由して、プリンタグラフィックスドライバ４０６により供給されたＰＤＬをプリンタ１５００に供給する。プリンタ１５００は、ランゲージモニタ４０７から供給されたＰＤＬを解釈し、印刷画像データを用紙上に印刷出力する。
【００８４】
次に、図１３を用いて、ＸＰＳプリントパスに従って機能するコンピュータ３０００について説明する。
【００８５】
図１３は、コンピュータ３０００での印刷制御処理時にＸＰＳプリントパスに従って機能する機能部の構成を示す図である。
【００８６】
図１３において、ＸＰＳプリントパスに従って機能するコンピュータ３０００の機能部は、アプリケーション２０１、Ｗｉｎｄｏｗｓ(登録商標)  Ｐｒｅｓｅｎｔａｔｉｏｎ  Ｆｏｕｎｄａｔｉｏｎ（以下、「ＷＰＦ」と略する。）印刷サポート４０８、ユーザインターフェースドライバ４０２、スプーラ４０３、ＸＰＳスプールファイル４０９、フィルタパイプラインマネージャ４１０、レイアウトフィルタ４１１、レンダリングフィルタ４１２、及びランゲージモニタ４０７で構成される。
【００８７】
まず、図１３に示す各機能部の印刷制御機能について説明する。
【００８８】
アプリケーション２０１は、ＷＰＦ印刷サポート４０８を介して、ＸＰＳ文書を作成する。また、アプリケーション２０１は、ＸＰＳ文書に含まれる文書や写真画像等のドキュメント、印刷条件、描画命令をＸＰＳ文書に対して設定する。以下、ＸＰＳ文書に含まれる文書や写真画像等のドキュメント、及び描画命令を総称して「印刷データ」と呼ぶ。さらに、アプリケーション２０１は、ＷＰＦ印刷サポート４０８を介して、印刷実行を指示する。
【００８９】
ＷＰＦ印刷サポート４０８は、アプリケーション２０１の指示を受けてＸＰＳ文書を構成する。また、ＷＰＦ印刷サポート４０８は、ＸＰＳ文書から印刷条件の設定内容を取り出してユーザインターフェースドライバ４０２に通知する。また、ＷＰＦ印刷サポート４０８は、ユーザインターフェースドライバ４０２が確定した印刷条件の設定内容をＸＰＳ文書に設定する。さらに、ＷＰＦ印刷サポート４０８は、ＸＰＳ文書をスプーラ４０３に通知する。
【００９０】
ユーザインターフェースドライバ４０２は、ＷＰＦ印刷サポート４０８から通知された印刷条件をプリンタ１５００に適合する内容に変更し、最終的な印刷条件を確定する。また、ユーザインターフェースドライバ４０２は、最終的に確定した印刷条件をＷＰＦ印刷サポート４０８に通知する。ここで、上述したＧＤＩプリントパスの場合と同様、ユーザインターフェースドライバ４０２は、例えば、逆順印刷を行うか否かについては図２６に示す印刷設定画面上のチェックボックス５８１を提供し、製本印刷を行うか否かについては図２７に示す印刷設定画面上のコンボボックス５８２を提供するなどの各種印刷設定を行うためのユーザインターフェースを提供し、ユーザにより設定されるそれらの情報に基づいて、前述の最終的な印刷条件を確定する。
【００９１】
スプーラ４０３は、ＷＰＦ印刷サポート４０８から通知されたＸＰＳ文書をＸＰＳスプールファイル４０９に格納する。フィルタパイプラインマネージャ４１０は、レイアウトフィルタ４１１及びレンダリングフィルタ４１２を介して、ＸＰＳスプールファイル４０９に格納されたＸＰＳ文書をプリンタ１５００で印刷出力可能なＰＤＬに変換し、ＰＤＬをプリンタ１５００に供給する。
【００９２】
レイアウトフィルタ４１１は、ＸＰＳ文書内の印刷データやページ構成を編集する。レンダリングフィルタ４１２は、レイアウトフィルタ４１１により編集されたＸＰＳ文書内の印刷データをプリンタ１５００で印刷出力可能なＰＤＬに変換する。
【００９３】
ランゲージモニタ４０７は、プリンタ１５００と双方向の通信を行い、プリンタ１５００の情報を取得して表示装置１１０に表示する。また、ランゲージモニタ４０７は、フィルタパイプラインマネージャ４１０から通知されたＰＤＬをプリンタ１５００に供給する。なお、ランゲージモニタ４０７は、プリンタ１５００が備えるメモリ容量や、エンジンコントローラの構成により異なる転送方法を採用することができる。
【００９４】
次に、ＸＰＳプリントパスにおける印刷制御機能の一連の動作について説明する。
【００９５】
まず、アプリケーション２０１は、ユーザからの操作指示に従って、任意の文書または写真画像等のドキュメントを読み込む。なお、任意の文書には、予め作成されていたＸＰＳ文書も含まれる。続いて、アプリケーション２０１は、ユーザからの操作指示に従って、ＸＰＳ文書の作成を行い、文書や写真画像等のドキュメント、印刷条件、描画命令をＸＰＳ文書に設定する。なお、予め作成されていたＸＰＳ文書を読み込んだ場合には、新たにＸＰＳ文書を作成することはなく、アプリケーション２０１は、読み込んだＸＰＳ文書に含まれる印刷条件や描画命令をユーザからの操作指示に従って編集すればよい。
【００９６】
ＸＰＳプリントパスでは、予め定義されたＸＭＬスキーマの形式に従って記述されたＸＭＬファイルを用いて印刷条件の設定が行われる。印刷設定を行うために予め定義されたＸＭＬスキーマの形式を「プリントスキーマ」と呼び、印刷スキーマに従って印刷条件が記述されているＸＭＬファイルを「プリントチケット」と呼ぶ。
【００９７】
プリントチケット（不図示）は、そのままの形式でＸＰＳ文書に含まれる。例えば、プリントチケットは、文書全体に対して適用する印刷設定の情報を有するファイル、あるドキュメントに対してのみ適用する印刷設定の情報を有するファイル、あるページに対してのみ適用する印刷設定の情報を有するファイル等といった形式でＸＰＳ文書に複数個含まれる。また、プリントチケットには、例えば、図２８に示すような、逆順印刷であるか否かの情報５５１や製本印刷であるか否かの情報５５２などといった印刷設定に関する情報が記述される。
【００９８】
本実施の形態では、印刷設定についてはプリントチケット内に保持し、ＸＰＳ文書としてフィルタパイプラインマネージャ４１０を介して渡すように構成したが、ユーザインターフェースドライバ４０２やレイアウトフィルタ４１１やレンダリングフィルタ４１２で構成されるＸＰＳ用のプリンタドライバで印刷設定がなされた場合、プリンタチケットを用いず、レイアウトフィルタ４１１とレンダリングフィルタ４１２が連携し、印刷設定を直接渡すように構成することも可能である。
【００９９】
続いて、アプリケーション２０１は、ユーザからの操作指示に従って、ＸＰＳ文書を用いて印刷実行の指示を行う。ＷＰＦ印刷サポート４０８は、アプリケーション２０１から印刷実行の指示を受け付けると、ＸＰＳ文書内のプリントチケットを取り出し、印刷条件の設定内容として当該プリントチケットをユーザインターフェースドライバ４０２に通知する。
【０１００】
ユーザインターフェースドライバ４０２は、プリンタ１５００での印刷条件の設定内容の通知を受けると、通知された印刷条件の設定内容を参照し、プリンタ１５００にて印刷出力可能な設定内容になっているか否かを判断する。通知された印刷条件の設定内容が、プリンタ１５００にて印刷出力可能な設定内容になっていないと判断した場合、ユーザインターフェースドライバ４０２は、プリンタ１５００にて印刷出力可能な設定内容になるように、印刷条件の設定内容を一部更新し、印刷条件を確定する。続いて、ユーザインターフェースドライバ４０２は、確定した印刷条件によりプリントチケットを更新し、ＷＰＦ印刷サポート４０８に通知する。ＷＰＦ印刷サポート４０８は、ユーザインターフェースドライバ４０２から通知されたプリントチケットをＸＰＳ文書に設定し、当該ＸＰＳ文書をスプーラ４０３に通知する。
【０１０１】
スプーラ４０３は、ＷＰＦ印刷サポート４０８からＸＰＳ文書の通知を受けると、通知されたＸＰＳ文書をＸＰＳスプールファイル４０９に格納する。続いて、スプーラ４０３は、フィルタパイプラインマネージャ４１０に対して印刷開始のイベントを通知する。
【０１０２】
フィルタパイプラインマネージャ４１０は、スプーラ４０３から印刷開始のイベントの通知を受けると、ＸＰＳスプールファイル４０９に格納されているＸＰＳ文書を取得し、当該ＸＰＳ文書をレイアウトフィルタ４１１に通知する。
【０１０３】
レイアウトフィルタ４１１は、通知された（入力した）ＸＰＳ文書から印刷データ及びプリントチケットを取得する。続いて、レイアウトフィルタ４１１は、プリントチケットに記載されている印刷条件の設定内容に基づいて、印刷データの編集及びＸＰＳ文書のページ構成の編集を行う。なお、印刷データやページ構成の編集内容には、ビットマップの合成（ウォーターマーク）、ページ合成（割付）、ページ順序の変更（逆順）等が含まれる。また、前述の通り、プリントチケットは複数個存在することもあり、複数個存在する場合には、レイアウトフィルタ４１１は各プリントチケットに記述された印刷設定を全て解釈して、文書内の各々のページに対して、適切な印刷設定に基づいたＸＰＳ文書を生成する。
【０１０４】
続いて、レイアウトフィルタ４１１は、印刷データやページ構成の編集を終えた後のＸＰＳ文書をフィルタパイプラインマネージャ４１０に通知する。フィルタパイプラインマネージャ４１０は、レイアウトフィルタ４１１から通知されたＸＰＳ文書をレンダリングフィルタ４１２に通知する。
【０１０５】
レンダリングフィルタ４１２は、通知されたＸＰＳ文書から印刷データ及びプリントチケットを取得する。続いて、レンダリングフィルタ４１２は、プリントチケットに記載されている印刷条件の設定内容に基づいて、印刷データからプリンタ１５００が解釈できるＰＤＬを生成し、ＰＤＬをフィルタパイプラインマネージャ４１０に通知する。なお、前述の通り、プリントチケットは複数個存在することもあり、複数個存在する場合には、レンダリングフィルタ４１２は各プリントチケットに記述された印刷設定を全て解釈して、文書内の各々のページに対して、適切な印刷設定に基づいたＰＤＬを生成する。
【０１０６】
フィルタパイプラインマネージャ４１０は、レンダリングフィルタ４１２から通知されたＰＤＬをランゲージモニタ４０７に供給する。ランゲージモニタ４０７は、コンピュータ３０００からプリンタ１５００にＰＤＬを伝送するために使用されるインターフェースを経由して、フィルタパイプラインマネージャ４１０により供給されたＰＤＬをプリンタ１５００に供給する。プリンタ１５００は、ランゲージモニタ４０７から供給されたＰＤＬを解釈し、印刷画像データを用紙上に印刷出力する。
【０１０７】
なお、レイアウトフィルタ４１１は、ＸＰＳプリントパスにおける印刷システムの取り決めに基づいてさえいれば、複数の機能処理部に分割することも可能である。この場合、分割された各機能処理部は、行うべき処理を実施した後に、処理に基づく編集が行われたＸＰＳ文書をフィルタパイプラインマネージャ４１０に通知するといった処理を分割された機能処理部毎に繰り返すことになる。
【０１０８】
また、ＸＰＳプリントパスにおける印刷システムの取り決めに基づいてさえいれば、レイアウトフィルタ４１１とレンダリングフィルタ４１２を一つの機能処理部に統合することも可能である。この場合、編集したＸＰＳ文書をフィルタパイプラインマネージャ４１０に通知するといった処理が行われることはなく、レイアウトフィルタ４１１が行うべき処理とレンダリングフィルタ４１２が行うべき処理の両方が行われた後に、生成されたＰＤＬをフィルタパイプラインマネージャ４１０に通知することになる。
【０１０９】
Ｗｉｎｄｏｗｓ(登録商標)  Ｖｉｓｔａにおいては、アプリケーション２０１とプリンタドライバの能力により、ＧＤＩプリントパスとＸＰＳプリントパスのいずれの印刷システムが使用されるかが、ＯＳとＯＳが提供する印刷システムによって自動で決定される。ここで、プリンタドライバとは、ＧＤＩプリントパスにおいてはユーザインターフェースドライバ４０２とプリンタグラフィックスドライバ４０６により構成されるアプリケーションのことであり、ＸＰＳプリントパスにおいてはユーザインターフェースドライバ４０２とレイアウトフィルタ４１１とレンダリングフィルタ４１２により構成されるアプリケーションのことである。
【０１１０】
ここで、ＸＰＳプリントパスで用いられるＸＰＳスプールファイル４０９に存在する主要なパーツデータについて再度説明する。
【０１１１】
ＸＰＳデータには、イメージファイルやフォントファイル（リソースファイル）の他に、例えば、以下のような複数種類のパーツデータが包含され、各々が以下のような参照タグを有する。
【０１１２】
ａ）＿ｒｅｌｓ／．ｒｅｌｓ：文書データとしてＸＰＳデータの開始点となるパーツである。後述するＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ（以下、「ＦＤＳ」と略す。）への参照タグを有する。
【０１１３】
ｂ）ＦＤＳ：一つの文書データの構成情報が記述されたパーツである。後述するＦｉｘｅｄＤｏｃｕｍｅｎｔ（以下、「ＦＤ」と略す。）への参照タグを有する。なお、一つのデータは複数のドキュメントを有する場合がある。つまり、ＦＤＳは、複数のＦＤへの参照タグを有する場合がある。
【０１１４】
ｃ）ＦＤ：一つのドキュメントの構成情報が記述されたパーツ（ページ構成データのファイル）である。ＦｉｘｅｄＰａｇｅ（以下、「ＦＰ」と略す。）への参照タグを有する。なお、一つのドキュメントは複数のページを有する場合がある。つまり、ＦＤは、複数のＦＰへの参照タグを有する場合がある。
【０１１５】
ｄ）ＦＰ：印刷対象となるページ情報が記述されたパーツ（印刷対象データのファイル）である。必要に応じて、イメージファイルやフォントファイルへの参照タグを有する場合がある。例えば、当該ページにイメージの描画が存在する場合は、当該イメージファイルへの参照タグを有することになる。なお、このＦＰには、描画するための印刷データが記憶されている。
【０１１６】
次に、前述したＸＰＳプリントパスにおける印刷制御機能の中でレイアウトフィルタ４１１が行う処理を図１４〜図２４を用いて説明する。
【０１１７】
図１４は、図１３のレイアウトフィルタ４１１により実行される印刷制御処理を示すフローチャートである。
【０１１８】
フィルタパイプラインマネージャ４１０は、スプーラ４０３から印刷開始のイベントの通知を受けると、ＸＰＳスプールファイル４０９に格納されているＸＰＳ文書を取得し、当該ＸＰＳ文書をレイアウトフィルタ４１１に通知する。前述したように、ＸＰＳ文書はＺＩＰ圧縮されたデータ（以下、「ＺＩＰデータ」と呼ぶ。）である。レイアウトフィルタ４１１は、ＺＩＰデータを取得し、ＲＡＭ１０２に入力する（ステップＳ３４０１）。次に、レイアウトフィルタ４１１は、取得したＺＩＰデータを伸張する（ステップＳ３４０２）。ＺＩＰデータの伸張方法については、一般的なＺＩＰデータの伸張方法が採用されるものとし、伸張されたデータは、ディレクトリ構成が保持されたまま、各種ファイルを外部メモリ１１１に書き出す形で保存される。
【０１１９】
次に、レイアウトフィルタ４１１は、逆順印刷を実施する設定となっているか否かを示す逆順印刷設定情報及び製本印刷を実施する設定となっているか否かを示す製本印刷設定情報を取得するため、伸張されたデータからプリントチケットを取得し（ステップＳ３４０３）、取得したプリントチケットを解析する（ステップＳ３４０４）。前述したように、プリントチケットはＸＭＬ形式で記述されたファイルである。プリントチケットの解析方法については、一般的なプリントチケットの解析方法が採用されるものとする。なお、以降の処理においてＸＭＬ形式で記述されたＸＭＬファイルを解析する場合は、同様に、一般的なＸＭＬファイルの解析方法が採用されるものとする。また、前述した通り、ＸＰＳ文書には複数のプリントチケットが含まれる場合があるが、ここでは逆順印刷や製本印刷といった文書全体に対して設定される印刷設定情報が取得されるので、文書全体に対して適用する印刷設定の情報を有するプリントチケットが解析される。
【０１２０】
レイアウトフィルタ４１１は、ステップＳ３４０４におけるプリントチケットの解析処理により逆順印刷設定情報及び製本印刷設定情報を取得し、取得した印刷設定情報を当該レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域に保持する。レイアウトフィルタ４１１によりＲＡＭ１０２に確保されたメモリ領域に保持されるレイアウトフィルタ情報を図２５に示す。
【０１２１】
図２５において、逆順印刷設定情報は逆順フラグ５０１に保持され、製本印刷設定情報は製本フラグ５０２に保持されるものとし、各々実施する設定となっている場合はＯＮ、実施する設定となっていない場合はＯＦＦが保持される。なお、逆順印刷や製本印刷の設定に関する印刷設定情報がプリントチケットに含まれていない場合は、通常の正順印刷を実施する設定であると見なす。また、図示のレイアウトフィルタ情報に保持される変数Ｍ，Ｎ，Ｉ，Ｊ，Ｋ，Ｈ，Ｔは、後述する処理で使用される。
【０１２２】
次に、レイアウトフィルタ４１１は、ステップＳ３４０４におけるプリントチケットの解析処理の結果から、逆順印刷を実施する設定となっているかを判断する（ステップＳ３４０５）。ここでは、図２５に示すレイアウトフィルタ情報の逆順フラグ５０１がＯＮかＯＦＦかで判断される。逆順フラグがＯＮの場合は、後述する逆順印刷処理が実施される（ステップＳ３４０７）。
【０１２３】
一方、逆順フラグがＯＦＦの場合は、レイアウトフィルタ４１１は、製本印刷を実施する設定となっているかを判断する（ステップＳ３４０６）。ここでは、図２５に示すレイアウトフィルタ情報の製本フラグ５０２がＯＮかＯＦＦかで判断される。製本フラグがＯＮの場合は（ステップＳ３４０６でＹＥＳ）、後述する製本印刷処理が実施される（ステップＳ３４０８）。一方、製本フラグがＯＦＦの場合は（ステップＳ３４０６でＮＯ）、何も行わずに本処理を終了する。
【０１２４】
次に、図１５を用いて、図１４のステップＳ３４０７における逆順印刷処理の詳細を説明する。
【０１２５】
図１５は、第１の実施形態における逆順印刷処理の概要を示すフローチャートである。
【０１２６】
第１の実施形態における逆順印刷処理では、レイアウトフィルタ４１１が、図１４のステップＳ３４０１でフィルタパイプラインマネージャ４１０から受け取ってステップＳ３４０２で伸張したＸＰＳ文書を元に、逆順印刷時に適したデータ順のＸＰＳ文書を生成する。具体的には、第１のパス変更処理（ステップＳ１００１）に続いて、第１のＺＩＰデータ生成処理（ステップＳ１００２）が実施される。これらの処理の詳細については後述する。
【０１２７】
次に、図１６を用いて、図１５のステップＳ１００１における第１のパス変更処理の詳細を説明する。
【０１２８】
図１６は、図１５のステップＳ１００１における第１のパス変更処理の詳細を示すフローチャートである。
【０１２９】
第１のパス変更処理では、レイアウトフィルタ４１１は、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のＦＤとＦＰの一部のファイルのパスを変更し、逆順印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成する。
【０１３０】
具体的には、まず、レイアウトフィルタ４１１は、ＸＰＳ文書におけるドキュメント数を取得する（ステップＳ１１０１）。ドキュメント数については、ＦＤＳを解析し、ＦＤが幾つ存在しているかを調べることにより取得することができる。次に、レイアウトフィルタ４１１は、取得したドキュメント数を当該レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域に保持する（ステップＳ１１０２）。ここでは、ドキュメント数がメモリ領域の変数Ｍに保持される。
【０１３１】
次に、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するために、ＦＤの一部のファイルのパスを変更する必要があるかを判断し、必要がある場合には、当該ファイルのパスを変更する。ここでは、ドキュメント数が１個の場合には当該ファイルのパスの変更を行う必要はなく、２個以上の場合には当該ファイルのパスの変更を行う必要がある。具体的には、レイアウトフィルタ４１１は、変数Ｍが１以上かを判断し（ステップＳ１１０３）、変数Ｍが１より大きい場合は、ＦＤパス変更処理を実施する（ステップＳ１１０４）。一方、変数Ｍが１以下の場合はステップＳ１１０４のＦＤパス変更処理を行わず、ステップＳ１１０５へ進む。
【０１３２】
ここで、ＦＤパス変更処理の詳細について図１７を用いて説明する。
【０１３３】
図１７は、図１６のステップＳ１１０４におけるＦＤパス変更処理の詳細を示すフローチャートである。
【０１３４】
ＦＤパス変更処理では、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順にＦＤが並び変わるよう、各ＦＤのパスを逆の順序に入れ替える。例えば、ＸＰＳ文書中に４個のドキュメントが存在する場合、４個目のドキュメントを表すＦＤのパスを１個目のドキュメントを表すＦＤのパスに変更し、３個目のドキュメントを表すＦＤのパスを２個目のドキュメントを表すＦＤのパスに変更し、２個目のドキュメントを表すＦＤのパスを３個目のドキュメントを表すＦＤのパスに変更し、１個目のドキュメントを表すＦＤのパスを４個目のドキュメントを表すＦＤのパスに変更する。
【０１３５】
具体的には、まず、レイアウトフィルタ４１１は、レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域の変数Ｉを０で初期化する（ステップＳ１２０１）。次に、レイアウトフィルタ４１１は、（Ｍ−Ｉ）番目のドキュメントを表すＦＤのパスを（Ｉ＋１）番目のドキュメントを表すＦＤのパスに変更する（ステップＳ１２０２）。例えば、変数Ｍが５で、変数Ｉが０のとき、５番目のドキュメントを表すＦＤのパスが「／Ｄｏｃｕｍｅｎｔ／５／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｘｍｌ」であり、１番目のドキュメントを表すＦＤのパスが「／Ｄｏｃｕｍｅｎｔ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｘｍｌ」である場合は、前者のパスを「／Ｄｏｃｕｍｅｎｔ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｘｍｌ」に変更する。ここで、変更後に同名のパスが一時的にも複数存在せぬよう、テンポラリディレクトリ内で変更処理を行うなど工夫する。以後、Ｘ番目のドキュメントを表すＦＤを「ＦＤ（Ｘ）」と表記する。
【０１３６】
次に、レイアウトフィルタ４１１は、変数Ｉに１を加算する（ステップＳ１２０３）。つまり、幾つ目のドキュメントに対してＦＤのパスの変更を行ったかを記憶する。続いて、レイアウトフィルタ４１１は、変数Ｉと変数Ｍとを比較し（ステップＳ１２０４）、変数Ｉが変数Ｍよりも小さい場合には、ステップＳ１２０２〜Ｓ１２０３を繰り返す。ステップＳ１２０２〜Ｓ１２０３の処理が繰り返された結果、変数Ｉが変数Ｍ以上となった際に、本ＦＤパス変更処理を終了する。つまり、全てのドキュメントに対してＦＤのパスの変更を行ったかを判断しながら、全てのドキュメントに対してＦＤのパスの変更を実施する。この結果、ステップＳ１２０１〜Ｓ１２０４により、全てのＦＤのパスは逆順となる。
【０１３７】
図１６に戻り、ステップＳ１１０６〜Ｓ１１１１では、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順に全ドキュメントのＦＰが並び変わるよう、ドキュメント毎に各々のＦＰのパスを逆の順序に入れ替える。例えば、ＸＰＳ文書中に２個のドキュメントが存在し、１個目のドキュメントは全４ページ、２個目のドキュメントが全３ページの場合には、まず、１個目のドキュメントについて、４ページ目を表すＦＰのパスを１ページ目を表すＦＰのパスに変更し、３ページ目を表すＦＰのパスを２ページ目を表すＦＰのパスに変更し、２ページ目を表すＦＰのパスを３ページ目を表すＦＰのパスに変更し、１ページ目を表すＦＰのパスを４ページ目を表すＦＰのパスに変更する。
【０１３８】
次に、２個目のドキュメントについて、３ページ目を表すＦＰのパスを１ページ目を表すＦＰのパスに変更し、２ページ目を表すＦＰのパスを２ページ目を表すＦＰのパスに変更し（つまり、２ページ目を表すＦＰのパスは変わらない）、１ページ目を表すＦＰのパスを３ページ目を表すＦＰのパスに変更する。ここで、当該ドキュメントの全ページ数が１ページの場合には当該ファイルのパスの変更を行う必要はなく、２ページ以上の場合には当該ファイルのパスの変更を行う必要がある。
【０１３９】
具体的には、まず、レイアウトフィルタ４１１は、変数Ｉを０で初期化する（ステップＳ１１０５）。次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントのページ数を取得する（ステップＳ１１０６）。ページ数については、当該ＦＤを解析し、ＦＰが幾つ存在しているかを調べることにより取得することができる。
【０１４０】
次に、レイアウトフィルタ４１１は、取得した（Ｉ＋１）番目のドキュメントのページ数を当該レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域に保持する（ステップＳ１１０７）。ここでは、（Ｉ＋１）番目のドキュメントのページ数がメモリ領域の変数Ｎに保持される。
【０１４１】
次に、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するために、当該ドキュメントのＦＰの一部のファイルのパスを変更する必要があるかを判断し、必要がある場合には、当該ファイルのパスを変更する。ここでは、ドキュメントの全ページ数が１ページの場合には当該ファイルのパスの変更を行う必要はなく、２ページ以上の場合には当該ファイルのパスの変更を行う必要がある。具体的には、レイアウトフィルタ４１１は、変数Ｎが１以上かを判断し（ステップＳ１１０８）、変数Ｎが１より大きい場合は、第１のＦＰパス変更処理を実施する（ステップＳ１１０９）。一方、変数Ｎが１以下の場合はステップＳ１１０９の処理は行わず、ステップＳ１１１０へ進む。
【０１４２】
ここで、第１のＦＰパス変更処理の詳細について図１８を用いて説明する。
【０１４３】
図１８は、図１７のステップＳ１１０９における第１のＦＰパス変更処理の詳細を示すフローチャートである。
【０１４４】
第１のＦＰパス変更処理では、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順に当該ドキュメントのＦＰが並び変わるよう、各ＦＰのパスを逆の順序に入れ替える。例えば、ＸＰＳ文書中のドキュメントの全ページ数が４ページの場合、当該ドキュメントの４ページ目を表すＦＰのパスを当該ドキュメントの１ページ目を表すＦＰのパスに変更し、当該ドキュメントの３ページ目を表すＦＰのパスを当該ドキュメントの２ページ目を表すＦＰのパスに変更し、当該ドキュメントの２ページ目を表すＦＰのパスを当該ドキュメントの３ページ目を表すＦＰのパスに変更し、当該ドキュメントの１ページ目を表すＦＰのパスを当該ドキュメントの４ページ目を表すＦＰのパスに変更する。
【０１４５】
具体的には、まず、レイアウトフィルタ４１１は、レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域の変数Ｊを０で初期化する（ステップＳ１３０１）。続いて、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントの（Ｎ−Ｊ）番目のページを表すＦＰのパスを、（Ｉ＋１）番目のドキュメントの（Ｎ−Ｊ）番目のページを表すＦＰのパスに変更する（ステップＳ１３０２）。例えば、変数Ｉが０で、変数Ｎが１０で、変数Ｊが０のとき、１番目のドキュメントの１０番目のページを表すＦＰのパスが「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／１０．ｘｍｌ」であり、１番目のドキュメントの１番目のページを表すＦＰのパスが「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／１．ｘｍｌ」である場合は、前者のパスを「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／１．ｘｍｌ」に変更する。ここで、変更後に同名のパスが一時的にも複数存在せぬよう、テンポラリディレクトリ内で変更処理を行うなど工夫する。以後、Ｘ番目のドキュメントのＹ番目のページを表すＦＰを「ＦＤ（Ｘ）．ＦＰ（Ｙ）」と表記する。
【０１４６】
次に、レイアウトフィルタ４１１は、変数Ｊに１を加算する（ステップＳ１３０３）。つまり、ＦＰのパスの変更を幾つ目のページに対して行ったかを記憶する。続いて、レイアウトフィルタ４１１は、変数Ｊと変数Ｎを比較し（ステップＳ１３０４）、変数Ｊが変数Ｎよりも小さい場合には、ステップＳ１３０２〜Ｓ１３０３を繰り返す。ステップＳ１３０２〜Ｓ１３０３の処理が繰り返された結果、変数Ｊが変数Ｎ以上となった際に、本第１のＦＰパス変更処理を終了する。つまり、全てのページに対してＦＰのパスの変更を行ったかを判断しながら、全てのページに対してＦＰのパスの変更が実施される。この結果、ステップＳ１３０１〜Ｓ１３０４により、当該ドキュメントの全てのＦＰのパスは逆順となる。
【０１４７】
図１６に戻り、レイアウトフィルタ４１１は、変数Ｉに１を加算する（ステップＳ１１１０）。つまり、必要なドキュメントに対して、ＦＰのパスの変更を幾つ目のドキュメントに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｉと変数Ｍとを比較し（ステップＳ１１１１）、変数Ｉが変数Ｍよりも小さい場合には、ステップＳ１１０６〜Ｓ１１１０を繰り返す。ステップＳ１１０６〜Ｓ１１１０は、変数Ｉが変数Ｍ以上になるまで繰り返される。つまり、必要な全てのドキュメントに対してＦＰのパスの変更を行ったかを判断しながら、必要な全てのドキュメントに対してＦＰのパスの変更が実施される。この結果、ステップＳ１１０５〜Ｓ１１１１において、全てのドキュメントは、ドキュメント毎に全てのＦＰのパスが逆順となる。
【０１４８】
次に、図１９を用いて、図１５のステップＳ１００２における第１のＺＩＰデータ生成処理の詳細を説明する。
【０１４９】
図１９は、図１５のステップＳ１００２における第１のＺＩＰデータ生成処理の詳細を示すフローチャートである。
【０１５０】
まず、レイアウトフィルタ４１１は、ＯＳが提供する印刷システム（ＷＰＦ印刷サポート４０８）によりインタリーブ化されたパーツのＺ番目のパーツを「パーツ名[Ｚ−１]」と表すと、まずレイアウトフィルタ４１１は、ｒｅｌｓ／．ｒｅｌｓ［０］をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ１４０１）。つまり、次に参照すべきＦＤＳへの参照タグを有する＿ｒｅｌｓ／．ｒｅｌｓパーツデータを１番目の位置に書き出す。
【０１５１】
なお、インタリーブ化は、インタリーブの機能を備えている図２のアプリケーション２０１がインタリーブを行ってもよく、また、アプリケーション２０１はＯＳの機能を用いて（例えば、ＯＳの提供するＡＰＩを用いる）インタリーブを行ってよい。
【０１５２】
次に、レイアウトフィルタ４１１は、変数Ｉを０で初期化する（ステップＳ１４０２）。続いて、レイアウトフィルタ４１１は、インタリーブ化されたＦＤＳ［Ｉ］をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ１４０３）。つまり、次に参照すべきＦＤへの参照タグを有するＦＤＳパーツデータを次の位置に書き出す。
【０１５３】
次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントのページ数を取得する（ステップＳ１４０４）。取得方法は前述した方法と同様である。次に、レイアウトフィルタ４１１は、取得した（Ｉ＋１）番目のドキュメントのページ数を変数Ｎに保持する（ステップＳ１４０５）。次に、レイアウトフィルタ４１１は、変数Ｊを０で初期化する（ステップＳ１４０６）。
【０１５４】
次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤ（Ｉ＋１）［Ｊ］をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ１４０７）。つまり、次に参照すべきＦＰへの参照タグを有するＦＤパーツデータを次の位置に書き出す。
【０１５５】
次に、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）．ＦＰ（Ｊ＋１）をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ１４０８）。つまり、次に参照すべきＦＰパーツデータを次の位置に書き出す。
【０１５６】
次に、レイアウトフィルタ４１１は、変数Ｊに１を加算する（ステップＳ１４０９）。つまり、ＦＤパーツデータ及びＦＰパーツデータの書き出しを当該ドキュメントの幾つ目のページに対して行ったかを記憶する。
【０１５７】
次に、レイアウトフィルタ４１１は、変数Ｊと変数Ｎとを比較し（ステップＳ１４１０）、変数Ｊが変数Ｎよりも小さい場合には、ステップＳ１４０７〜Ｓ１４０９を繰り返す。ステップＳ１４０７〜Ｓ１４０９は、変数Ｊが変数Ｎ以上になるまで繰り返される。つまり、レイアウトフィルタ４１１は、当該ドキュメントの全てのページのＦＤパーツデータ及びＦＰパーツデータの書き出しを行ったかを判断しながら、当該ドキュメントの全てのページのＦＤパーツデータ及びＦＰパーツデータの書き出しが実施される。
【０１５８】
次に、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）［Ｊ］、つまり、インタリーブ化された当該ドキュメントの最後のＦＤパーツデータをＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ１４１１）。当該ドキュメントの残りのＦＤパーツデータの書き出しが実施される。この結果、ステップＳ１４０４〜Ｓ１４１１により、インタリーブ化された当該ドキュメントの全てのＦＤ及び全てのＦＰが逆順のデータ順に並べられる。
【０１５９】
次に、レイアウトフィルタ４１１は、変数Ｉに１を加算する（ステップＳ１４１２）。つまり、ＦＤＳパーツデータ、ＦＤパーツデータ、及びＦＰパーツデータの書き出しを幾つ目のドキュメントに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｉと変数Ｍとを比較し（ステップＳ１４１３）、変数Ｉが変数Ｍよりも小さい場合には、ステップＳ１４０３〜Ｓ１４１２を繰り返す。ステップＳ１４０３〜Ｓ１４１２は、変数Ｉが変数Ｍ以上になるまで繰り返される。つまり、レイアウトフィルタ４１１は、全てのドキュメントの全てのページのＦＤＳパーツデータ、ＦＤパーツデータ、及びＦＰパーツデータの書き出しを行ったかを判断しながら、全てのドキュメントの全てのページのＦＤＳパーツデータ、ＦＤパーツデータ、及びＦＰパーツデータの書き出しが実施される。
【０１６０】
次に、レイアウトフィルタ４１１は、ＦＤＳ［Ｉ］すなわちインタリーブ化された最後のＦＤＳパーツデータをＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ１４１４）。つまり、残りのＦＤＳパーツデータの書き出しが実施される。次に、レイアウトフィルタ４１１は、＿ｒｅｌｓ／．ｒｅｌｓ［１］すなわちインタリーブ化された最後の＿ｒｅｌｓ／．ｒｅｌｓパーツデータをＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ１４１５）。つまり、残りの＿ｒｅｌｓ／．ｒｅｌｓパーツデータの書き出しが実施される。
【０１６１】
以上の処理から、インタリーブ化された全てのＦＤＳ、インタリーブ化された全てのドキュメントの全てのＦＤ、全てのドキュメントの全てのＦＰは逆順のデータ順に並べられる。ただし、例えば、イメージファイルやフォントファイルなどのその他のパーツに関するＬｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータは、解凍前のＺＩＰデータと同様、適切なデータ順に位置付けるものとする。
【０１６２】
本実施の形態では、＿ｒｅｌｓ／．ｒｅｌｓがインタリーブで２個に分割された場合を想定したが、サムネイル画像に関する情報等が含まれている場合には、３個以上に分割されることもある。その場合、それに関するＬｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータは、イメージファイルやフォントファイルなどのその他のパーツのように、解凍前のＺＩＰデータと同様、適切なデータ順に位置付けるものとする。この際、＿ｒｅｌｓ／．ｒｅｌｓ［１］と表記され、インタリーブ化された＿ｒｅｌｓ／．ｒｅｌｓの最後のパーツデータは添え字が異なる値となるが、その場合はステップＳ１４１５の処理は当然、その最後のパーツデータに対して実施されるものとする。
【０１６３】
次に、図２０を用いて、図１４のステップＳ３４０８における製本印刷処理の詳細を説明する。
【０１６４】
図２０は、第１の実施形態における製本印刷処理の詳細を示すフローチャートである。
【０１６５】
第１の実施形態における製本印刷処理では、レイアウトフィルタ４１１が、図１４のステップＳ３４０１でフィルタパイプラインマネージャ４１０から受け取ってステップＳ３４０２で伸張したＸＰＳ文書を元に、製本印刷時に適したデータ順のＸＰＳ文書を生成する。具体的には、第２のパス変更処理（ステップＳ２３０１）に続いて、第１のＺＩＰデータ生成処理が実施される（ステップＳ２３０２）。この第１のＺＩＰデータ生成処理は、図１４のステップＳ３４０７における逆順印刷処理Ａの処理と同様である。
【０１６６】
次に、図２１を用いて、図２０のステップＳ２３０１における第２のパス変更処理の詳細を説明する。
【０１６７】
図２１は、図２０のステップＳ２３０１における第２のパス変更処理の詳細を示すフローチャートである。
【０１６８】
第２のパス変更処理では、レイアウトフィルタ４１１は、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のＦＤとＦＰの一部のファイルのパスを変更して、製本印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成する。
【０１６９】
具体的には、まず、レイアウトフィルタ４１１は、ＸＰＳ文書におけるドキュメント数を取得する（ステップＳ２４０１）。取得方法については、前述した方法と同様である。次に、レイアウトフィルタ４１１は、取得したドキュメント数を変数Ｍに保持する（ステップＳ２４０２）。
【０１７０】
次に、レイアウトフィルタ４１１は、変数Ｉを０で初期化する（ステップＳ２４０３）。次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントのページ数を取得する（ステップＳ２４０４）。取得方法については、前述した方法と同様である。次に、レイアウトフィルタ４１１は、取得した（Ｉ＋１）番目のドキュメントのページ数を変数Ｎに保持する（ステップＳ２４０５）。次に、レイアウトフィルタ４１１は、追加ＦＰ数算出処理を実施する（ステップＳ２４０６）。
【０１７１】
ここで、追加ＦＰ数算出処理の詳細について図２２を用いて説明する。
【０１７２】
図２２は、図２１のステップＳ２４０６における追加ＦＰ数算出処理の詳細を示すフローチャートである。
【０１７３】
追加ＦＰ数算出処理では、レイアウトフィルタ４１１は、製本印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成する上で、追加する必要がある白紙の枚数を算出する。ここで、白紙を追加するためには、白紙の描画情報を有するＦＰパーツデータを追加する必要があり、その個数は追加すべき白紙の枚数と同数である。
【０１７４】
具体的には、まず、レイアウトフィルタ４１１は、レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域の変数Ｈを０で初期化する（ステップＳ２５０１）。次に、レイアウトフィルタ４１１は、変数Ｎに変数Ｈを加算し、その値が４で割り切れるかを判断する（ステップＳ２５０２）。４で割り切れない場合、レイアウトフィルタ４１１は、変数Ｈに１を加算し（ステップＳ２５０３）、変数Ｎに変数Ｈを加算した値が４で割り切れるようになるまでステップＳ２５０２〜Ｓ２５０３を繰り返す。一方、変数Ｎに変数Ｈを加算した値が４で割り切れたときは、追加ＦＰ数算出処理を終了する。このときの変数Ｈの値が追加する必要があるＦＰの個数である。
【０１７５】
図２１に戻り、レイアウトフィルタ４１１は、製本印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成する上で、ＦＰを追加する必要があるかを判断する（ファイル追加決定）。具体的には、レイアウトフィルタ４１１は、変数Ｈが０より大きいかを判断する（ステップＳ２４０７）。変数Ｈが０より大きい場合、レイアウトフィルタ４１１は、パーツデータ追加処理（ファイル追加）を実施する（ステップＳ２４０８）。一方、変数Ｈが０以下の場合はステップＳ２４０８の処理は行わず、ステップＳ２４０９へ進む。
【０１７６】
ここで、パーツデータ追加処理の詳細について図２３を用いて説明する。
【０１７７】
図２３は、図２１のステップＳ２４０８におけるパーツデータ追加処理の詳細を示すフローチャートである。
【０１７８】
パーツデータ追加処理では、レイアウトフィルタ４１１は、製本印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成する上で必要となるＦＰを追加する。まず、ＦＰの追加に際し、元々のＸＰＳ文書に含まれる当該ドキュメントのインタリーブ化されたＦＤの最後のパーツデータが、ＦＰを追加した後の最後のパーツデータになるよう、添字を変更する。
【０１７９】
具体的には、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）［Ｎ］のパーツ名の添え字をＮ＋Ｈに変更する（ステップＳ２６０１）。例えば、１番目のドキュメントの全ページ数が５の場合、Ｈの値は３となる。よって、ＦＤ（１）［５］のパーツ名を、ＦＤ（１）［８］に変更する。
【０１８０】
次に、レイアウトフィルタ４１１は、レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域の変数Ｋを０で初期化する（ステップＳ２６０２）。次に、レイアウトフィルタ４１１は、白紙の描画情報を有するＦＰデータを作成する（ステップＳ２６０３）。白紙の描画情報を有するＦＰデータの記述方法はＸＰＳの描画仕様に従うものとする。
【０１８１】
次に、レイアウトフィルタ４１１は、作成された白紙の描画情報を有するＦＰデータを、当該ドキュメントの最後のページのパーツデータとして追加する。具体的には、ステップＳ２６０３で作成された白紙の描画情報を有するＦＰデータを、ＦＤ（Ｉ＋１）．ＦＰ（Ｎ＋１＋Ｋ）のパーツデータを意味するパス名を有するＦＰとして保存する（ステップＳ２６０４）。例えば、１番目のドキュメントの元々の全ページ数が５で、１番目のドキュメントの１番目のページを表すＦＰのパスが「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／１．ｘｍｌ」で、Ｋが０の場合、ステップＳ２６０３で作成した白紙の描画情報を有するＦＰデータを、ＦＤ（１）．ＦＰ（６）のパーツデータを意味するパス名を有するＦＰ、つまり、１番目のドキュメントの６番目のページのＦＰのパスを表す「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／６．ｘｍｌ」として保存する。
【０１８２】
次に、レイアウトフィルタ４１１は、追加した白紙の描画情報を有するＦＰパーツデータへの参照タグを有するＦＤパーツデータを作成する。具体的には、ＦＤ（Ｉ＋１）．ＦＰ（Ｎ＋１＋Ｋ）への参照タグを有するＦＤデータを作成する（ステップＳ２６０５）。例えば、「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／６．ｘｍｌ」への参照タグを有するＦＤデータを作成する。ＦＤ（Ｉ＋１）．ＦＰ（Ｎ＋１＋Ｋ）への参照タグを有するＦＤデータの記述方法はＸＰＳの描画仕様に従うものとする。
【０１８３】
次に、レイアウトフィルタ４１１は、追加した白紙の描画情報を有するＦＰパーツデータへの参照タグを有するＦＤパーツデータを、当該ドキュメントの最後のページのＦＰパーツデータへの参照タグを有するＦＤパーツデータとして追加する。具体的には、ステップＳ２６０５で作成されたＦＤ（Ｉ＋１）．ＦＰ（Ｎ＋１＋Ｋ）への参照タグを有するＦＤデータを、ＦＤ（Ｉ＋１）［Ｎ＋Ｋ］のパーツデータを意味するパス名を有するＦＤとして保存する（ステップＳ２６０６）。例えば、１番目のドキュメントの元々の全ページ数が５で、１番目のドキュメントの１番目のページを表すＦＰへの参照タグを有するインタリーブ化されたＦＤが「／Ｄｏｃｕｍｅｎｔ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｘｍｌ／［０］．ｐｉｅｃｅ」で、Ｋが０の場合、ステップＳ２６０５で作成されたＦＤ（１）．ＦＰ（６）への参照タグを有するＦＤデータを、ＦＤ（１）［５］のパーツデータを意味するパス名を有するＦＤ、つまり、１番目のドキュメントの６番目のページを表すＦＰへの参照タグを有するインタリーブ化されたＦＤのパスを表す「／Ｄｏｃｕｍｅｎｔ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｘｍｌ／［５］．ｐｉｅｃｅ」として保存する。
【０１８４】
次に、レイアウトフィルタ４１１は、変数Ｋに１を加算する（ステップＳ２６０７）。つまり、追加した白紙の描画情報を有するＦＰパーツデータの個数を記憶する。次に、レイアウトフィルタ４１１は、変数Ｋと変数Ｈとを比較し（ステップＳ２６０８）、変数Ｋが変数Ｈよりも小さい場合には、ステップＳ２６０３〜Ｓ２６０７を繰り返す。ステップＳ２６０３〜Ｓ２６０７は、変数Ｋが変数Ｈ以上になるまで繰り返される。変数Ｋが変数Ｈ以上になったときは、パーツデータ追加処理を終了する。つまり、追加ＦＰ数算出処理で追加する必要があると判断された個数分のＦＰパーツデータが全て追加されるまで、ＦＰパーツデータの追加が実施される。
【０１８５】
図２１に戻り、レイアウトフィルタ４１１は、第２のＦＰパス変更処理を実施する（ステップＳ２４０９）。
【０１８６】
ここで、第２のＦＰパス変更処理の詳細について図２４を用いて説明する。
【０１８７】
図２４は、図２１のステップＳ２４０９における第２のＦＰパス変更処理の詳細を示すフローチャートである。
【０１８８】
第２のＦＰパス変更処理では、レイアウトフィルタ４１１は、製本印刷時に適したデータ順に当該ドキュメントのＦＰが並び変わるよう、各々のＦＰのパスを製本印刷時に適した順序に入れ替える。例えば、追加した白紙を含めて全ページ数が８ページの場合、８ページ目を表すＦＰのパスを１ページ目を表すＦＰのパスに変更し、１ページ目を表すＦＰのパスを２ページ目を表すＦＰのパスに変更し、２ページ目を表すＦＰのパスを３ページ目を表すＦＰのパスに変更し、７ページ目を表すＦＰのパスを４ページ目を表すＦＰのパスに変更し、６ページ目を表すＦＰのパスを５ページ目を表すＦＰのパスに変更し、３ページ目を表すＦＰのパスを６ページ目を表すＦＰのパスに変更し、４ページ目を表すＦＰのパスを７ページ目を表すＦＰのパスに変更し、５ページ目を表すＦＰのパスを８ページ目を表すＦＰのパスに変更する。
【０１８９】
具体的には、まず、レイアウトフィルタ４１１は、変数Ｊとレイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域の変数Ｔを各々０で初期化する（ステップＳ２７０１）。次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントの（Ｎ＋Ｈ−２×Ｔ）番目のページを表すＦＰのパスを、（Ｉ＋１）番目のドキュメントの（Ｊ＋１）番目のページを表すＦＰのパスに変更する（ステップＳ２７０２）。例えば、変数Ｉが０で、変数Ｎが５で、変数Ｈが３で、変数Ｊが０で、変数Ｔが０のとき、１番目のドキュメントの８番目のページを表すＦＰのパスが「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／８．ｘｍｌ」である場合、本パスを「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／１．ｘｍｌ」に変更する。
【０１９０】
次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントの（１＋２×Ｔ）番目のページを表すＦＰのパスを、（Ｉ＋１）番目のドキュメントの（Ｊ＋２）番目のページを表すＦＰのパスに変更する（ステップＳ２７０３）。例えば、１番目のドキュメントの１番目のページを表すＦＰのパスが「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／１．ｘｍｌ」である場合、本パスを「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／２．ｘｍｌ」に変更する。
【０１９１】
次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントの（２＋２×Ｔ）番目のページを表すＦＰのパスを、（Ｉ＋１）番目のドキュメントの（Ｊ＋３）番目のページを表すＦＰのパスに変更する（ステップＳ２７０４）。例えば、１番目のドキュメントの２番目のページを表すＦＰのパスが「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／２．ｘｍｌ」である場合、本パスを「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／３．ｘｍｌ」に変更する。
【０１９２】
次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントの（Ｎ＋Ｈ−１−２×Ｔ）番目のページを表すＦＰのパスを、（Ｉ＋１）番目のドキュメントの（Ｊ＋４）番目のページを表すＦＰのパスに変更する（ステップＳ２７０５）。例えば、１番目のドキュメントの７番目のページを表すＦＰのパスが「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／７．ｘｍｌ」である場合、本パスを「／Ｄｏｃｕｍｅｎｔ／１／Ｐａｇｅｓ／４．ｘｍｌ」に変更する。ここで、ステップＳ２７０２〜Ｓ２７０５については、変更後に同名のパスが一時的にも複数存在せぬよう、テンポラリディレクトリ内で変更処理などが行われる。
【０１９３】
次に、レイアウトフィルタ４１１は、変数Ｊに４を加算し、変数Ｔに１を加算する（ステップＳ２７０６）。つまり、ＦＰのパスの変更を幾つ目のページに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｊと、変数Ｎに変数Ｈを加算した値とを比較し（ステップＳ２７０７）、変数Ｊが加算値（Ｎ＋Ｈ）よりも小さい場合には、ステップＳ２７０２〜Ｓ２７０６を繰り返す。ステップＳ２７０２〜Ｓ２７０６の処理が繰り返された結果、変数Ｊが加算値以上となった際に、本第２のＦＰパス変更処理を終了する。つまり、全てのページに対してＦＰのパスの変更を行ったかを判断しながら、全てのページに対してＦＰのパスの変更が実施される。この結果、ステップＳ２７０１〜Ｓ２７０７により、当該ドキュメントの全てのＦＰのパスは製本印刷時の並び順になる。
【０１９４】
図２１に戻り、レイアウトフィルタ４１１は、変数Ｉに１を加算する（ステップＳ２４１０）。つまり、必要なドキュメントに対して、ＦＰのパスの変更を幾つ目のドキュメントに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｉと変数Ｍとを比較し（ステップＳ２４１１）、変数Ｉが変数Ｍよりも小さい場合には、ステップＳ２４０４〜Ｓ２４１０を繰り返す。ステップＳ２４０４〜Ｓ２４１０は、変数Ｉが変数Ｍ以上になるまで繰り返される。つまり、全てのドキュメントに対してＦＰのパスの変更を行ったかを判断しながら、全てのドキュメントに対してＦＰのパスの変更が実施される。この結果、ステップＳ２４０３〜Ｓ２４１１により、全てのドキュメントは、ドキュメント毎に全てのＦＰのパスが製本印刷時の並び順になる。
【０１９５】
最後に、レイアウトフィルタ４１１は、ステップＳ３４０７を実施した際には本ステップで生成したＺＩＰデータを、ステップＳ３４０８を実施した際には本ステップで生成したＺＩＰデータを、ステップＳ３４０７、ステップＳ３４０８を共に行わなかった際にはステップＳ３４０１で取得したＺＩＰデータをＸＰＳ文書としてフィルタパイプラインマネージャ４１０に通知して、全ての処理を終了する。この結果、レイアウトフィルタ４１１は、逆順印刷時は図２９、製本印刷時は図３０のようなデータ順のＸＰＳ文書をフィルタパイプラインマネージャ４１０に通知する。
【０１９６】
上記第１の実施形態によれば、正順印刷でない印刷設定が行われている場合に、ＸＰＳプリントパスが使用される場合に印刷スプールファイルとして生成されるＸＰＳデータから印刷設定に適したデータ順のＸＰＳデータを生成することで、印刷装置の印刷処理を高速化することができる。また、従来の印刷スループットの低下を防ぐと共に、印刷装置の印刷処理を高速化することができる。
【０１９７】
なお、レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域は、図１４〜図２４を用いて説明した処理よりも以前に行われる不図示のレイアウトフィルタ４１１の初期化処理時から利用可能となり、図１４〜図２４で示すフローチャートを用いて説明した処理以降に行われる不図示のレイアウトフィルタ４１１の終了処理時に利用不可となる。ただし、図１４〜図２４に示す処理中で使用されたメモリ領域は、各々必要となった時点で確保され、不要となった時点で開放されるものとする。
【０１９８】
また、本実施形態では、対象とするパーツとして、＿ｒｅｌｓ／．ｒｅｌｓ、ＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ、ＦｉｘｅｄＤｏｃｕｍｅｎｔ、ＦｉｘｅｄＰａｇｅ、イメージファイル、及びフォントファイルを例示したが、ＸＰＳファイルにはこれら以外にもプリントチケットや．ｒｅｌｓの拡張子を有するファイルなどのパーツが存在し、これらのパーツについても、上述した各種パーツと同様に、当該パーツへの参照タグが現れた直後に当該パーツデータを位置付けるものとする。
【０１９９】
[第２の実施形態]
本発明の第２の実施形態は、図１〜図１４で説明した基本的な構成要素や処理が上記第１の実施の形態と同じであり、同一の符号を付してそれらの説明を省略する。以下に、上記第１の実施の形態と異なる点のみを説明する。
【０２００】
第２の実施形態は、上述した第１の実施の形態に対して、レイアウトフィルタ４１１が、ＸＰＳプリントパスにおける印刷制御機能の中で、第１の実施形態とは異なる方法により逆順印刷時及び製本印刷時に印刷設定に適したデータ順のＸＰＳデータを生成する点で相違する。すなわち、図１４におけるステップＳ３４０７の逆順印刷処理とステップＳ３４０８の製本印刷処理で行う処理が第１の実施形態と異なる。これら各処理を図３１、図３９を用いて説明する。
【０２０１】
まず、図３１を用いて、図１４のステップＳ３４０７における第２の実施形態における逆順印刷処理の詳細を説明する。
【０２０２】
図３１は、第２の実施形態における逆順印刷処理の詳細を示すフローチャートである。
【０２０３】
第２の実施形態における逆順印刷処理では、第１の実施形態と同様、レイアウトフィルタ４１１が、図１４のステップＳ３４０１でフィルタパイプラインマネージャ４１０から受け取ってステップＳ３４０２で伸張したＸＰＳ文書を元に、逆順印刷時に適したデータ順のＸＰＳ文書を生成する。具体的には、第１のパーツ編集処理（ステップＳ１５０１）、第１の添え字変更処理（ステップＳ１５０２）に続いて、第２のＺＩＰデータ生成処理（ステップＳ１５０３）が実施される。これらの処理の詳細については後述する。
【０２０４】
次に、図３２を用いて、図３１のステップＳ１５０１における第１のパーツ編集処理の詳細を説明する。
【０２０５】
図３２は、図３１のステップＳ１５０１における第１のパーツ編集処理の詳細を示すフローチャートである。
【０２０６】
第１のパーツ編集処理では、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するため、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のＦＤＳとＦＤの一部のファイルの記述内容を変更する。
【０２０７】
具体的には、まず、レイアウトフィルタ４１１は、ＸＰＳ文書におけるドキュメント数を取得する（ステップＳ１６０１）。ドドキュメント数については、ＦＤＳを解析し、ＦＤが幾つ存在しているかを調べることにより取得することができる。次に、レイアウトフィルタ４１１は、取得したドキュメント数を当該レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域に保持する（ステップＳ１６０２）。ここでは、ドキュメント数がメモリ領域の変数Ｍに保持される。
【０２０８】
次に、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するために、ＦＤＳの一部のファイルの記述内容を変更する必要があるかを判断し、必要がある場合には、当該ファイルの記述内容を変更する。ここでは、ドキュメント数が１個の場合には当該ファイルの記述内容の変更を行う必要はなく、２個以上の場合には当該ファイルの記述内容の変更を行う必要がある。具体的には、レイアウトフィルタ４１１は、変数Ｍが１以上かを判断し（ステップＳ１６０３）、変数Ｍが１より大きい場合は、ＦＤＳ編集処理を実施する（ステップＳ１６０４）。一方、変数Ｍが１以下の場合はステップＳ１６０４の処理は行わず、ステップＳ１６０５へ進む。
【０２０９】
ここで、ＦＤＳ編集処理の詳細について図３３を用いて説明する。
【０２１０】
図３３は、図３２のステップＳ１６０４におけるＦＤＳ編集処理の詳細を示すフローチャートである。
【０２１１】
ＦＤＳ編集処理では、インタリーブ化されたＦＤＳの各パーツを逆順に並び替えた際に、ＸＭＬやＸＰＳの仕様に反することがないように、１つ目のドキュメントへの参照タグを有するパーツの先頭に記述された不要な記述を削除すると共に、前述した削除処理で削除した記述内容を最後のドキュメントへの参照タグを有するパーツの先頭に追記する。例えば、図９のパーツ８５８の「＜？ｘｍｌ  ｖｅｒｓｉｏｎ＝”１．０”  ｅｎｃｏｄｉｎｇ＝”ｕｔｆ−８”＞」という記述と、「＜ＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ  ｘｍｌｎｓ＝”ｈｔｔｐ：／／ｓｃｈｅｍａｓ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｘｐｓ／２００５／０６”＞」という記述をパーツ８５８の先頭から削除し、これらの記載をパーツ８５９の先頭に追記する。
【０２１２】
具体的には、まず、レイアウトフィルタ４１１は、インタリーブ化されたＦＤＳの最初のパーツを取得する（ステップＳ１７０１）。次に、レイアウトフィルタ４１１は、本パーツの記述内容より、ＦＤへの参照タグの位置を検索する（ステップＳ１７０２）。次に、レイアウトフィルタ４１１は、ステップＳ１７０２で検索した参照タグよりも前方に存在する全てのタグの記述内容を当該レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域の変数バッファＳ（不図示）に保持する（ステップＳ１７０３）。ここでは、ステップＳ１７０２で検索した参照タグよりも前方に存在する全てのタグの記述内容がメモリ領域の変数バッファＳに保持される。
【０２１３】
次に、レイアウトフィルタ４１１は、ステップＳ１７０２で検索した参照タグよりも前方に存在する全てのタグの記述内容をＦＤＳの最初のパーツから削除する（ステップＳ１７０４）。次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤＳの最後から２番目のパーツを取得する（ステップＳ１７０５）。次に、レイアウトフィルタ４１１は、ステップＳ１７０３で変数バッファＳに保持した参照タグの記述内容を、ステップＳ１７０５で取得したパーツの先頭に追記する（ステップＳ１７０６）。
【０２１４】
なお、本実施の形態では、インタリーブ化されたＦＤＳの最初のパーツに対してステップＳ１７０２の処理を、インタリーブ化されたＦＤＳの最後から２番目のパーツに対してステップＳ１７０６の処理を行ったが、ステップＳ１７０２の処理を１つ目のドキュメントへの参照タグを有するパーツに対して、ステップＳ１７０６の処理を最後のドキュメントへの参照タグを有するパーツに対して実施すべきであるため、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のインタリーブ化されたＦＤＳの各パーツの構成に応じて、ステップＳ１７０１及びステップＳ１７０５で取得すべきパーツを適宜変更するものとする。
【０２１５】
図３２に戻り、ステップＳ１６０５〜Ｓ１６１１では、レイアウトフィルタ４１１は、インタリーブ化されたＦＤの各パーツを逆順に並び替えた際に、ＸＭＬやＸＰＳの仕様に反することがないように、１つ目のページへの参照タグを有するパーツの先頭に記述された不要な記述を削除し、前述した削除処理で削除した記述内容を最後のページへの参照タグを有するパーツの先頭に追記する処理を、全ドキュメントのＦＤに対して実施する。例えば、図９のパーツ８５３の「＜？ｘｍｌ  ｖｅｒｓｉｏｎ＝”１．０”  ｅｎｃｏｄｉｎｇ＝”ｕｔｆ−８”＞」という記述と、「＜ＦｉｘｅｄＤｏｃｕｍｅｎｔ  ｘｍｌｎｓ＝”ｈｔｔｐ：／／ｓｃｈｅｍａｓ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｘｐｓ／２００５／０６”＞」という記述をパーツ８５３の先頭から削除し、これらの記述をパーツ８５４の先頭に追記する。このような処理が全ドキュメントのＦＤに対して実施される。ここで、当該ドキュメントの全ページ数が１ページの場合には、当該ファイルの記述内容の変更を行う必要はなく、２ページ以上の場合には当該ファイルの記述内容の変更を行う必要がある。
【０２１６】
具体的には、まず、レイアウトフィルタ４１１は、変数Ｉを０で初期化する（ステップＳ１６０５）。次に、レイアウトフィルタ４１１は、Ｉ＋１番目のドキュメントのページ数を取得する（ステップＳ１６０６）。レイアウトフィルタ４１１は、当該ＦＤを解析し、ＦＰが幾つ存在しているかを調べることによりページ数を取得することができる。
【０２１７】
次に、レイアウトフィルタ４１１は、取得したページ数をレイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域に保持する（ステップＳ１６０７）。ここでは、ページ数がメモリ領域の変数Ｎに保持される。
【０２１８】
次に、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するために、当該ドキュメントのＦＤの一部のファイルの記述内容を変更する必要があるかを判断し、必要がある場合には、当該ファイルの記述内容を変更する。ここで、当該ドキュメントの全ページ数が１ページの場合には当該ファイルの記述内容の変更を行う必要はなく、２ページ以上の場合には当該ファイルの記述内容の変更を行う必要がある。
【０２１９】
具体的には、レイアウトフィルタ４１１は、変数Ｎが１以上かを判断する（ステップＳ１６０８）。変数Ｎが１より大きい場合は、第１のＦＤ編集処理を実施する（ステップＳ１６０９）。一方、Ｎが１以下の場合はステップＳ１６０９の処理は行わず、ステップＳ１６１０へ進む。
【０２２０】
ここで、図３２のステップＳ１６０９における第１のＦＤ編集処理の詳細について図３４を用いて説明する。
【０２２１】
図３４は、図３２のステップＳ１６０９における第１のＦＤ編集処理の詳細を示すフローチャートである。
【０２２２】
第１のＦＤ編集処理では、レイアウトフィルタ４１１は、インタリーブ化されたＦＤの各パーツを逆順に並び替えた際に、ＸＭＬやＸＰＳの仕様に反することがないように、１つ目のページへの参照タグを有するパーツの先頭に記述された不要な記述を削除し、前述した削除処理で削除した記述内容を最後のページへの参照タグを有するパーツの先頭に追記する。例えば、図９のパーツ８５３の「＜？ｘｍｌ  ｖｅｒｓｉｏｎ＝”１．０”  ｅｎｃｏｄｉｎｇ＝”ｕｔｆ−８”＞」という記述と、「＜ＦｉｘｅｄＤｏｃｕｍｅｎｔ  ｘｍｌｎｓ＝”ｈｔｔｐ：／／ｓｃｈｅｍａｓ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｘｐｓ／２００５／０６”＞」という記述をパーツ８５３の先頭から削除し、これらの記述をパーツ８５４の先頭に追記する。
【０２２３】
具体的には、まず、レイアウトフィルタ４１１は、インタリーブ化されたＦＤの最初のパーツを取得する（ステップＳ１８０１）。次に、本パーツの記述内容より、ＦＰへの参照タグの位置を検索する（ステップＳ１８０２）。次に、レイアウトフィルタ４１１は、ステップＳ１８０２で検索した参照タグよりも前方に存在する全てのタグの記述内容を当該レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域の変数バッファＳに保持する（ステップＳ１８０３）。ここでは、ステップＳ１８０２で検索した参照タグよりも前方に存在する全てのタグの記述内容がメモリ領域の変数バッファＳに保持される。
【０２２４】
次に、レイアウトフィルタ４１１は、ステップＳ１８０２で検索した参照タグよりも前方に存在する全てのタグの記述内容をＦＤの最初のパーツから削除する（ステップＳ１８０４）。次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤの最後から２番目のパーツを取得する（ステップＳ１８０５）。次に、レイアウトフィルタ４１１は、ステップＳ１８０３で変数バッファＳに保持した参照タグの記述内容を、ステップＳ１８０５で取得したパーツの先頭に追記する（ステップＳ１８０６）。
【０２２５】
なお、本実施の形態では、インタリーブ化されたＦＤの最初のパーツに対してステップＳ１８０２の処理を、インタリーブ化されたＦＤの最後から２番目のパーツに対してステップＳ１８０６の処理を行ったが、ステップＳ１８０２の処理を１つ目のドキュメントへの参照タグを有するパーツに対して、ステップＳ１８０６の処理を最後のドキュメントへの参照タグを有するパーツに対して実施すべきであるため、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のインタリーブ化されたＦＤの各パーツの構成に応じて、ステップＳ１８０１及びステップＳ１８０５で取得すべきパーツを適宜変更するものとする。
【０２２６】
図３２に戻り、レイアウトフィルタ４１１は、変数Ｉに１を加算する（ステップＳ１６１０）。つまり、必要なドキュメントに対して、ＦＤの記述内容の変更を幾つ目のドキュメントに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｉと変数Ｍとを比較し（ステップＳ１６１１）、変数Ｉが変数Ｍよりも小さい場合には、ステップＳ１６０６〜Ｓ１６１０を繰り返す。ステップＳ１６０６〜Ｓ１６１０は、変数ＩがＭ以上になるまで繰り返す。つまり、必要な全てのドキュメントに対してＦＤの記述内容の変更を行ったかを判断しながら、必要な全てのドキュメントに対してＦＤの記述内容の変更を実施する。この結果、ステップＳ１６０５〜Ｓ１６１１により、全てのドキュメントは、逆順印刷時のデータ順に並び替えた際に、ＸＭＬやＸＰＳの仕様に反することがないよう、ドキュメント毎に全てのＦＤの記述内容が変更される。
【０２２７】
次に、図３５を用いて、図３１のステップＳ１５０２における第１の添え字変更処理の詳細を説明する。
【０２２８】
図３５は、図３１のステップＳ１５０２における第１の添え字変更処理の詳細を示すフローチャートである。
【０２２９】
第１の添え字変更処理では、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順のＸＰＳ文書の元となる伸張データが生成されるため、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のインタリーブ化されたＦＤＳとＦＤの各パーツの添え字の数値を変更する。
【０２３０】
まず、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するために、インタリーブ化されたＦＤＳの各パーツの添え字の数値を変更する必要があるかを判断し、必要がある場合には、添え字の数値を変更する。ここで、ドキュメント数が１個の場合には添え字の数値の変更を行う必要はなく、２個以上の場合には添え字の数値の変更を行う必要がある。ここで、ドキュメント数はステップＳ１６０１で取得し、ステップＳ１６０２で変数Ｍに保持してあるため、こちらを使用する。
【０２３１】
具体的には、レイアウトフィルタ４１１は、変数Ｍが１以上かを判断し（ステップＳ１９０１）、Ｍが１より大きい場合は、ＦＤＳ添え字変更処理を実施する（ステップＳ１９０２）。一方、変数Ｍが１以下の場合はステップＳ１９０２の処理を行わず、ステップＳ１９０３へ進む。
【０２３２】
ここで、図３５のステップＳ１９０２におけるＦＤＳ添え字変更処理の詳細について図３６を用いて説明する。
【０２３３】
図３６は、図３５のステップＳ１９０２におけるＦＤＳ添え字変更処理の詳細を示すフローチャートである。
【０２３４】
ＦＤＳ添え字変更処理では、ドキュメントが逆順のデータ順になるよう、ＦＤへの参照タグを有するインタリーブ化されたＦＤＳの各パーツの添え字の数値が変更される。例えば、ＦＤＳが５個のパーツにインタリーブ化されており、１個目のパーツ（／ＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ．ｆｄｓｅｑ／［０]．ｐｉｅｃｅ）は１つ目のドキュメントへの参照タグを有し、２個目のパーツ（／ＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ．ｆｄｓｅｑ／［１]．ｐｉｅｃｅ）は２つ目のドキュメントへの参照タグを有し、３個目のパーツ（／ＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ．ｆｄｓｅｑ／［２]．ｐｉｅｃｅ）は３つ目のドキュメントへの参照タグを有し、４個目のパーツ（／ＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ．ｆｄｓｅｑ／［３]．ｐｉｅｃｅ）は４つ目のドキュメントへの参照タグを有し、５個目のパーツ（／ＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ．ｆｄｓｅｑ／［４]．ｐｉｅｃｅ）は残りのタグ情報を有する場合、［０]．ｐｉｅｃｅの添え字を「０」から「３」に、[１]．ｐｉｅｃｅの添え字を「１」から「２」に、[２]．ｐｉｅｃｅの添え字を「２」から「１」に、[３]．ｐｉｅｃｅの添え字を「３」から「０」に変更する。
【０２３５】
具体的には、まず、レイアウトフィルタ４１１は、変数Ｉを０で初期化する（ステップＳ２００１）。次に、レイアウトフィルタ４１１は、インタリーブ化された（Ｍ−Ｉ）番目のＦＤＳの添え字を「Ｍ−１−Ｉ」から「Ｉ」に変更する（ステップＳ２００２）。ここで、変更後に同名のパスが一時的にも複数存在せぬよう、テンポラリディレクトリ内で変更処理を行うなど工夫する。
【０２３６】
次に、レイアウトフィルタ４１１は、変数Ｉに１を加算する（ステップＳ２００３）。つまり、必要なパーツに対して、ＦＤＳの添え字の数値の変更を幾つ目のパーツに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｉと変数Ｍとを比較し（ステップＳ２００４）、変数Ｉが変数Ｍよりも小さい場合には、ステップＳ２００２〜Ｓ２００３を繰り返す。ステップＳ２００２〜Ｓ２００３の処理を繰り返した結果、変数Ｉが変数Ｍ以上となった際に、本ＦＤＳ添え字変更処理を終了する。つまり、インタリーブ化されたＦＤＳの最後のパーツを除く全てのパーツに対して添え字の数値の変更を行ったかを判断しながら、各パーツに対してＦＤＳの添え字の数値の変更を実施する。この結果、ステップＳ２００１〜Ｓ２００４により、インタリーブ化されたＦＤＳの最後のパーツを除く全てのパーツは逆順となる。
【０２３７】
なお、本実施の形態では、インタリーブ化されたＦＤＳの先頭のパーツに１つ目のドキュメントのＦＤへの参照タグが存在する前提で、先頭のパーツから最後から２番目のパーツまでの範囲のパーツの添え字の数値を逆順にしたが、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のインタリーブ化されたＦＤＳの各パーツの構成に応じて、添え字の数値を逆順にするパーツの範囲を適宜変更するものとする。
【０２３８】
図３５に戻り、ステップＳ１９０３〜Ｓ１９０９では、レイアウトフィルタ４１１は、全てのドキュメントの全てのページが逆順のデータ順になるよう、インタリーブ化されたＦＤの中からＦＰへの参照タグを有する各パーツの添え字の数値の変更を全てのドキュメントのＦＤに対して実施する。例えば、４つのページを有するドキュメントのＦＤが５個のパーツにインタリーブ化されており、１個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［０]．ｐｉｅｃｅ）は１つ目のページへの参照タグを有し、２個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［１]．ｐｉｅｃｅ）は２つ目のページへの参照タグを有し、３個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［２]．ｐｉｅｃｅ）は３つ目のページへの参照タグを有し、４個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［３]．ｐｉｅｃｅ）は４つ目のページへの参照タグを有し、５個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［４]．ｐｉｅｃｅ）は残りのタグ情報を有する場合、［０]．ｐｉｅｃｅの添え字を「０」から「３」に、[１]．ｐｉｅｃｅの添え字を「１」から「２」に、[２]．ｐｉｅｃｅの添え字を「２」から「１」に、[３]．ｐｉｅｃｅの添え字を「３」から「０」に変更する。ここで、当該ドキュメントの全ページ数が１ページの場合には当該ＦＤパーツの添え字の数値の変更を行う必要はなく、２ページ以上の場合には当該ＦＤパーツの添え字の数値の変更を行う必要がある。
【０２３９】
具体的には、まず、レイアウトフィルタ４１１は、変数Ｉを変数０で初期化する（ステップＳ１９０３）。次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントのページ数を取得する（ステップＳ１９０４）。ページ数については、当該ＦＤを解析し、ＦＰが幾つ存在しているかを調べることにより取得することができる。次に、レイアウトフィルタ４１１は、取得したページ数を当該レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域に保持する（ステップＳ１９０５）。ここでは、ページ数がメモリ領域の変数Ｎに保持される。
【０２４０】
次に、レイアウトフィルタ４１１は、逆順印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するために、インタリーブ化されたＦＤの各パーツの添え字の数値を変更する必要があるかを判断し、必要がある場合には、当該パーツの添え字の数値を変更する。ここで、当該ドキュメントの全ページ数が１ページの場合には当該フパーツの添え字の数値の変更を行う必要はなく、２ページ以上の場合には当該パーツの添え字の数値の変更を行う必要がある。具体的には、レイアウトフィルタ４１１は、変数Ｎが１以上かを判断する（ステップＳ１９０６）。変数Ｎが１より大きい場合は、第１のＦＤ添え字変更処理を実施する（ステップＳ１９０７）。一方、変数Ｎが１以下の場合はステップＳ１９０７の処理は行わず、ステップＳ１９０８へ進む。
【０２４１】
ここで、第１のＦＤ添え字変更処理の詳細について図３７を用いて説明する。
【０２４２】
図３７は、図３５のステップＳ１９０７における第１のＦＤ添え字変更処理の詳細を示すフローチャートである。
【０２４３】
第１のＦＤ添え字変更処理では、当該ドキュメントのページが逆順のデータ順になるよう、ＦＰへの参照タグを有するインタリーブ化されたＦＤの各パーツの添え字の数値を変更する。例えば、４つのページを有するドキュメントのＦＤが５個のパーツにインタリーブ化されており、１個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［０]．ｐｉｅｃｅ）は１つ目のページへの参照タグを有し、２個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［１]．ｐｉｅｃｅ）は２つ目のページへの参照タグを有し、３個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／[２]．ｐｉｅｃｅ）は３つ目のページへの参照タグを有し、４個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／[３]．ｐｉｅｃｅ）は４つ目のページへの参照タグを有し、５個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［４]．ｐｉｅｃｅ）は残りのタグ情報を有する場合、［０]．ｐｉｅｃｅの添え字を「０」から「３」に、[１]．ｐｉｅｃｅの添え字を「１」から「２」に、［２]．ｐｉｅｃｅの添え字を「２」から「１」に、[３]．ｐｉｅｃｅの添え字を「３」から「０」に変更する。
【０２４４】
具体的には、まず、レイアウトフィルタ４１１は、変数Ｊを０で初期化する（ステップＳ２１０１）。次に、レイアウトフィルタ４１１は、インタリーブ化された（Ｎ−Ｊ）番目のＦＤの添え字を「Ｎ−１−Ｊ」から「Ｊ」に変更する（ステップＳ２１０２）。ここで、変更後に同名のパスが一時的にも複数存在せぬよう、テンポラリディレクトリ内で変更処理を行うなど工夫する。
【０２４５】
次に、レイアウトフィルタ４１１は、変数Ｊに１を加算する（ステップＳ２１０３）。つまり、必要なパーツに対して、ＦＤの添え字の数値の変更を幾つ目のパーツに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｊと変数Ｎとを比較し（ステップＳ２１０４）、変数Ｊが変数Ｎよりも小さい場合には、ステップＳ２１０２〜Ｓ２１０３を繰り返す。ステップＳ２１０２〜Ｓ２１０３の処理を繰り返した結果、変数Ｊが変数Ｎ以上となった際に、本第１のＦＤ添え字変更処理は終了となる。つまり、当該ドキュメントのインタリーブ化されたＦＤの最後のパーツを除く全てのパーツに対して添え字の数値の変更を行ったかを判断しながら、各パーツに対してＦＤの添え字の数値の変更を実施する。この結果、ステップＳ２１０１〜Ｓ２１０４により、当該ドキュメントのインタリーブ化されたＦＤの最後のパーツを除く全てのパーツの添え字の数値は逆順となる。
【０２４６】
なお、本実施の形態では、インタリーブ化されたＦＤの先頭のパーツに１つ目のページのＦＰへの参照タグが存在する前提で、先頭のパーツから最後から２番目のパーツまでの範囲のパーツの添え字の数値を逆順にしたが、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のインタリーブ化されたＦＤの各パーツの構成に応じて、添え字の数値を逆順にするパーツの範囲を適宜変更するものとする。
【０２４７】
次に、図３８を用いて、図３１のステップＳ１５０３における第２のＺＩＰデータ生成処理の詳細を説明する。
【０２４８】
図３８は、図３１のステップＳ１５０３における第２のＺＩＰデータ生成処理の詳細を示すフローチャートである。
【０２４９】
まず、レイアウトフィルタ４１１は、インタリーブ化された＿ｒｅｌｓ／．ｒｅｌｓ［０］をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ２２０１）。つまり、次に参照すべきＦＤＳへの参照タグを有する＿ｒｅｌｓ／．ｒｅｌｓパーツを１番目の位置に書き出す。
【０２５０】
次に、レイアウトフィルタ４１１は、変数Ｉを０で初期化する（ステップＳ２２０２）。次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤＳ［Ｉ]をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ２２０３）。つまり、次に参照すべきＦＤへの参照タグを有するＦＤＳパーツを次の位置に書き出す。
【０２５１】
次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントのページ数を取得する（ステップＳ２２０４）。取得方法は前述した方法と同様である。次に、レイアウトフィルタ４１１は、取得した（Ｉ＋１）番目のドキュメントのページ数を変数Ｎに保持する（ステップＳ２２０５）。次に、レイアウトフィルタ４１１は、変数Ｊを０で初期化する（ステップＳ２２０６）。次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤ（Ｉ＋１）［Ｊ]をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ２２０７）。つまり、次に参照すべきＦＰへの参照タグを有するＦＤパーツを次の位置に書き出す。次に、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）．ＦＰ（Ｎ−Ｊ）をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ２２０８）。つまり、次に参照すべきＦＰパーツを次の位置に書き出す。
【０２５２】
次に、レイアウトフィルタ４１１は、変数Ｊに１を加算する（ステップＳ２２０９）。つまり、ＦＤパーツ及びＦＰパーツの書き出しを当該ドキュメントの幾つ目のページに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｊと変数Ｎとを比較し（ステップＳ２２１０）、変数Ｊが変数Ｎよりも小さい場合には、ステップＳ２２０７〜Ｓ２２０９を繰り返す。ステップＳ２２０７〜Ｓ２２０９は、変数Ｊが変数Ｎ以上になるまで繰り返される。つまり、レイアウトフィルタ４１１は、当該ドキュメントの全てのページのＦＤパーツ及びＦＰパーツの書き出しを行ったかを判断しながら、当該ドキュメントの全てのページのＦＤパーツ及びＦＰパーツの書き出しを実施する。
【０２５３】
次に、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）[Ｊ]、つまり、インタリーブ化された当該ドキュメントの最後のＦＤパーツをＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ２２１１）。当該ドキュメントの残りのＦＤパーツの書き出しが実施される。この結果、ステップＳ２２０４〜Ｓ２２１１により、インタリーブ化された当該ドキュメントの全てのＦＤ及び全てのＦＰは逆順のデータ順に並べられる。
【０２５４】
次に、レイアウトフィルタ４１１は、変数Ｉに１を加算する（ステップＳ２２１２）。つまり、ＦＤＳパーツ、ＦＤパーツ、及びＦＰパーツの書き出しを幾つ目のドキュメントに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｉと変数Ｍとを比較し（ステップＳ２２１３）、変数Ｉが変数Ｍよりも小さい場合には、ステップＳ２２０３〜Ｓ２２１２を繰り返す。ステップＳ２２０３〜Ｓ２２１２は、変数ＩがＭ以上になるまで繰り返される。つまり、レイアウトフィルタ４１１は、全てのドキュメントの全てのページのＦＤＳパーツ、ＦＤパーツ、及びＦＰパーツの書き出しを行ったかを判断しながら、全てのドキュメントの全てのページのＦＤＳパーツ、ＦＤパーツ、ＦＰパーツの書き出しを実施する。
【０２５５】
次に、レイアウトフィルタ４１１は、ＦＤＳ[Ｉ]すなわちインタリーブ化された最後のＦＤＳパーツをＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ２２１４）。つまり、残りのＦＤＳパーツの書き出しを実施する。次に、レイアウトフィルタ４１１は、＿ｒｅｌｓ／．ｒｅｌｓ［１]すなわちインタリーブ化された最後の＿ｒｅｌｓ／．ｒｅｌｓパーツをＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ２２１５）。つまり、残りの＿ｒｅｌｓ／．ｒｅｌｓパーツの書き出しを実施する。
【０２５６】
以上の処理から、インタリーブ化された全てのＦＤＳ、インタリーブ化された全てのドキュメントの全てのＦＤ、全てのドキュメントの全てのＦＰは逆順のデータ順に並べられる。ただし、例えばイメージファイルやフォントファイルなどのその他のパーツに関するＬｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータは、解凍前のＺＩＰデータと同様、適切なデータ順に位置付けるものとする。
【０２５７】
また、本実施の形態では、＿ｒｅｌｓ／．ｒｅｌｓがインタリーブで２個に分割された場合を想定したが、サムネイル画像に関する情報等が含まれている場合には、３個以上に分割されることもある。その場合、それに関するＬｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータは、イメージファイルやフォントファイルなどのその他のパーツのように、解凍前のＺＩＰデータと同様、適切なデータ順に位置付けるものとする。この際、＿ｒｅｌｓ／．ｒｅｌｓ［１]と表記され、インタリーブ化された＿ｒｅｌｓ／．ｒｅｌｓの最後のパーツは添え字が異なる値となるが、その場合はステップＳ２２１５の処理は当然、その最後のパーツに対して実施されるものとする。
【０２５８】
次に、図３９を用いて、図１４のステップＳ３４０８における製本印刷処理の詳細を説明する。
【０２５９】
図３９は、第２の実施形態における製本印刷処理の詳細を示すフローチャートである。
【０２６０】
第２の実施形態における製本印刷処理では、レイアウトフィルタ４１１が、図１４のステップＳ３４０１でフィルタパイプラインマネージャ４１０から受け取ってステップＳ３４０２で伸張したＸＰＳ文書を元に、製本印刷時に適したデータ順のＸＰＳ文書を生成する。具体的には、第２のパーツ編集処理（ステップＳ２８０１）、第２の添え字変更処理（ステップＳ２８０２）に続いて、第３のＺＩＰデータ生成処理（ステップＳ２８０３）が実施される。これらの処理の詳細については後述する。
【０２６１】
次に、図４０を用いて、図３９のステップＳ２８０１における第２のパーツ編集処理の詳細を説明する。
【０２６２】
図４０は、図３９のステップＳ２８０１における第２のパーツ編集処理の詳細を示すフローチャートである。
【０２６３】
第２のパーツ編集処理では、レイアウトフィルタ４１１は、製本印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するため、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のＦＤＳとＦＤの一部のファイルの記述内容を変更する。
【０２６４】
具体的には、まず、レイアウトフィルタ４１１は、ＸＰＳ文書におけるドキュメント数を取得する（ステップＳ２９０１）。ドキュメント数については、ＦＤＳを解析し、ＦＤが幾つ存在しているかを調べることにより取得することができる。次に、レイアウトフィルタ４１１は、取得したドキュメント数を当該レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域に保持する（ステップＳ２９０２）。ここでは、ドキュメント数がメモリ領域の変数Ｍに保持される。
【０２６５】
次に、レイアウトフィルタ４１１は、変数Ｉを０で初期化する（ステップＳ２９０３）。次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントのページ数を取得する（ステップＳ２９０４）。取得方法については、前述した方法と同様である。次に、レイアウトフィルタ４１１は、取得した（Ｉ＋１）番目のドキュメントのページ数を変数Ｎに保持する（ステップＳ２９０５）。次に、レイアウトフィルタ４１１は、図２２に示した追加ＦＰ数算出処理を実施する（ステップＳ２９０６）。次に、製本印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成する上で、ＦＰを追加する必要があるかを判断する。
【０２６６】
具体的には、レイアウトフィルタ４１１は、変数Ｈが０より大きいかを判断する（ステップＳ２９０７）。変数Ｈが０より大きい場合、図２３を用いて説明したパーツ追加処理を実施する（ステップＳ２９０８）。一方、変数Ｈが０以下の場合はステップＳ２９０８の処理は行わず、ステップＳ２９１０へ進み、レイアウトフィルタ４１１は、第２のＦＤ編集処理を実施する（ステップＳ２９１０）。
【０２６７】
ここで、図４０のステップＳ２９１０における第２のＦＤ編集処理の詳細について図４１を用いて説明する。
【０２６８】
図４１は、図４０のステップＳ２９１０における第２のＦＤ編集処理の詳細を示すフローチャートである。
【０２６９】
第２のＦＤ編集処理では、レイアウトフィルタ４１１は、インタリーブ化されたＦＤの各パーツを製本順に並び替えた際に、ＸＭＬやＸＰＳの仕様に反することがないように、１つ目のページへの参照タグを有するパーツの先頭に記述された不要な記述を削除し、前述した削除処理で削除した記述内容を最後のページへの参照タグを有するパーツの先頭に追記する。例えば、図９のパーツ８５３の「＜？ｘｍｌ  ｖｅｒｓｉｏｎ＝”１．０”  ｅｎｃｏｄｉｎｇ＝”ｕｔｆ−８”＞」という記述と、「＜ＦｉｘｅｄＤｏｃｕｍｅｎｔ  ｘｍｌｎｓ＝”ｈｔｔｐ：／／ｓｃｈｅｍａｓ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｘｐｓ／２００５／０６”＞」という記述をパーツ８５３の先頭から削除し、これらの記述をパーツ８５４の先頭に追記する。
【０２７０】
具体的には、まず、レイアウトフィルタ４１１は、インタリーブ化されたＦＤの最初のパーツを取得する（ステップＳ３００１）。次に、本パーツの記述内容より、ＦＰへの参照タグの位置を検索する（ステップＳ３００２）。次に、レイアウトフィルタ４１１は、ステップＳ３００２で検索した参照タグよりも前方に存在する全てのタグの記述内容を当該レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域の変数バッファに保持する（ステップＳ３００３）。ここでは、ステップＳ３００２で検索した参照タグよりも前方に存在する全てのタグの記述内容がメモリ領域の変数バッファＳに保持される。
【０２７１】
次に、レイアウトフィルタ４１１は、ステップＳ３００２で検索した参照タグよりも前方に存在する全てのタグの記述内容をＦＤの最初のパーツから削除する（ステップＳ３００４）。次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤの最後から２番目のパーツを取得する（ステップＳ３００５）。次に、レイアウトフィルタ４１１は、ステップＳ３００３で変数バッファＳに保持した参照タグの記述内容を、ステップＳ３００５で取得したパーツの先頭に追記する（ステップＳ３００６）。
【０２７２】
なお、本実施の形態では、インタリーブ化されたＦＤの最初のパーツに対してステップＳ３００２の処理を、インタリーブ化されたＦＤの最後から２番目のパーツに対してステップＳ３００６の処理を行ったが、ステップＳ３００２の処理は１つ目のドキュメントへの参照タグを有するパーツに対して、ステップＳ３００６の処理は最後のドキュメントへの参照タグを有するパーツに対して実施すべきであるため、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のインタリーブ化されたＦＤの各パーツの構成に応じて、ステップＳ３００１及びステップＳ３００５で取得すべきパーツは適宜変更するものとする。
【０２７３】
図４０に戻り、レイアウトフィルタ４１１は、変数Ｉに１を加算する（ステップＳ２９１１）。つまり、必要なドキュメントに対して、ＦＤの記述内容の変更を幾つ目のドキュメントに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｉと変数Ｍとを比較し（ステップＳ２９１１）、変数Ｉが変数Ｍよりも小さい場合には、ステップＳ２９０４〜Ｓ２９１０を繰り返す。ステップＳ２９０４〜Ｓ２９１０は、変数Ｉが変数Ｍ以上になるまで繰り返す。つまり、必要な全てのドキュメントに対してＦＤの記述内容の変更を行ったかを判断しながら、必要な全てのドキュメントに対してＦＤの記述内容の変更を実施する。この結果、ステップＳ２９０３〜Ｓ２９１１により、全てのドキュメントは、製本印刷時のデータ順に並び替えた際に、ＸＭＬやＸＰＳの仕様に反することがないよう、ドキュメント毎に全てのＦＤの記述内容が変更される。
【０２７４】
次に、図４２を用いて、図３９のステップＳ２８０２における第２の添え字変更処理の詳細を説明する。
【０２７５】
図４２は、図３９のステップＳ２８０２における第２の添え字変更処理の詳細を示すフローチャートである。
【０２７６】
第２の添え字変更処理では、レイアウトフィルタ４１１は、製本印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するため、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のインタリーブ化されたＦＤの各パーツの添え字の数値を変更する。
【０２７７】
まず、レイアウトフィルタ４１１は、ステップＳ１９０３〜Ｓ１９０９により、全てのドキュメントの全てのページが製本のデータ順になるよう、インタリーブ化されたＦＤの中からＦＰへの参照タグを有する各パーツの添え字の数値の変更を全てのドキュメントのＦＤに対して実施する。例えば、８つのページを有するドキュメントのＦＤが９個のパーツにインタリーブ化されており、１個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［０]．ｐｉｅｃｅ）は１つ目のページへの参照タグを有し、２個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／[１]．ｐｉｅｃｅ）は２つ目のページへの参照タグを有し、３個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／[２]．ｐｉｅｃｅ）は３つ目のページへの参照タグを有し、４個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／[３]．ｐｉｅｃｅ）は４つ目のページへの参照タグを有し、５個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／[４]．ｐｉｅｃｅ）は５つ目のページへの参照タグを有し、６個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［５]．ｐｉｅｃｅ）は６つ目のページへの参照タグを有し、７個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［６]．ｐｉｅｃｅ）は７つ目のページへの参照タグを有し、８個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［７]．ｐｉｅｃｅ）は８つ目のページへの参照タグを有し、９個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［８]．ｐｉｅｃｅ）は残りのタグ情報を有する場合、［０]．ｐｉｅｃｅの添え字を「０」から「１」に、[１]．ｐｉｅｃｅの添え字を「１」から「２」に、[２]．ｐｉｅｃｅの添え字を「２」から「５」に、[３]．ｐｉｅｃｅの添え字を「３」から「６」に、[４]．ｐｉｅｃｅの添え字を「４」から「７」に、[５]．ｐｉｅｃｅの添え字を「５」から「４」に、[６]．ｐｉｅｃｅの添え字を「６」から「３」に、[７]．ｐｉｅｃｅの添え字を「７」から「０」に、変更する。
【０２７８】
具体的には、レイアウトフィルタ４１１は、変数Ｉを０で初期化する（ステップＳ３１０１）。次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントのページ数を取得する（ステップＳ３１０２）。ページ数については、当該ＦＤを解析し、ＦＰが幾つ存在しているかを調べることにより取得することができる。次に、レイアウトフィルタ４１１は、取得したページ数をレイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域に保持する（ステップＳ３１０３）。ここでは、ページ数がメモリ領域の変数Ｎに保持される。
【０２７９】
次に、レイアウトフィルタ４１１は、製本印刷時に適したデータ順のＸＰＳ文書の元となる伸張データを生成するために、インタリーブ化されたＦＤの各パーツの添え字の数値を変更する。具体的には、第２のＦＤ添え字変更処理を実施する（ステップＳ３１０４）。
【０２８０】
ここで、図４２のステップＳ３１０４における第２のＦＤ添え字変更処理の詳細について図４３を用いて説明する。
【０２８１】
図４３は、図４２のステップＳ３１０４における第２のＦＤ添え字変更処理の詳細を示すフローチャートである。
【０２８２】
第２のＦＤ添え字変更処理では、レイアウトフィルタ４１１は、当該ドキュメントのページが製本のデータ順になるよう、ＦＰへの参照タグを有するインタリーブ化されたＦＤの各パーツの添え字の数値を変更する。例えば、８つのページを有するドキュメントのＦＤが９個のパーツにインタリーブ化されており、１個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／[０]．ｐｉｅｃｅ）は１つ目のページへの参照タグを有し、２個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［１]．ｐｉｅｃｅ）は２つ目のページへの参照タグを有し、３個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［２]．ｐｉｅｃｅ）は３つ目のページへの参照タグを有し、４個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［３]．ｐｉｅｃｅ）は４つ目のページへの参照タグを有し、５個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／[４]．ｐｉｅｃｅ）は５つ目のページへの参照タグを有し、６個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／[５]．ｐｉｅｃｅ）は６つ目のページへの参照タグを有し、７個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［６]．ｐｉｅｃｅ）は７つ目のページへの参照タグを有し、８個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［７]．ｐｉｅｃｅ）は８つ目のページへの参照タグを有し、９個目のパーツ（／Ｄｏｃｕｍｅｎｔｓ／１／ＦｉｘｅｄＤｏｃｕｍｅｎｔ．ｆｄｏｃ／［８]．ｐｉｅｃｅ）は残りのタグ情報を有する場合、［０]．ｐｉｅｃｅの添え字を「０」から「１」に、[１]．ｐｉｅｃｅの添え字を「１」から「２」に、[２]．ｐｉｅｃｅの添え字を「２」から「５」に、[３]．ｐｉｅｃｅの添え字を「３」から「６」に、［４]．ｐｉｅｃｅの添え字を「４」から「７」に、[５]．ｐｉｅｃｅの添え字を「５」から「４」に、[６]．ｐｉｅｃｅの添え字を「６」から「３」に、［７]．ｐｉｅｃｅの添え字を「７」から「０」に、変更する。
【０２８３】
具体的には、まず、レイアウトフィルタ４１１は、レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域内の変数Ｌ及び変数Ｔを０で初期化する（ステップＳ３２０１）。次に、レイアウトフィルタ４１１は、インタリーブ化された（Ｎ−１−２×Ｔ＋１）番目のＦＤの添え字を「Ｎ−１−２×Ｔ」から「Ｌ」に変更する（ステップＳ３２０２）。ここで、変更後に同名のパスが一時的にも複数存在せぬよう、テンポラリディレクトリ内で変更処理を行うなど工夫する。次に、レイアウトフィルタ４１１は、インタリーブ化された（２×Ｔ＋１）番目のＦＤの添え字を「２×Ｔ」から「Ｌ＋１」に変更する（ステップＳ３２０３）。
【０２８４】
次に、レイアウトフィルタ４１１は、インタリーブ化された（１＋２×Ｔ＋１）番目のＦＤの添え字を「１＋２×Ｔ」から「Ｌ＋２」に変更する（ステップＳ３２０４）。次に、レイアウトフィルタ４１１は、インタリーブ化された（Ｎ−２−２×Ｔ＋１）番目のＦＤの添え字を「Ｎ−２−２×Ｔ」から「Ｌ＋３」に変更する（ステップＳ３２０５）。次に、レイアウトフィルタ４１１は、変数Ｌに４を、変数Ｔに１を加算する（ステップＳ３２０６）。つまり、必要なパーツに対して、ＦＤの添え字の数値の変更を幾つ目のパーツに対して行ったかが記憶される。
【０２８５】
次に、レイアウトフィルタ４１１は、変数Ｌと変数Ｎとを比較し（ステップＳ３２０７）、変数Ｌが変数Ｎよりも小さい場合には、ステップＳ３２０２〜Ｓ３２０６を繰り返す。テップＳ３２０２〜Ｓ３２０６の処理を繰り返した結果、変数Ｌが変数Ｎ以上となった際に、本第２のＦＤ添え字変更処理は終了となる。つまり、当該ドキュメントのインタリーブ化されたＦＤの最後のパーツを除く全てのパーツに対して添え字の数値の変更を行ったかを判断しながら、各パーツに対してＦＤの添え字の数値の変更を実施する。この結果、ステップＳ３２０１〜Ｓ３２０７により、当該ドキュメントのインタリーブ化されたＦＤの最後のパーツを除く全てのパーツの添え字の数値は製本順となる。
【０２８６】
なお、本実施の形態では、インタリーブ化されたＦＤの先頭のパーツに１つ目のページのＦＰへの参照タグが存在する前提で、先頭のパーツから最後から２番目のパーツまでの範囲のパーツの添え字の数値を製本順にしたが、フィルタパイプラインマネージャ４１０から受け取ったＸＰＳ文書内のインタリーブ化されたＦＤの各パーツの構成に応じて、添え字の数値を製本順するパーツの範囲を適宜変更するものとする。
【０２８７】
次に、図４４を用いて、図３９のステップＳ２８０３における第３のＺＩＰデータ生成処理の詳細を説明する。
【０２８８】
図４４は、図３９のステップＳ２８０３における第３のＺＩＰデータ生成処理の詳細を示すフローチャートである。
【０２８９】
まず、レイアウトフィルタ４１１は、インタリーブ化された＿ｒｅｌｓ／．ｒｅｌｓ［０]をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３０１）。つまり、次に参照すべきＦＤＳへの参照タグを有する＿ｒｅｌｓ／．ｒｅｌｓパーツを１番目の位置に書き出す。
【０２９０】
次に、レイアウトフィルタ４１１は、変数Ｉを０で初期化する（ステップＳ３３０２）。次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤＳ［Ｉ]をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３０３）。つまり、次に参照すべきＦＤへの参照タグを有するＦＤＳパーツを次の位置に書き出す。
【０２９１】
次に、レイアウトフィルタ４１１は、（Ｉ＋１）番目のドキュメントのページ数を取得する（ステップＳ３３０４）。取得方法は前述した方法と同様である。次に、レイアウトフィルタ４１１は、取得した（Ｉ＋１）番目のドキュメントのページ数を変数Ｎに保持する（ステップＳ３３０５）。次に、レイアウトフィルタ４１１は、変数Ｊを０で、変数Ｔを０で初期化する（ステップＳ３３０６）。次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤ（Ｉ＋１）［Ｊ]をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３０７）。つまり、次に参照すべきＦＰへの参照タグを有するＦＤパーツを次の位置に書き出す。
【０２９２】
次に、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）．ＦＰ（Ｎ−２×Ｔ）をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３０８）。つまり、次に参照すべきＦＰパーツを次の位置に書き出す。次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤ（Ｉ＋１）［Ｊ＋１］をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３０９）。つまり、次に参照すべきＦＰへの参照タグを有するＦＤパーツを次の位置に書き出す。次に、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）．ＦＰ（１＋２×Ｔ）をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３１０）。つまり、次に参照すべきＦＰパーツを次の位置に書き出す。
【０２９３】
次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤ（Ｉ＋１）［Ｊ＋２］をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３１１）。つまり、次に参照すべきＦＰへの参照タグを有するＦＤパーツを次の位置に書き出す。次に、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）．ＦＰ（２＋２×Ｔ）をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３１２）。つまり、次に参照すべきＦＰパーツを次の位置に書き出す。次に、レイアウトフィルタ４１１は、インタリーブ化されたＦＤ（Ｉ＋１）［Ｊ＋３]をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３１３）。つまり、次に参照すべきＦＰへの参照タグを有するＦＤパーツを次の位置に書き出す。次に、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）．ＦＰ（Ｎ−１−２×Ｔ）をＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３１４）。つまり、次に参照すべきＦＰパーツを次の位置に書き出す。
【０２９４】
次に、レイアウトフィルタ４１１は、変数Ｊに４を、変数Ｔに１を加算する（ステップＳ３３１５）。つまり、ＦＤパーツ及びＦＰパーツの書き出しを当該ドキュメントの幾つ目のページに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｊと変数Ｎとを比較し（ステップＳ３３１６）、変数Ｊが変数Ｎよりも小さい場合には、ステップＳ３３０７〜Ｓ３３１５を繰り返す。ステップＳ３３０７〜Ｓ３３１５は、変数Ｊが変数Ｎ以上になるまで繰り返される。つまり、レイアウトフィルタ４１１は、当該ドキュメントの全てのページのＦＤパーツ及びＦＰパーツの書き出しを行ったかを判断しながら、当該ドキュメントの全てのページのＦＤパーツ及びＦＰパーツの書き出しを実施する。
【０２９５】
次に、レイアウトフィルタ４１１は、ＦＤ（Ｉ＋１）[Ｊ]、つまり、インタリーブ化された当該ドキュメントの最後のＦＤパーツをＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３１７）。当該ドキュメントの残りのＦＤパーツの書き出しを実施する。この結果、ステップＳ３３０４〜Ｓ３３１７により、インタリーブ化された当該ドキュメントの全てのＦＤ及び全てのＦＰは製本順のデータ順に並べられる。
【０２９６】
次に、レイアウトフィルタ４１１は、変数Ｉに１を加算する（ステップＳ３３１８）。つまり、ＦＤＳパーツ、ＦＤパーツ、及びＦＰパーツの書き出しを幾つ目のドキュメントに対して行ったかを記憶する。次に、レイアウトフィルタ４１１は、変数Ｉと変数Ｍとを比較し（ステップＳ３３１９）、変数Ｉが変数Ｍよりも小さい場合には、ステップＳ３３０３〜Ｓ３３１８を繰り返す。ステップＳ３３０３〜Ｓ３３１８は、変数Ｉが変数Ｍ以上になるまで繰り返される。つまり、レイアウトフィルタ４１１は、全てのドキュメントの全てのページのＦＤＳパーツ、ＦＤパーツ、及びＦＰパーツの書き出しを行ったかを判断しながら、全てのドキュメントの全てのページのＦＤＳパーツ、ＦＤパーツ、ＦＰパーツの書き出しを実施する。
【０２９７】
次に、レイアウトフィルタ４１１は、ＦＤＳ[Ｉ]、つまり、インタリーブ化された最後のＦＤＳパーツをＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３２０）。つまり、残りのＦＤＳパーツの書き出しを実施する。次に、レイアウトフィルタ４１１は、＿ｒｅｌｓ／．ｒｅｌｓ［１]すなわちインタリーブ化された最後の＿ｒｅｌｓ／．ｒｅｌｓパーツをＺＩＰ圧縮し、Ｌｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータを生成する（ステップＳ３３２１）。つまり、残りの＿ｒｅｌｓ／．ｒｅｌｓパーツの書き出しを実施する。
【０２９８】
以上の処理から、インタリーブ化された全てのＦＤＳ、インタリーブ化された全てのドキュメントの全てのＦＤ、全てのドキュメントの全てのＦＰは製本順のデータ順に並べられる。ただし、例えばイメージファイルやフォントファイルなどのその他のパーツに関するＬｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータは、解凍前のＺＩＰデータと同様、適切なデータ順に位置付けるものとする。
【０２９９】
また、本実施の形態では、＿ｒｅｌｓ／．ｒｅｌｓがインタリーブで２個に分割された場合を想定したが、サムネイル画像に関する情報等が含まれている場合には、３個以上に分割されることもある。その場合、それに関するＬｏｃａｌ  Ｆｉｌｅ  Ｈｅａｄｅｒ及びファイルデータは、イメージファイルやフォントファイルなどのその他のパーツのように、解凍前のＺＩＰデータと同様、適切なデータ順に位置付けるものとする。この際、前述の説明では＿ｒｅｌｓ／．ｒｅｌｓ［１]と表記したインタリーブ化された＿ｒｅｌｓ／．ｒｅｌｓの最後のパーツは添え字が異なる値となるが、その場合はステップＳ２２１５の処理は当然、その最後のパーツに対して実施するものとする。
【０３００】
最後に、第１の実施形態と同様、レイアウトフィルタ４１１は、ステップＳ３４０７を実施した際には本ステップで生成したＺＩＰデータを、ステップＳ３４０８を実施した際には本ステップで生成したＺＩＰデータを、ステップＳ３４０７、ステップＳ３４０８を共に行わなかった際にはステップＳ３４０１で取得したＺＩＰデータをＸＰＳ文書としてフィルタパイプラインマネージャ４１０に通知して、全ての処理を終了する。この結果、レイアウトフィルタ４１１は、逆順印刷時は図２９、製本印刷時は図３０のようなデータ順のＸＰＳデータをフィルタパイプラインマネージャ４１０に通知する。
【０３０１】
なお、レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域は、図１４及び図３１〜図４４を用いて説明した処理よりも以前に行われる不図示のレイアウトフィルタ４１１の初期化処理時から利用可能となり、図１４及び図３１〜図４４を用いて説明した処理以降に行われる不図示のレイアウトフィルタ４１１の終了処理時に利用不可となる。ただし、図１４及び図３１〜図４４に示す処理中で使用されたメモリ領域は、各々必要となった時点で確保され、不要となった時点で開放されるものとする。
【０３０２】
また、本実施形態では、対象とするパーツとして、＿ｒｅｌｓ／．ｒｅｌｓ、ＦｉｘｅｄＤｏｃｕｍｅｎｔＳｅｑｕｅｎｃｅ、ＦｉｘｅｄＤｏｃｕｍｅｎｔ、ＦｉｘｅｄＰａｇｅ、イメージファイル、及びフォントファイルを例示したが、ＸＰＳファイルにはこれら以外にもプリントチケットや．ｒｅｌｓの拡張子を有するファイルなどのパーツが存在し、これらのパーツについても、上述した各種パーツと同様に、当該パーツへの参照タグが現れた直後に当該パーツデータを位置付けるものとする。
【０３０３】
上記第２の実施形態によれば、上記第１の実施形態による効果と同様に、印刷装置の印刷処理を高速化することができる。また、従来の印刷スループットの低下を防ぐと共に、印刷装置の印刷処理を高速化することができる。
【０３０４】
［第３の実施形態］
本発明の第３の実施形態は、図１〜図１４で説明した基本的な構成要素や処理が上記第１の実施の形態と同じであり、同一の符号を付してそれらの説明を省略する。以下に、上記第１の実施の形態と異なる点のみを説明する。
【０３０５】
前述した通り、ＸＰＳプリントパスが使用される場合にＯＳが提供する印刷システムが生成するＸＰＳデータ以外のＸＰＳデータを印刷スプールファイルとして直接通知する技術が存在し、本技術を使用した場合には、インタリーブ化されていないパーツを有するデータがレイアウトフィルタ４１１に通知されることがある。また、ＸＰＳプリントパスが使用される場合にＯＳが提供する印刷システムが生成するＸＰＳデータも、ＦｉｘｅｄＰａｇｅについてはインタリーブ化されていない場合があることが確認されている。
【０３０６】
そこで、本発明の第３の実施形態では、レイアウトフィルタ４１１が、ＸＰＳプリントパスにおける印刷制御機能の中で、インタリーブ化されていないパーツを有するデータに対して正順印刷でない印刷設定が行われている場合に、印刷設定に適したデータ順のＸＰＳデータを生成する。具体的には、図１４におけるステップＳ３４０２とステップＳ３４０３との間に、インタリーブ化されていないパーツをインタリーブ化する処理が挿入される。なお、図１４におけるステップＳ３４０７の逆順印刷処理及びステップＳ３４０８の製本印刷処理では、上記第１の実施形態で説明した処理が実行されても、上記第２の実施形態で説明した処理が実行されてもよい。
【０３０７】
図４５は、第３の実施形態におけるパーツのインタリーブ化処理を示すフローチャートである。
【０３０８】
レイアウトフィルタ４１１は、まずパーツを取得する（ステップＳ３５０１）。ここで、初めに取得するパーツは、＿ｒｅｌｓ／．ｒｅｌｓである。次に、本パーツが既にインタリーブ化されているかを判断する（ステップＳ３５０２）。パーツがインタリーブ化されているか否かは、＿ｒｅｌｓ／．ｒｅｌｓが一つのファイルである構成であるか、若しくは＿ｒｅｌｓ／．ｒｅｌｓはディレクトリであり、本ディレクトリ内にファイルを有する構成であるかによって判断され得る。
【０３０９】
ステップＳ３５０２の判断の結果、取得したパーツがインタリーブ化されていない場合は、レイアウトフィルタ４１１は、本パーツがＸＭＬデータであるかを判断する（ステップＳ３５０３）。本パーツがＸＭＬデータである場合は、レイアウトフィルタ４１１は、本パーツがプリントチケットであるかを判断する（ステップＳ３５０４）。本パーツがプリントチケットでない場合は、レイアウトフィルタ４１１は、後述するインタリーブ化（分割）処理を実施する（ステップＳ３５０５）。
【０３１０】
レイアウトフィルタ４１１は、ステップＳ３５０２において、取得したパーツが既にインタリーブ化（分割）されていると判断した場合、ステップＳ３５０３において、該パーツがＸＭＬデータでないと判断した場合、ステップＳ３５０４において、該パーツがプリントチケットであると判断した場合には、取得したパーツがインタリーブ化を行う必要がないことを意味するため、ステップＳ３５０５のインタリーブ化（分割）処理を実施しない。
【０３１１】
次に、レイアウトフィルタ４１１は、ステップＳ３５０１〜Ｓ３５０５の処理を全てのパーツに対して実施したかを判断する（ステップＳ３５０６）。全てのパーツに対して当該処理を実施していないと判断された場合には、レイアウトフィルタ４１１は、当該パーツから他のパーツへの参照タグを検索し、検索されたパーツに対してステップＳ３５０１〜Ｓ３５０５を実施する。一方、全てのパーツに対して当該処理を実施済みと判断された場合には、インタリーブ化されていないパーツをインタリーブ化する処理は終了となる。
【０３１２】
次に、図４６を用いて、図４５のステップＳ３５０５におけるインタリーブ化処理の詳細を説明する。本処理では、他のパーツへの参照タグを有するパーツデータが、他のパーツへの参照タグを有するタグに分割され、当該パーツがインタリーブ化される。
【０３１３】
図４６は、図４５のステップＳ３５０５におけるインタリーブ化処理の詳細を示すフローチャートである。
【０３１４】
レイアウトフィルタ４１１は、まず、パーツデータを取得する（ステップＳ３６０１）。次に、レイアウトフィルタ４１１は、タグの検索処理の開始位置をパーツの先頭に設定する（ステップＳ３６０２）。次に、レイアウトフィルタ４１１は、当該パーツの記述内容より、他のパーツへの参照タグを検索する（ステップＳ３６０３）。次に、レイアウトフィルタ４１１は、ステップＳ３６０３で他のパーツへの参照タグが見付かったかを判断する（ステップＳ３６０４）。
【０３１５】
ステップＳ３６０４において、他のパーツへの参照タグが見付かったと判断した場合、レイアウトフィルタ４１１は、当該パーツと同一の階層に新規ディレクトリを追加する（ステップＳ３６０５）。なお、本ディレクトリの名称を当該パーツと同一にする。一方、ステップＳ３６０４において、他のパーツへの参照タグが見付からなかったと判断した場合、レイアウトフィルタ４１１は、インタリーブ化する必要がないパーツであることを意味するため、ステップＳ３６０５〜Ｓ３６１４の処理は実施せず、本処理を終了する。
【０３１６】
次に、レイアウトフィルタ４１１は、ステップＳ３６０５で追加した新規ディレクトリ以下にパーツを追加する（ステップＳ３６０６）。なお、追加するファイルの名称を「［ｓ］．ｐｉｅｃｅ」とする。ここで、Ｓは１０進数の数値であり、当該ディレクトリ以下に追加したファイルに、０から順に１を加算した値を割り振る。Ｓは、レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域に保持される。
【０３１７】
次に、レイアウトフィルタ４１１は、ステップＳ３６０２で設定したタグ検索開始位置からステップＳ３６０３で検索した他のパーツへの参照タグの間に存在する記述内容を、ステップＳ３６０６で追加したパーツに書き出す（ステップＳ３６０７）。次に、レイアウトフィルタ４１１は、タグ検索開始位置をステップＳ３６０３で検索した他のパーツへの参照タグの終端の位置に移動する（ステップＳ３６０８）。次に、レイアウトフィルタ４１１は、ステップＳ３６０６と同様に、ステップＳ３６０５で追加した新規ディレクトリ以下にパーツを追加する（ステップＳ３６０９）。なお、本ファイルの名称の決定方法もステップＳ３６０６と同様とする。
【０３１８】
次に、レイアウトフィルタ４１１は、ステップＳ３６０３と同様に、当該パーツの記述内容より、他のパーツへの参照タグを検索する（ステップＳ３６１０）。次に、レイアウトフィルタ４１１は、ステップＳ３６０４と同様に、ステップＳ３６１０で他のパーツへの参照タグが見付かったかを判断する（ステップＳ３６１１）。
【０３１９】
ステップＳ３６１１において、他のパーツへの参照タグが見付かったと判断した場合、ステップＳ３６０７と同様に、レイアウトフィルタ４１１は、ステップＳ３６０８で移動したタグ検索開始位置からステップＳ３６１０で検索した他のパーツへの参照タグの間に存在する記述内容を、ステップＳ３６０９で追加したパーツに書き出す（ステップＳ３６１４）。続いて、ステップＳ３６０８〜Ｓ３６１１を繰り返す。
【０３２０】
一方、ステップＳ３６１１の判断の結果、他のパーツへの参照タグが見付からなかったと判断した場合、レイアウトフィルタ４１１は、ステップＳ３６０８で移動したタグ検索開始位置から当該パーツデータの終端までの間に存在する記述内容を、ステップＳ３６０９で追加したパーツに書き出す（ステップＳ３６１２）。続いて、レイアウトフィルタ４１１は、元のパーツデータを削除する（ステップＳ３６１３）。
【０３２１】
上記処理により、インタリーブ化する必要があるパーツのみインタリーブ化される。例えば、＿ｒｅｌｓ／．ｒｅｌｓパーツ８０１は、パーツ８５１及びパーツ８５２に、ＦＤＳパーツ８１０はパーツ８５８、パーツ８５９、及びパーツ８６０に、ＦＤパーツ８０４はパーツ８５３、パーツ８５４、及びパーツ８５５に、ＦＤパーツ８０６はパーツ８５６及びパーツ８５７にインタリーブ化される。また、ＦＰパーツ８０２，８０３，８０５もそれぞれ、不図示であるが複数のパーツにインタリーブ化される。
【０３２２】
本第３の実施形態で説明したインタリーブ化処理に加えて、第１の実施形態で説明した処理若しくは第２の実施形態で説明した処理を行うことにより、インタリーブ化されていないパーツを有するデータに対して、正順印刷でない印刷設定が行われている場合に、印刷設定に適したデータ順のＸＰＳデータを生成することができる。また、従来の印刷スループットの低下を防ぐと共に、印刷装置の印刷処理を高速化することができる。
【０３２３】
なお、レイアウトフィルタ４１１が管理するＲＡＭ１０２に確保されたメモリ領域は、図１４及び図４５〜図４６を用いて説明した処理よりも以前に行われる不図示のレイアウトフィルタ４１１の初期化処理時から利用可能となり、図１４及び図４５〜図４６を用いて説明した処理以降に行われる不図示のレイアウトフィルタ４１１の終了処理時に利用不可となる。ただし、図１４及び図４５〜図４６に示す処理中で使用されたメモリ領域は、各々必要となった時点で確保され、不要となった時点で開放されるものとする。
【０３２４】
また、上記実施の形態では、ＸＰＳデータを構成する各パーツにインタリーブ化処理を実施した後、逆順印刷又は製本印刷に最適なデータ順に並び替えているが、ステップＳ３６０６及びステップＳ３６０９のパーツ追加時のファイル名を、図１５のステップＳ１００１の第１のパス変更処理及び図２０のステップＳ２３０１の第２のパス変更処理を見据えた名称とすることで、インタリーブ化処理と第１のパス変更処理若しくは第２のパス変更処理を並行で実施してもよい。
【０３２５】
以上、実施形態を詳述したが、本発明の機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、ＬＡＮ、ＷＡＮ等のネットワークを介して接続がなされ処理が行われるシステムであっても、本発明を適用できることは言うまでもない。
【０３２６】
本発明は、例えばプリンタドライバのようなアプリケーションに適用し、Ｗｉｎｄｏｗｓ(登録商標)  Ｖｉｓｔａ等のＯＳ及びＯＳの印刷システムと連携することにより実現される。また、本発明は、ＸＰＳを対象としてきたが、同種の性質を有するファイルフォーマットであれば、ＸＰＳとは異なるファイルフォーマットであっても、本発明を適用できることは言うまでもない。
【０３２７】
本発明の目的は、以下の処理を実行することによって達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）が記憶媒体に格納されたプログラムコードを読み出す処理である。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコード及び該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０３２８】
また、プログラムコードを供給するための記憶媒体としては、次のものを用いることができる。例えば、フロッピー（登録商標）ディスク、ハードディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等である。または、プログラムコードをネットワークを介してダウンロードしてもよい。
【０３２９】
また、コンピュータが読み出したプログラムコードを実行することにより、上記実施の形態の機能が実現される場合も本発明に含まれる。加えて、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【０３３０】
さらに、前述した実施形態の機能が以下の処理によって実現される場合も本発明に含まれる。即ち、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部または全部を行う場合である。
【０３３１】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した各実施の形態の機能が実現される場合も本発明に含まれる。加えて、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳなどが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現する場合も含まれる。この場合、上記プログラムは、該プログラムを記憶した記憶媒体から直接、またはインターネット、商用ネットワーク、若しくはローカルエリアネットワーク等に接続された不図示の他のコンピュータやデータベース等からダウンロードすることにより供給される。
【図面の簡単な説明】
【０３３２】
【図１】本発明の第１の実施形態に係る情報処理装置を含めた印刷システムの構成例を示すブロック図である。
【図２】図１のコンピュータでの印刷制御処理時に機能するソフトウェアの構成を示すブロック図である。
【図３】図１のコンピュータ及びプリンタを利用した印刷システムの一例を示すブロック図である。
【図４】ＸＰＳデータの構成例を示す参考図である。
【図５】図４のＸＰＳデータにおけるパーツ間の参照関係の論理的構造の一例を示す参考図である。
【図６】パーツデータのＸＭＬファイルの記述に基づいたパーツ間の参照関係の一例を示す参考図である。
【図７】ＸＰＳデータを構成するＺＩＰ圧縮形式で圧縮されたデータの構成例を示す参考図である。
【図８】ＭＸＤＷにより通常生成されるＸＰＳファイルのデータ順の一例を示す参考図である。
【図９】インタリーブ化されたパーツデータの一例を示す参考図である。
【図１０】インタリーブ化されたＸＰＳデータの構成例を示す参考図である。
【図１１】Ｗｉｎｄｏｗｓ(登録商標)  Ｖｉｓｔａの印刷システムがＸＰＳプリントパスに従って生成する印刷スプールファイルのデータ順の一例を示す参考図である。
【図１２】コンピュータでの印刷制御処理時にＧＤＩプリントパスに従って機能する機能部の構成を示す図である。
【図１３】コンピュータでの印刷制御処理時にＸＰＳプリントパスに従って機能する機能部の構成を示す図である。
【図１４】図１３のレイアウトフィルタ４１１により実行される印刷制御処理を示すフローチャートである。
【図１５】第１の実施形態における逆順印刷処理の概要を示すフローチャートである。
【図１６】図１５のステップＳ１００１における第１のパス変更処理の詳細を示すフローチャートである。
【図１７】図１６のステップＳ１１０４におけるＦＤパス変更処理の詳細を示すフローチャートである。
【図１８】図１７のステップＳ１１０９における第１のＦＰパス変更処理の詳細を示すフローチャートである。
【図１９】図１５のステップＳ１００２における第１のＺＩＰデータ生成処理の詳細を示すフローチャートである。
【図２０】第１の実施形態における製本印刷処理の詳細を示すフローチャートである。
【図２１】図２０のステップＳ２３０１における第２のパス変更処理の詳細を示すフローチャートである。
【図２２】図２１のステップＳ２４０６における追加ＦＰ数算出処理の詳細を示すフローチャートである。
【図２３】図２１のステップＳ２４０８におけるパーツデータ追加処理の詳細を示すフローチャートである。
【図２４】図２１のステップＳ２４０９における第２のＦＰパス変更処理の詳細を示すフローチャートである。
【図２５】レイアウトフィルタ４１１によりＲＡＭ１０２に確保されたメモリ領域に保持されるレイアウトフィルタ情報の一例を示す図である。
【図２６】逆順印刷の設定が追加された印刷設定画面の一例を示す図である。
【図２７】製本印刷の設定が追加された印刷設定画面の一例を示す図である。
【図２８】プリントチケットが有する印刷設定情報の一例を示す参考図である。
【図２９】逆順印刷時に生成されるＸＰＳデータの一例を示す参考図である。
【図３０】製本印刷時に生成されるＸＰＳデータの一例を示す参考図である。
【図３１】第２の実施形態における逆順印刷処理の詳細を示すフローチャートである。
【図３２】図３１のステップＳ１５０１における第１のパーツ編集処理の詳細を示すフローチャートである。
【図３３】図３２のステップＳ１６０４におけるＦＤＳ編集処理の詳細を示すフローチャートである。
【図３４】図３２のステップＳ１６０９における第１のＦＤ編集処理の詳細を示すフローチャートである。
【図３５】図３１のステップＳ１５０２における第１の添え字変更処理の詳細を示すフローチャートである。
【図３６】図３５のステップＳ１９０２におけるＦＤＳ添え字変更処理の詳細を示すフローチャートである。
【図３７】図３５のステップＳ１９０７における第１のＦＤ添え字変更処理の詳細を示すフローチャートである。
【図３８】図３１のステップＳ１５０３における第２のＺＩＰデータ生成処理の詳細を示すフローチャートである。
【図３９】第２の実施形態における製本印刷処理の詳細を示すフローチャートである。
【図４０】図３９のステップＳ２８０１における第２のパーツ編集処理の詳細を示すフローチャートである。
【図４１】図４０のステップＳ２９１０における第２のＦＤ編集処理の詳細を示すフローチャートである。
【図４２】図３９のステップＳ２８０２における第２の添え字変更処理の詳細を示すフローチャートである。
【図４３】図４２のステップＳ３１０４における第２のＦＤ添え字変更処理の詳細を示すフローチャートである。
【図４４】図３９のステップＳ２８０３における第３のＺＩＰデータ生成処理の詳細を示すフローチャートである。
【図４５】第３の実施形態におけるパーツのインタリーブ化処理を示すフローチャートである。
【図４６】図４５のステップＳ３５０５におけるインタリーブ化処理の詳細を示すフローチャートである。
【符号の説明】
【０３３３】
１０１  ＣＰＵ
１０２  ＲＡＭ
２０１  アプリケーション
４０３  スプーラ
４０７  ランゲージモニタ
４１０  フィルタパイプラインマネージャ
４１１  レイアウトフィルタ
４１２  レンダリングフィルタ
１５００  プリンタ
３０００  コンピュータ
【図１】
0004619399.tif 000002
【図２】
0004619399.tif 000003
【図３】
0004619399.tif 000004
【図４】
0004619399.tif 000005
【図５】
0004619399.tif 000006
【図６】
0004619399.tif 000007
【図７】
0004619399.tif 000008
【図８】
0004619399.tif 000009
【図９】
0004619399.tif 000010
【図１０】
0004619399.tif 000011
【図１１】
0004619399.tif 000012
【図１２】
0004619399.tif 000013
【図１３】
0004619399.tif 000014
【図１４】
0004619399.tif 000015
【図１５】
0004619399.tif 000016
【図１６】
0004619399.tif 000017
【図１７】
0004619399.tif 000018
【図１８】
0004619399.tif 000019
【図１９】
0004619399.tif 000020
【図２０】
0004619399.tif 000021
【図２１】
0004619399.tif 000022
【図２２】
0004619399.tif 000023
【図２３】
0004619399.tif 000024
【図２４】
0004619399.tif 000025
【図２５】
0004619399.tif 000026
【図２６】
0004619399.tif 000027
【図２７】
0004619399.tif 000028
【図２８】
0004619399.tif 000029
【図２９】
0004619399.tif 000030
【図３０】
0004619399.tif 000031
【図３１】
0004619399.tif 000032
【図３２】
0004619399.tif 000033
【図３３】
0004619399.tif 000034
【図３４】
0004619399.tif 000035
【図３５】
0004619399.tif 000036
【図３６】
0004619399.tif 000037
【図３７】
0004619399.tif 000038
【図３８】
0004619399.tif 000039
【図３９】
0004619399.tif 000040
【図４０】
0004619399.tif 000041
【図４１】
0004619399.tif 000042
【図４２】
0004619399.tif 000043
【図４３】
0004619399.tif 000044
【図４４】
0004619399.tif 000045
【図４５】
0004619399.tif 000046
【図４６】
0004619399.tif 000047