以下、本発明の実施の形態を図面を参照して詳細に説明する。
図1は、本発明の第1の実施形態に係る情報処理装置を含めた印刷システムの構成例を示すブロック図である。
図1において、本発明の実施形態における印刷システムは、情報処理装置としてのコンピュータ1000と、印刷装置としてのプリンタ1500とを備え、これらはネットワーク121を介して互い接続されている。
コンピュータ1000は、CPU101と、RAM102と、ROM103と、入力コントローラ(入力C)105と、ビデオコントローラ(VC)106と、メモリコントローラ(MC)107と、通信I/Fコントローラ(通信I/F C)108と、操作装置109と、表示装置110と、外部メモリ111とを備える。CPU101、RAM102、ROM103、入力コントローラ105、ビデオコントローラ106、メモリコントローラ107、及び通信I/Fコントローラ108は、システムバス104を介して互いに接続されている。
CPU101は、後述する処理の実行に際して必要なプログラム等をRAM102にロードして、プログラムを実行することで各種動作を実現する。また、CPU101は、例えば、RAM102の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、表示装置110上での表示を可能としている。また、CPU101は、表示装置110上の不図示のマウスカーソル等でのユーザによる指示を可能とする。
RAM102は、CPU101の主メモリ、ワークエリア等として機能する。ROM103または外部メモリ111には、CPU101の制御プログラムであるBIOS(Basic Input/Output System)やオペレーティングシステムプログラム(以下、「OS」という。)、後述する各処理を実行するために必要な各種プログラム等が記憶されている。本実施の形態で使用するOSは、例えば、Windows(登録商標) Vista(Microsoft社製)を想定しているが、これに限られるものではない。
入力コントローラ105は、マウス等のポインティングデバイスやキーボードで構成される操作装置109からの入力を制御する。ビデオコントローラ106は、CRTディスプレイ等の表示装置110への表示を制御する。なお、表示装置110は、CRTに限られるものではなく、液晶ディスプレイでも構わない。
メモリコントローラ107は、外部メモリ111へのアクセスを制御する。外部メモリ111は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、及び各種データ等を記憶し、ハードディスク(HD)、フロッピー(登録商標)ディスク(FD)、またはPCMCIAカードスロットにアダプタを介して接続されるコンパクトフラッシュ(登録商標)メモリ等から構成される。通信I/Fコントローラ108は、ネットワーク等を介した外部機器との接続・通信を制御する。例えば、TCP/IPを用いたインターネット通信などにより、ネットワーク121を介してプリンタ1500との間でデータ送受信等が可能である。なお、ネットワーク121はLAN(Local Area Network)であっても、インターネットであってもよく、またケーブル等で接続されたローカルなものであってもよい。
プリンタ1500は、CPU112、RAM119、フォントROM113aと、プログラムROM113bと、データROM113cと、入力部118と、印刷部インターフェース(印刷部I/F)116と、印刷部(プリンタエンジン)117と、操作部1501と、メモリコントローラ(MC)120と、外部メモリ114とを備える。CPU112、RAM119、ROM113、入力部118、印刷部I/F116、操作部1501と、MC120は、システムバス115を介して互いに接続されている。
CPU112は、プログラムROM113bまたは外部メモリ114に記憶された制御プログラム等に基づいて、印刷部I/F116を介して印刷部117に出力情報としての画像信号(描画データ)を出力する。プログラムROM113bには、CPU112により実行される制御プログラム等が記憶される。フォントROM113aには、上記出力情報を生成する際に使用するフォントデータ等が記憶される。データROM113cには、プリンタ1500がハードディスク等の外部メモリ114を有していない場合には、コンピュータ1000上で利用される情報等が記憶される。
CPU112は、入力部118を介してコンピュータ1000との通信処理を行い、プリンタ1500内の情報等をコンピュータ1000に通知することができる。RAM119は、CPU112の主メモリであり、ワークエリア等として機能する。また、RAM119は、不図示の増設ポートに接続されるオプションRAMによりメモリ容量を拡張することができるように構成されている。なお、RAM119は、出力情報展開領域、環境データ格納領域、NVRAM等にも用いられる。
メモリコントローラ120は、外部メモリ114へのアクセスを制御する。外部メモリ114は、オプションとして接続され、フォントデータ、エミュレーションプログラム、フォームデータ等を記憶し、ハードディスク(HD)、ICカード等で構成される。
操作部1501は、操作のためのスイッチやLED等が配されている操作パネルである。なお、プリンタ1500が備える外部メモリ114は、1個に限られるものではなく、複数であってもよい。また、プリンタ1500は、内蔵フォントに加えてオプションフォントカード、言語系の異なるプリンタ制御言語を解釈するプログラムを格納した外部メモリを複数接続できるように構成されていてもよい。さらに、プリンタ1500は、操作部1501により設定されたプリンタモード設定情報を記憶するNVRAM(不図示)を有していてもよい。
本実施の形態では、プリンタ1500がサポートするプリントデータは、上述したXPSデータを想定しているが、これに限定されるものではなく、同様のXML形式のファイルフォーマットを有するデータであってもよい。
本発明を実現するための印刷機器制御プログラム(以下、「プリンタドライバ」という。)は外部メモリ111に記録されており、必要に応じてRAM102にロードされることによりCPU101によって実行される。プリンタドライバが用いる定義ファイル及び各種情報テーブルは外部メモリ111に格納されている。
なお、上記印刷システムの構成は一例であり、用途や目的に応じて様々な構成例があることは云うまでもない。例えば、本発明の機能が実現されるのであれば、単体の機器に適用されてもよく、LAN、WAN(Wide Area Network)等のネットワークを介して接続された複数の機器からなるシステムに適用されてもよい。
図2は、図1のコンピュータ1000での印刷制御処理時に機能するソフトウェアの構成を示すブロック図である。
図2において、コンピュータ1000は、アプリケーションプログラム(以下、「アプリケーション」という。)201と、グラフィックスエンジン202と、プリンタドライバ203と、プリントサブシステム204とを備える。これらは、それぞれ外部メモリ111にファイルとして保存されたプログラムモジュールである。これらのモジュールは、OSやそのモジュールを利用するモジュールによってRAM102にロードされて実行される。
アプリケーション201及びプリンタドライバ203は、外部メモリ111から、または後述する図3のネットワーク301を介して接続された外部機器から、ハードディスク(HD)等の外部メモリ111に追加可能になっている。外部メモリ111に保存されているアプリケーション201は、CPU101によってRAM102にロードされて実行される。このアプリケーション201からプリンタ1500に対して印刷を行わせる際には、同様にCPU101によってRAM102にロードされて実行されるグラフィックスエンジン202を利用して出力(描画)を行う。
グラフィックスエンジン202は、プリンタ毎に用意されたプリンタドライバ203を起動する。これにより、プリンタドライバ203は、CPU101によって外部メモリ111からRAM102にロードさせて実行される。グラフィックスエンジン202は、このプリンタドライバ203を用いて、アプリケーション201から出力された印字命令や描画命令をプリンタに適するプリンタ制御命令に変換する。
プリンタドライバ203により変換されたプリンタ制御コマンドは、プリントサブシステム204を経由して、ネットワーク121を介してプリンタ1500に出力される。プリントサブシステム204は、OSによって起動されて、CPU101によって外部メモリ111からRAM102にロードされて実行されるものであり、印刷ジョブのスケジューリング、コンピュータ1000とプリンタ1500との接続制御、及びプリンタ1500のステータスの管理を行う。
なお、プリンタドライバ203は、前述した、アプリケーション201から出力された印字命令や描画命令をプリンタ制御コマンドに変換し、プリント出力に反映されるようプリンタ1500に指示する機能に加えて、プリンタドライバ203やプリンタ1500が有する機能を制御するための設定を行う機能(以下、「ユーザインターフェース(UI)」という。)、その設定を記憶する機能、プリンタドライバ203やプリンタ1500が有する機能の情報をアプリケーション201やOSに提供する機能、UIで設定された機能がプリンタの有する機能である場合にプリンタ制御命令を生成する機能、及び、UIで設定された機能がプリンタドライバ203独自で行う機能の場合にその機能を実現する機能等を有する。
図3は、図1のコンピュータ1000及びプリンタ1500を利用した印刷システムの一例を示すブロック図である。
図3において、印刷システムは、クライアントコンピュータとしての複数のコンピュータ1000と、プリンタ1500と、プリントサーバコンピュータ4000とを有し、これらがネットワーク301を介して互いに接続されている。コンピュータ1000内の通信I/Fコントローラ108は、ネットワークインターフェースカード(NIC)の機能を有するものとする。
プリンタ1500は、セントロニクスやUSB(Universal Serial Bus)等のローカルインターフェース302を介してプリントサーバコンピュータ4000と接続され、該プリントサーバコンピュータ4000を介してネットワーク301に接続される形態であってもよく、ネットワーク301に直接接続される形態であってもよい。なお、ネットワーク301に直接接続されたプリンタ1500内の入力部118は、ネットワークインターフェースカード(NIC)の機能を有するものとする。
コンピュータ1000は、プリントサーバコンピュータ4000を介してネットワーク301に接続されたプリンタ1500に印刷ジョブを送信する場合、まず、プリントサブシステム204を介して、プリントサーバコンピュータ4000へ印刷ジョブを送信する。そして、プリントサーバコンピュータ4000は、コンピュータ1000から送信されてきた印刷ジョブを、プリントサーバコンピュータ4000上の不図示のプリントサブシステムを介して、プリンタ1500へ送信する。
また、コンピュータ1000は、ネットワーク301に直接接続されたプリンタ1500に印刷ジョブを送信する場合、プリントサブシステム204を介して、プリンタ1500に直接印刷ジョブを送信する。
次に、図12を用いて、GDIプリントパスに従って機能するコンピュータ1000について説明する。
図12は、コンピュータ1000での印刷制御処理時に、図2でGDIプリントパスを用いて機能する機能部の構成を示す図である。なお、GDIプリントパスの場合、図2のプリンタドライバ203が図12のプリンタグラフィックスドライバ406に対応する。
図12において、GDIプリントパスに従って機能するコンピュータ1000の機能部は、アプリケーション201、GDI401、ユーザインターフェースドライバ402、スプーラ403、EMFスプールファイル404、プリントプロセッサ405、プリンタグラフィックスドライバ406、及びランゲージモニタ407で構成される。
まず、図12に示す各機能部の印刷制御機能について説明する。
アプリケーション201は、GDI401を介して、プリンタ1500に対して印刷条件を設定する。具体的には、アプリケーション201は、例えば、印刷に使用する用紙のサイズや逆順で印刷するか否かの設定や製本の体裁で印刷を行う製本印刷を実施するか否かの設定などの各種印刷条件を設定する。また、アプリケーション201は、GDI401を介して、プリンタ1500に対して文書や写真画像等の描画命令を発行し、印刷実行を指示する。以下、図12の説明において、描画命令の発行に伴いGDI401を介してスプーラ403に通知される文書、画像データ、及び描画命令を総称して「印刷データ」と呼ぶ。
ユーザインターフェースドライバ402は、GDI401を介して通知された印刷条件をプリンタ1500に適合する内容に変更し、最終的な印刷条件を確定する。また、ユーザインターフェースドライバ402は、GDI401を介して、最終的に確定した印刷条件をスプーラ403に通知する。
スプーラ403は、GDI401を介して通知された印刷データ及び印刷条件をEMFスプールファイル404に格納する。プリントプロセッサ405は、EMFスプールファイル404に格納された印刷データを1ページ単位で処理する。プリンタグラフィックスドライバ406は、印刷データをプリンタ1500で印刷出力可能なPDLデータに変換する。ランゲージモニタ407は、プリンタ1500と双方向の通信を行い、プリンタ1500の情報を取得して表示装置110に表示する。また、ランゲージモニタ407は、プリンタグラフィックスドライバ406が生成したPDLデータをプリンタ1500に供給する。なお、ランゲージモニタ407は、プリンタ1500が備えるメモリ容量やエンジンコントローラの構成により異なる転送方法を採用することができる。
次に、GDIプリントパスにおける印刷制御機能の一連の動作について説明する。
まず、アプリケーション201は、ユーザからの操作指示に従って、印刷条件の設定、任意の文書または写真画像等の印刷実行の指示を行う。このようにしてGDI401は、アプリケーション201から印刷実行の指示を受け付けると、ユーザインターフェースドライバ402に対して、プリンタ1500での印刷条件の設定内容及び印刷開始のイベントを通知する。
ユーザインターフェースドライバ402は、プリンタ1500での印刷条件の設定内容の通知を受けると、通知された印刷条件の設定内容を参照し、プリンタ1500にて印刷出力可能な設定内容になっているか否かを判断する。ここで、通知された印刷条件の設定内容が、プリンタ1500にて印刷出力可能な設定内容になっていないと判断した場合には、ユーザインターフェースドライバ402は、プリンタ1500にて印刷出力可能な設定内容になるように、印刷条件の設定内容を一部更新して印刷条件を確定する。
続いて、アプリケーション201は、GDI401を介して、文書・画像データの描画命令を発行する。スプーラ403は、アプリケーション201における描画命令の発行に伴って生成された印刷データ及びユーザインターフェースドライバ402が確定した印刷条件の通知を受けると、通知された印刷データ及び印刷条件をEMFスプールファイル404に格納する。
プリントプロセッサ405は、EMFスプールファイル404から印刷条件の設定内容及び印刷データを取得する。続いて、プリントプロセッサ405は、GDI401を介して、当該印刷条件の設定内容及び印刷データを1ページ単位でプリンタグラフィックスドライバ406に供給する。
GDI401は、プリントプロセッサ405からプリンタグラフィックスドライバ406に印刷データを供給する際に、印刷データに含まれる描画命令をグラフィックス描画コマンドに変換する。プリンタグラフィックスドライバ406は、GDI401により生成されたグラフィックス描画コマンド及びGDI401から通知された印刷条件の設定内容に基づいて、プリントプロセッサ405から供給された印刷データからプリンタ1500が解釈できるPDLデータを生成する。ランゲージモニタ407は、コンピュータ1000からプリンタ1500にPDLデータを伝送するために使用されるインターフェースを経由して、プリンタグラフィックスドライバ406により供給されたPDLデータをプリンタ1500に供給する。プリンタ1500は、ランゲージモニタ407から供給されたPDLデータを解釈し、印刷画像データを用紙上に印刷出力する。
次に、図13を用いて、XPSプリントパスに従って機能するコンピュータ1000について説明する。
図13は、コンピュータ1000での印刷制御処理時に、図2でXPSプリントパスを用いて機能する機能部の構成を示す図である。なお、XPSプリントパスの場合、図2のプリンタドライバ203が図13のユーザインターフェースドライバ402と、レイアウトフィルタ411と、レンダリングフィルタ412とを備えるプリンタドライバに対応する。
図13において、XPSプリントパスに従って機能するコンピュータ1000の機能部は、アプリケーション201、Windows(登録商標) Presentation Foundation(以下、「WPF」と略する。)印刷サポート408、ユーザインターフェースドライバ402、スプーラ403、XPSスプールファイル409、フィルタパイプラインマネージャ410、レイアウトフィルタ411、レンダリングフィルタ412、及びランゲージモニタ407で構成される。なお、レンダリングフィルタ412は、プリンタ1500側に構成されていてもよい。レンダリングフィルタ412を備えるプリンタドライバ或いはレンダリングフィルタ412を備えるプリンタを印刷制御装置と言い換えることが可能である。
まず、図13に示す各機能部の印刷制御機能について説明する。
アプリケーション201は、WPF印刷サポート408を介して、XPSデータを作成する。また、アプリケーション201は、文書や写真画像等のドキュメント、印刷条件、描画命令をXPSデータに対して設定する。以下、XPSデータに含まれている文書や写真画像等のドキュメント、及び描画命令を総称して「印刷データ」と呼ぶ。さらに、アプリケーション201は、WPF印刷サポート408を介して、印刷実行を指示する。
WPF印刷サポート408は、アプリケーション201の指示を受けてXPSデータを構成する。また、WPF印刷サポート408は、XPSデータから印刷条件の設定内容を取り出してユーザインターフェースドライバ402に通知する。また、WPF印刷サポート408は、ユーザインターフェースドライバ402が確定した印刷条件の設定内容をXPSデータに設定する。さらに、WPF印刷サポート408は、XPSデータをスプーラ403に通知する。
ユーザインターフェースドライバ402は、WPF印刷サポート408から通知された印刷条件をプリンタ1500に適合する内容に変更し、最終的な印刷条件を確定する。また、ユーザインターフェースドライバ402は、最終的に確定した印刷条件をWPF印刷サポート408に通知する。
スプーラ403は、WPF印刷サポート408から通知されたXPSデータをXPSスプールファイル409に格納する。フィルタパイプラインマネージャ410は、レイアウトフィルタ411及びレンダリングフィルタ412を介して、XPSスプールファイル409に格納されたXPSデータをプリンタ1500で印刷出力可能なPDLデータに変換し、該PDLデータをプリンタ1500に供給する。なお、XPSデータをプリンタ1500で解釈可能な場合、PDLデータに変換することをせずにプリンタ1500にXPSデータを供給することができる。
レイアウトフィルタ411は、XPSデータ内の印刷データやページ構成を編集する。また、レンダリングフィルタ412は、レイアウトフィルタ411により編集されたXPSデータ内の印刷データをプリンタ1500で印刷出力可能なPDLデータに変換する。
ランゲージモニタ407は、プリンタ1500と双方向の通信を行い、プリンタ1500の情報を取得し表示装置110に表示する。また、ランゲージモニタ407は、フィルタパイプラインマネージャ410から通知されたPDLデータをプリンタ1500に供給する。なお、ランゲージモニタ407は、プリンタ1500が備えるメモリ容量や、エンジンコントローラの構成により異なる転送方法を採用することができる。
OSは、スプーラ403、WPF印刷サポート408、及びフィルタパイプラインマネージャ410の機能を提供する。本発明を有するモジュールは、レンダリングフィルタ412に含まれる。
XPSデータには、イメージファイルやフォントファイル等のリソースファイルの他に、以下のような複数種類のパーツが包含され、各々が以下のような参照を有する。
a)_rels/.rels:文書データとしてのXPSデータの開始点となるパーツ(開始ファイル)である。FixedDocumentSequence(以下、「FDS」と略す。)への参照を有する。
b)FDS:一つの文書データの構成情報が記述されたパーツである。FixedDocument(以下、「FD」と略す。)への参照を有する。なお、一つのデータは複数のドキュメントを有する場合がある。つまり、FDSは、複数のFDへの参照を有する場合がある。
c)FD:一つのドキュメントに存在する複数のページをページ順に並べて束ねるためのパーツ(ページ構成データのファイル)である。一つのドキュメントの構成情報が記述されたパーツであり、FixedPage(以下、「FP」と略す。)への参照を有する。なお、一つのドキュメントは複数のページを有する場合がある。つまり、FDは、複数のFPへの参照を有する場合がある。
d)FP:印刷対象となる1ページの描画内容が記述されたパーツ(印刷対象データのファイル)である。FPパーツは、必要に応じて、イメージファイルやフォントファイルへの参照を有する場合がある。例えば、当該ページにイメージの描画が存在する場合は、当該イメージファイルへの参照を有することになる。
次に、XPSプリントパスにおける印刷制御機能の一連の動作について説明する。
まず、アプリケーション201は、ユーザからの操作指示に従って、任意の文書または写真画像等のドキュメントを読み込む。なお、任意の文書には、予め作成されていたXPSデータも含まれる。続いて、アプリケーション201は、ユーザからの操作指示に従って、XPSデータの作成を行い、文書や写真画像等のドキュメント、印刷条件、描画命令をXPSデータに設定する。なお、予め作成されていたXPSデータを読み込んだ場合には、新たにXPSデータを作成することはなく、アプリケーション201は、読み込んだXPSデータに含まれる印刷条件や描画命令をユーザからの操作指示に従って編集すればよい。
XPSプリントパスでは、予め定義されたXMLスキーマの形式に従って記述されたXMLファイルを用いて印刷条件の設定が行われる。印刷設定を行うために予め定義されたXMLスキーマの形式を「プリントスキーマ」と呼び、印刷スキーマに従って印刷条件が記述されているXMLファイルを「プリントチケット」と呼ぶ。プリントチケットはそのままの形式でXPSデータに含まれることになる。
続いて、アプリケーション201は、ユーザからの操作指示に従って、XPSデータを用いて印刷実行の指示を行う。WPF印刷サポート408は、アプリケーション201から印刷実行の指示を受け付けると、XPSデータ内のプリントチケットを取り出し、印刷条件の設定内容として当該プリントチケットをユーザインターフェースドライバ402に通知する。
ユーザインターフェースドライバ402は、プリンタ1500での印刷条件の設定内容の通知を受けると、通知された印刷条件の設定内容を参照し、プリンタ1500にて印刷出力可能な設定内容になっているか否かを判断する。通知された印刷条件の設定内容が、プリンタ1500にて印刷出力可能な設定内容になっていないと判断した場合、ユーザインターフェースドライバ402は、プリンタ1500にて印刷出力可能な設定内容になるように、印刷条件の設定内容を一部更新し、印刷条件を確定する。続いて、ユーザインターフェースドライバ402は、確定した印刷条件によりプリントチケットを更新し、WPF印刷サポート408に通知する。WPF印刷サポート408は、ユーザインターフェースドライバ402から通知されたプリントチケットをXPSデータに設定し、当該XPSデータをスプーラ403に通知する。
スプーラ403は、WPF印刷サポート408からXPSデータの通知を受けると、通知されたXPSデータをXPSスプールファイル409に格納する。なお、WPF印刷サポート408を介さず、アプリケーション201からスプーラ403に任意のXPSデータを通知することも可能である。つまり、MXDWで作成したXPSデータを通知することも可能である。続いて、スプーラ403は、フィルタパイプラインマネージャ410に対して印刷開始のイベントを通知する。
フィルタパイプラインマネージャ410は、スプーラ403から印刷開始のイベントの通知を受けると、XPSスプールファイル409に格納されているXPSデータを取得し、当該XPSデータをレイアウトフィルタ411に通知する。
レイアウトフィルタ411は、通知されたXPSデータから印刷データ、及びプリントチケットを取得する。続いて、レイアウトフィルタ411は、プリントチケットに記載されている印刷条件の設定内容に基づいて、印刷データの編集、及びXPSデータのページ構成の編集を行う。なお、印刷データやページ構成の編集内容には、ビットマップの合成(ウォーターマーク)、ページ合成(割付)、ページ順序の変更(逆順)等が含まれる。
続いて、レイアウトフィルタ411は、印刷データやページ構成の編集を終えた後のXPSデータをフィルタパイプラインマネージャ410に通知する。フィルタパイプラインマネージャ410は、レイアウトフィルタ411から通知されたXPSデータをレンダリングフィルタ412に通知する。
レンダリングフィルタ412は、通知されたXPSデータから印刷データ、及びプリントチケットを取得する。続いて、レンダリングフィルタ412は、プリントチケットに記載されている印刷条件の設定内容に基づいて、印刷データからプリンタ1500が解釈できるPDLデータを生成し、該PDLデータをフィルタパイプラインマネージャ410に通知する。
フィルタパイプラインマネージャ410は、レンダリングフィルタ412から通知されたPDLデータをランゲージモニタ407に供給する。ランゲージモニタ407は、コンピュータ1000からプリンタ1500にPDLデータを伝送するために使用されるインターフェースを経由して、フィルタパイプラインマネージャ410により供給されたPDLデータをプリンタ1500に供給する。プリンタ1500は、ランゲージモニタ407から供給されたPDLデータを解釈し、印刷画像データを用紙上に印刷出力する。
本発明は、特に、MXDWでXPSデータを作成する際に、図31に示すように、インタリーブ設定がONまたはOFFにかかわらず、MXDW作成されたXPSデータをレンダリングフィルタ412でPDLデータを作成する際、XPSデータ内のパーツデータを検索するのに有効である。
次に、上述したXPSプリントパスにおける印刷制御機能の中で、レイアウトフィルタ411が行う処理について説明する。
図33は、レイアウトフィルタ411により実行されるXPSデータ内のパーツのインタリーブ化処理を示すフローチャートである。なお、インタリーブ化すると、XPSデータ内のパーツを、例えば、印刷処理順に並べることができる。
レイアウトフィルタ411は、まず、ユーザインターフェースドライバ402でユーザの操作によって、印刷するデータをインタリーブするか否かの指定を判定する(ステップS2400)。言い換えると、インタリーブ化するか否かを決定する処理である。
インタリーブをする指定がなかった場合、インタリーブ処理を行わず、本処理を終了とする。一方、インタリーブをする指定があった場合、インタリーブをするために、パーツを取得する(ステップS2401)。初めに取得するパーツは、_rels/.relsである。次に、本パーツが既にインタリーブ化されているかを判断する(ステップS2402)。パーツがインタリーブ化されているか否かは、_rels/.relsが一つのファイルである構成であるか、若しくは_rels/.relsはディレクトリであり、本ディレクトリ内にファイルを有する構成であるかによって判断され得る。
ステップS2402の判断の結果、取得したパーツがインタリーブ化されていない場合は、レイアウトフィルタ411は、本パーツがXMLデータであるかを判断する(ステップS2403)。本パーツがXMLデータである場合は、レイアウトフィルタ411は、本パーツがプリントチケットまたはFPパーツであるかを判断する(ステップS2404)。本パーツがプリントチケットまたはFPパーツでない場合は、レイアウトフィルタ411は、後述するインタリーブ化(分割)処理を実施する(ステップS2405)。
レイアウトフィルタ411は、取得したパーツが既にインタリーブ化(分割)されていると判断した場合(ステップS2402でYES)、該パーツがXMLデータでないと判断した場合(ステップS2403でNO)、該パーツがプリントチケット、またはFPパーツであると判断した場合(ステップS2404でYES)には、取得したパーツがインタリーブ化を行う必要がないことを意味するため、ステップS2405のインタリーブ化(分割)処理を実施しない。
次に、レイアウトフィルタ411は、ステップS2401〜S2405の処理を全てのパーツに対して実施したかを判断する(ステップS2406)。全てのパーツに対して当該処理を実施していないと判断した場合には、レイアウトフィルタ411は、当該パーツから他のパーツへの参照タグを検索し、検索されたパーツに対してステップS2401〜S2405を実施する。一方、全てのパーツに対して当該処理を実施済みと判断した場合には、インタリーブ化されていないパーツをインタリーブ化する処理を終了する。
次に、図34を用いて、図33のステップS2405におけるインタリーブ化処理の詳細を説明する。本処理では、他のパーツへの参照タグを有するパーツデータが、他のパーツへの参照タグを有するタグに分割され、当該パーツがインタリーブ化される。
図34は、図33のステップS2405におけるインタリーブ化処理の詳細を示すフローチャートである。
レイアウトフィルタ411は、まず、パーツデータを取得する(ステップS2501)。次に、レイアウトフィルタ411は、タグの検索処理の開始位置をパーツの先頭に設定する(ステップS2502)。次に、レイアウトフィルタ411は、当該パーツの記述内容より、他のパーツへの参照タグを検索する(ステップS2503)。次に、レイアウトフィルタ411は、ステップS2503で他のパーツへの参照タグが見付かったかを判断する(ステップS2504)。
ステップS2504において、他のパーツへの参照タグが見付かったと判断した場合、レイアウトフィルタ411は、当該パーツと同一の階層に新規ディレクトリを追加する(ステップS2505)。なお、本ディレクトリの名称を当該パーツと同一にする。一方、ステップS2504において、他のパーツへの参照タグが見付からなかったと判断した場合、レイアウトフィルタ411は、インタリーブ化する必要がないパーツであることを意味するため、ステップS2505〜S2514の処理を実施せず、本処理を終了する。
次に、レイアウトフィルタ411は、ステップS2505で追加した新規ディレクトリ以下にパーツを追加する(ステップS2506)。なお、追加するファイルの名称を「[s].piece」とする。ここで、“s”は10進数の数値であり、当該ディレクトリ以下に追加したファイルに、0から順に1を加算した値を割り振る。Sは、レイアウトフィルタ411が管理するRAM102に確保されたメモリ領域に保持される。
次に、レイアウトフィルタ411は、ステップS2502で設定したタグ検索開始位置からステップS2503で検索した他のパーツへの参照タグの間に存在する記述内容を、ステップS2506で追加したパーツに書き出す(ステップS2507)。次に、レイアウトフィルタ411は、タグ検索開始位置をステップS2503で検索した他のパーツへの参照タグの終端の位置に移動する(ステップS2508)。次に、レイアウトフィルタ411は、ステップS2506と同様に、ステップS2505で追加した新規ディレクトリ以下にパーツを追加する(ステップS2509)。なお、本ファイルの名称の決定方法もステップS2506と同様とする。
次に、レイアウトフィルタ411は、ステップS2503と同様に、当該パーツの記述内容より、他のパーツへの参照タグを検索する(ステップS2510)。次に、レイアウトフィルタ411は、ステップS2504と同様に、ステップS2510で他のパーツへの参照タグが見付かったかを判断する(ステップS2511)。
ステップS2511において、他のパーツへの参照タグが見付かったと判断した場合、ステップS2507と同様に、レイアウトフィルタ411は、ステップS2508で移動したタグ検索開始位置からステップS2510で検索した他のパーツへの参照タグの間に存在する記述内容を、ステップS2509で追加したパーツに書き出す(ステップS2514)。続いて、ステップS2508〜S2511を繰り返す。
一方、ステップS2511の判断の結果、他のパーツへの参照タグが見付からなかったと判断した場合、レイアウトフィルタ411は、ステップS2508で移動したタグ検索開始位置から当該パーツデータの終端までの間に存在する記述内容を、ステップS2509で追加したパーツに書き出す(ステップS2512)。続いて、レイアウトフィルタ411は、元のパーツデータを削除して(ステップS2513)、リターンする。
上述したインタリーブ化(分割)処理を図35のようなインタリーブされていないデータに対して実施すると、図36のように分割される。
次に、上述したXPSプリントパスにおける印刷制御機能の中で、レンダリングフィルタ412が行う処理について説明する。
図14は、レンダリングフィルタ412により実行されるXPSデータの解析処理を示すフローチャートである。
前述の通り、フィルタパイプラインマネージャ410は、スプーラ403から印刷開始のイベントの通知を受けると、XPSスプールファイル409に格納されているMXDWで作成されたXPSデータを取得し、当該XPSデータをレイアウトフィルタ411に通知する。レイアウトフィルタ411は、プリントチケットに記載されている印刷条件の設定内容に基づいて、印刷データの編集及びXPSデータのページ構成の編集を行い、編集を終えた後のXPSデータをフィルタパイプラインマネージャ410に通知する。フィルタパイプラインマネージャ410は、レイアウトフィルタ411から通知されたXPSデータをレンダリングフィルタ412に通知する。レンダリングフィルタ412はフィルタパイプラインマネージャ410から通知を受け取ると、図28に示すジョブ情報管理テーブル2800を当該レンダリングフィルタ412が管理するRAM102内のメモリ領域に作成して保持する(ステップS1001)。
ここで、ジョブ情報管理テーブル2800を構成する項目の内容について図28及び図29を参照して説明する。
図28はジョブ情報管理テーブル2800の構成を示す図であり、図29は、ジョブ情報管理テーブル2800におけるイメージ位置リストのデータ構造を示す図である。
図28において、インタリーブ2801は、処理対象のXPSデータがインタリーブ化(分割)されているか否かを示す情報が格納される。すなわち、XPSデータがインタリーブ化(分割)されている場合には、インタリーブ2801に“ON”が格納され、インタリーブ化されていない場合にはインタリーブ2801に“OFF”が格納されている。
イメージ配置方法2802は、イメージファイルとしてのイメージパーツがどこに配置されるかを示す情報(配置情報)が格納される。すなわち、イメージ配置方法2802に格納される情報としては、“ページの前”若しくは“ページの後”である。フォント配置方法2803は、イメージ配置方法2802と同様に、フォントファイルとしてのフォントパーツがどこに配置されるかを示す情報が格納される。すなわち、フォント配置方法2803に格納される情報としては、“ページの前”若しくは“ページの後”である。
イメージ位置リスト最初のデータへのポインタ2804は、図29に示す、全ての処理済みのイメージパーツのXPSデータ内での位置を記録したリスト(イメージ位置リスト)への最初のデータへのポインタ(配置位置)が格納される。イメージ位置リスト最後のデータへのポインタ2805は、図29に示す、全ての処理済みのイメージパーツのXPSデータ内での位置を記録したリスト(イメージ位置リスト)への最後のデータへのポインタ(配置位置)が格納される。
フォント位置リスト最初のデータへのポインタ2806及びフォント位置リスト最後のデータへのポインタ2807は、イメージ位置リスト最初/最後のデータへのポインタ2804,2805と同様である。
図14に戻り、ステップS1002において、レンダリングフィルタ412は、図30に示す処理中ページ情報管理テーブル3000をレンダリングフィルタ412が管理するRAM102内にメモリ領域に作成して保持する。処理中ページ情報管理テーブル3000を構成する項目の内容を図30に示す。
図30は、処理中ページ情報管理テーブル3000の構成を示す図である。
図30において、ドキュメント位置3001は、処理中FPパーツのパスが記述されているFDパーツ(またはピース)のXPSデータの先頭からの位置(バイト単位、配置位置)が格納される。インタリーブ化されていないXPSデータを処理するのであれば、ここに入力される値は一つのドキュメントの処理が終わるまで一定である。これは、FDパーツがFDピースにインタリーブされないためである。なお、ドキュメント位置3001は、XPSデータの先頭からの位置(バイト単位、配置位置)以外に、RAM102内に記憶されているアドレスを用いてもよい。
ページ位置3002は、FPパーツのXPSデータの先頭からの位置(バイト単位、配置位置)が格納される。なお、ページ位置3002は、FPパーツを検索するたびに更新されるものである。前ページ位置3003は、現在処理しているFPパーツの前に処理していたFPパーツのXPSデータの先頭からのページ位置(バイト単位、配置位置)が格納される。この項目(前ページ位置3003)はインタリーブ化されていないXPSデータにのみ使用される。なお、ページ位置3002、前ページ位置3003は、ドキュメント位置3001と同様に、RAM102内に記憶されているアドレスを用いてもよい。
図14に戻り、ステップS1003では、レンダリングフィルタ412は、ZIP圧縮されたXPSデータを取得する。続いて、レンダリングフィルタ412は、取得したXPSデータを解析し、プリンタ1500が解釈できるPDLデータを生成するための中間データを生成し、当該レンダリングフィルタ412が管理するRAM102内のメモリ領域に作成して保持する(ステップS1004)(XPSデータ解析処理)。なお、レンダリングフィルタ412が管理可能なメモリ領域が作成可能であれば、RAM102に限定されず、他の記憶装置であってもよい。また、レンダリングフィルタ412は、プリンタ1500に構成されていてもよい。このプリンタ1500にレンダリングフィルタ412に保持する場合は、PDLデータを生成せずに、印刷部117で印字する描画データを生成する。
ステップS1003でのXPSデータの取得は、XPSデータを取得しながら、S1004のXPSデータの解析処理を平行して実行する(ストリーミングする)ために、フィルタパイプラインマネージャ410から細分化データ(パケット)単位でデータを取得するように構成してもよい。この場合、分割されたデータを取得しながら、レンダリングフィルタ412は解析を実行する。
また、プリンタ1500にレンダリングフィルタ412が構成されている場合は、プリンタ1500へプリントデータ(XPSデータ)を送信する際に、プリンタ1500で即時に印刷処理を実行できるようにするために、フィルタパイプラインマネージャ410またはランゲージモニタ407がXPSデータを細分化データ(パケット)単位にしてプリンタ1500に送信する。つまり、プリンタ1500は、データを受信しながら、解析処理して、順次印刷を実行することが可能となる。
なお、受信または取得した細分化データは、記憶領域(RAM102またはRAM119)に記憶される。また、細分化データを受信または取得しながら解析処理をするため、解析処理が実行できる単位(1つのファイル(パーツ)分)のデータを受信していない、または取得できない(読出しができない)場合は解析処理を実行できるようになるまで待機する。
次に、レンダリングフィルタ412は、ステップS1004で生成された中間データをPDLデータに変換するモジュールに渡してPDLデータに変換し、当該PDLデータをフィルタパイプラインマネージャ410に通知する(ステップS1005)。なお、後述する図23のステップS1904の処理の後に1ページ毎の中間データをその都度PDL変換モジュールに渡すか、または図22のステップS1801で抽出した1描画命令を中間データに変換して、その都度PDL変換モジュールに渡しても構わない。
また、中間データ(XPSデータ)を用いて印刷することが可能なプリンタである場合には、ステップS1005の処理を実行することなく、中間データをプリンタ1500に送信するように構成することも可能である。さらに、プリンタ1500にレンダリングフィルタが構成され、プリンタ1500が中間データを用いて印刷することが可能である場合は、ステップS1005の処理を実行することなく、中間データを描画データに変換して印刷部(プリンタエンジン)117に渡して印刷することも可能である。
次に、図15を用いて、図14のステップS1004におけるXPSデータ解析処理の詳細を説明する。
図15は、図14のステップS1004におけるXPSデータ解析処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、取得したXPSデータにおける_rels/.relsパーツデータを全て解析したか否かを判断する(ステップS1101)。全て解析したか否かの判断は、_rels/.relsパーツデータが前述したようにXML形式であるので、ルート要素の終了タグを処理したか否かで行われる。具体的には、レンダリングフィルタ412は、図9に示すパーツ852に記述されている</Relationships>というルート要素の終了タグを検出したところで、_rels/.relsパーツデータの解析終了と判断する。以降、XML形式のパーツに関して、全て解析したか否かの判断は同様の方法をとるものとする。なお、ルート要素の終了タグは最後のピースデータに必ず存在する。
なお、ステップS1101では、取得したXPSデータがインタリーブ化されているか否かを判定することもできる。XPSデータがインタリーブ化されていない場合は、_rels/.relsパーツデータが1つしか存在しないためである(インタリーブ判定手段)。
ステップS1101の判断の結果、_rels/.relsパーツデータを全て解析済みであれば、本処理を終了する。一方、未処理の_rels/.relsパーツデータが存在しているのであれば(ステップS1101でYES)、レンダリングフィルタ412は、未処理の_rels/.relsパーツデータ(またはピースデータ)を全て取得したか否かを判断する(ステップS1102)。_rels/.relsパーツデータを全て取得したか否かの判断は、インタリーブ化されている場合は、後述するXPSデータ内のパーツ(またはピース)の検索時に、データ名の最後が「/_rels/.rels/[i].last.piece」となっているピースデータを取得したときに全て取得したと判断される。なお、XPSデータがインタリーブ化されていない場合は、_rels/.relsパーツデータが1つしか存在しないので、ステップS1103の処理は1回しか行われない。
以降、パーツを全て取得したか否かの判断は、上記と同様の方法をとるものとする。
ステップS1102の判断の結果、まだ_rels/.relsパーツデータ(またはピースデータ)を全て取得していないのであれば(ステップS1102でYES)、レンダリングフィルタ412は、次のパーツデータ(またはピースデータ)を検索・伸長して取得する(ステップS1103)。ここで、本検索方法は、Local File Headerをデータの先頭から検索する方法を採用するものとする。また、このとき、検索するLocal File Header内のデータ名としては、“_rels/.rels”若しくは、インタリーブ化されている場合の“_rels/.rels/[i].piece”(iは0で始まる通し番号)である。
以降、特に断りが無い限り、XPSデータ内のパーツの検索方法はこの方法をとるものとする。また、本伸張方法は一般的なZIPデータの伸張方法であり、伸張したデータはディレクトリ構成を保持したまま各種ファイルを外部メモリ111に書き出す形で保存される。伸長方法についても、以降の説明ではこの方法をとるものとする。
次に、レンダリングフィルタ412は、取得した_rels/.relsパーツデータ(またはピースデータ)を解析し、FDSのXPS内でのデータ名を取得する(ステップS1104)。_rels/.relsパーツデータは、前述の通り、XML形式で記述されたファイルであり、本解析方法については一般的なXMLファイルの解析方法を採用する。なお、以後、XML形式で記述されたファイルを解析する場合は、同様に、一般的なXMLファイルの解析方法を採用するものとする。
ステップS1105において、レンダリングフィルタ412は、FDSのデータ名を取得することができたときは(ステップS1105でYES)、FDSの処理を行う(ステップS1106)。一方、FDSのデータ名を取得することができかなったときは(ステップS1105でNO)、ステップS1101へ戻る。
次に、図16を用いて、図15のステップS1106におけるFDSの処理の詳細を説明する。
図16は、図15のステップS1106におけるFDSの処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、XPSデータにおけるFDSパーツデータを全て解析したか否かを判断する(ステップS1201)。この判断の結果、まだFDSパーツデータに未解析の箇所が存在すれば(ステップS1201でYES)、レンダリングフィルタ412は、FDSパーツデータを全て取得したか否かの判断を行う(ステップS1202)。この判断の結果、まだFDSパーツデータ(またはピースデータ)を全て取得していないのであれば(ステップS1202でYES)、レンダリングフィルタ412は、次のFDSパーツデータ(またはピースデータ)を検索・伸長して取得する(ステップS1203)。
次に、レンダリングフィルタ412は、取得したFDSパーツデータ(またはピースデータ)を解析し、FDのXPS内でのデータ名を一つ取得する(ステップS1204)。FDのデータ名を取得することができたときは(ステップS1205でYES)、レンダリングフィルタ412は、FDの処理を行う(ステップS1206)。一方、FDのデータ名を取得することができなかったときは(ステップS1205でNO)、ステップS1201へ戻る。
次に、図17を用いて、図16のステップS1206におけるFDの処理の詳細を説明する。
図17は、図16のステップS1206におけるFDの処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、XPSデータにおけるFDパーツデータを全て解析したか否かを判断する(ステップS1301)。この判断の結果、まだFDパーツデータに未解析の箇所が存在すれば(ステップS1301でYES)、レンダリングフィルタ412は、FDパーツデータを全て取得したか否かを判断する(ステップS1302)。この判断の結果、まだFDパーツデータを全て取得していないときは(ステップS1302でYES)、レンダリングフィルタ412は、次のFDパーツデータ(またはピースデータ)を検索・伸長して取得する(ステップS1303)。ここでの検索方法の詳細については後述する。
次に、レンダリングフィルタ412は、取得したFDパーツデータ(またはピースデータ)を解析し、FPのXPS内でのデータ名を一つ取得する(ステップS1304)。FPのデータ名を取得することができたときは(ステップS1305でYES)、FPの処理を行う(ステップS1306)。一方、FPのデータ名を取得できなかったときは(ステップS1305でNO)、ステップS1301へ戻る。
次に、図18を用いて、図17のステップS1303におけるFDパーツデータの検索・伸長・取得処理の詳細を説明する。
図18は、図17のステップS1303におけるFDパーツデータの検索・伸長・取得処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、上述した図28に示すジョブ情報管理テーブル2800を参照し、XPSデータがインタリーブ化されているか否かの判断がなされているかを判断する(ステップS1401)。具体的な判断方法としては、ジョブ情報管理テーブル2800におけるインタリーブ2801に“ON”も“OFF”も何も格納されていないか否かで判断される。
ステップS1401の判断の結果に応じて、レンダリングフィルタ412は、第1のFDパーツ取得処理(ステップS1402)または第2のFDパーツ取得処理(ステップS1403)のいずれかの処理を実行する。すなわち、レンダリングフィルタ412は、ジョブ情報管理テーブル2800におけるインタリーブ2801が空であるときは、ステップS1402の第1のFDパーツ取得処理を実行する一方、ジョブ情報管理テーブル2800におけるインタリーブ2801が空でないときは、ステップS1403の第2のFDパーツ取得処理を実行する。
次に、図19を用いて、図18のステップS1402における第1のFDパーツ取得処理の詳細を説明する。
図19は、図18のステップS1402における第1のFDパーツ取得処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、フィルタパイプラインマネージャ410から順次受信し、RAM102などの記憶領域に記憶されたXPSデータを読み出し、FDSパーツデータの解析によって判明するFDパーツ名のデータをXPSデータの先頭から検索し、伸長し、取得する(ステップS1501)。次に、レンダリングフィルタ412は、取得したFDパーツデータがピースデータに分割されているか、すなわちFDパーツデータがインタリーブ化されているかを判断する(ステップS1502)(インタリーブ判定手段)。この判断の結果、取得したFDパーツデータのヘッダ内のデータ名が“FD名/[i].piece”(iは0から始まる通し番号)となっていれば、レンダリングフィルタ412は、FDパーツデータがインタリーブ化されていると判断して(ステップS1502でYES)、ジョブ情報管理テーブル2800のインタリーブ2801に“ON”を書き込む(ステップS1503)。
一方、レンダリングフィルタ412は、インタリーブ化されていないと判断した場合は(ステップS1502でNO)、ジョブ情報管理テーブル2800のインタリーブ2801に“OFF”を書き込む(ステップS1504)。ここでは、FDパーツ名によってインタリーブ化されているか否かの判断を行っているが、インタリーブONの設定で、MXDWからXPSデータが作成されているのであれば、_rels/.rels、またはFDSパーツデータのパーツ名で判断することも可能である。
次に、ステップS1505では、レンダリングフィルタ412は、図30に示した処理中ページ情報管理テーブル3000のドキュメント位置3001に、取得したFDパーツデータ(またはピースデータ)のXPSデータ内での先頭からの位置をバイト単位(配置位置)で書き込む。続いて、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のドキュメント位置3001以外の項目を空にする(ステップS1506)。
次に、図20を用いて、図18のステップS1403における第2のFDパーツ取得処理の詳細を説明する。
図20は、図18のステップS1403における第2のFDパーツ取得処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のインタリーブ2801の内容を確認し、“ON”か否かを判断する(ステップS1601)。この判断の結果、ジョブ情報管理テーブル2800のインタリーブ2801が“ON”のときは、ステップS1602へ進む一方、“OFF”のときは、ステップS1605へ進む。
ステップS1602では、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のページ位置3002が空か否かを判断する。処理中ページ情報管理テーブル3000のページ位置3002が空の場合、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のドキュメント位置3001に記述されたバイト数分(配置位置)、XPSデータの先頭から進んだXPSデータから正順に検索し、FDパーツデータを取得する(ステップS1603)。一方、処理中ページ情報管理テーブル3000のページ位置3002が空でない場合、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のページ位置3002に格納されたページ位置から正順に検索してFDパーツデータを取得する(ステップS1604)。ここで「正順」とは、データの先頭から終端の方向を意味する。
ステップS1605では、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のドキュメント位置3001に格納されたドキュメント位置から正順にFDパーツデータを検索し、取得する。
次に、レンダリングフィルタ412は、ステップS1603またはステップS1604またはステップS1605における検索処理が終了した後、FDパーツデータ(またはピースデータ)が取得できたか否かを判断する(ステップS1606)。この結果、取得できていなければ、レンダリングフィルタ412は、XPSデータの先頭から順番に検索してFDパーツデータを取得する(ステップS1607)。これは、データの配置規則が統一されていないXPSデータに対応するための処理である。MXDWで作成されたデータの場合、本ステップをスルーする。
次に、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のドキュメント位置3001に、取得したFDパーツデータ(またはピースデータ)のXPSデータ内での先頭からの位置(バイト単位、配置位置)を書き込む(ステップS1608)。続いて、処理中ページ情報管理テーブル3000のドキュメント位置3001以外の項目を空にする(ステップS1609)。
次に、図21を用いて、図17のステップS1306におけるFPの処理の詳細について説明する。
図21は、図17のステップS1306におけるFPの処理の詳細を示すフローチャートである。
レンダリングフィルタ412は、ジョブ情報管理テーブル2800のインタリーブ2801の内容を確認する(ステップS1701)。ジョブ情報管理テーブル2800のインタリーブ2801が“ON”のときは、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のドキュメント位置3001に格納されたドキュメント位置から正順にFPパーツデータを検索し、FPパーツデータを取得する(ステップS1702)。続いて、レンダリングフィルタ412は、FPパーツデータを取得できたか否かを判断する(ステップS1703)。取得できないときは、レンダリングフィルタ412は、XPSデータの先頭から正順に検索して、FPパーツデータを取得する(ステップS1704)。
次に、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のインタリーブ2801が“OFF”のときは、処理中ページ情報管理テーブル3000のページ位置3002が空か否かを判断する(ステップS1705)。空の場合は、レンダリングフィルタ412は、XPSデータの先頭から正順に検索して、FPパーツデータを取得する(ステップS1706)。空でない場合は、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のページ位置3002に格納されたページ位置から正順に検索して、FPパーツデータを取得する(ステップS1707)。続いて、レンダリングフィルタ412は、FPパーツデータを取得できたか否かを判断する(ステップS1708)。取得できないときは、レンダリングフィルタ412は、XPSデータの先頭から正順に検索して、FPパーツデータを取得する(ステップS1709)。
なお、本実施形態では、インタリーブされていない場合(ジョブ情報管理テーブル2800のインタリーブ2801が“OFF”のとき)には、ステップS1705〜S1710の処理を行うように構成したが、インタリーブされていない場合には、XPSデータの先頭から毎回検索するように構成してもよい。これは、インタリーブされていないXPSデータは印刷処理する順にファイル(パーツ)が並んでいないこともあるため、XPSデータの先頭から検索する構成をとることが可能である。つまり、インタリーブされていない場合の検索の先頭は、XPSデータの先頭の位置、或いはFDパーツデータの先頭位置などいずれを検索位置としてもよい。
ステップS1710では、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のインタリーブ2801が“OFF”の場合は、続けて処理中ページ情報管理テーブル3000の前ページ位置3003にページ位置3002の内容をコピーする。次に、FPパーツデータの取得後、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のページ位置3002に、取得したFPパーツデータのXPSデータ先頭からの位置をバイト単位(配置位置)で書き込む(ステップS1711)。続けて、レンダリングフィルタ412は、取得したFPパーツデータの解析処理を行う(ステップS1711)。なお、複数のFPパーツデータを構成するXPSデータの場合、このページ位置3002は、FPパーツデータを検索し、取得するたびに更新される。
次に、図22を用いて、図21のステップS1712におけるFPパーツデータの解析処理の詳細を説明する。
図22は、図21のステップS1712におけるFPパーツデータの解析処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、取得したFPパーツデータを解析し、描画命令を抽出する(ステップS1801)。次に、レンダリングフィルタ412は、抽出した描画命令にイメージデータやフォントデータへの外部リソース参照が含まれているかを判断する(ステップS1802)。外部リソース参照が含まれているのであれば、レンダリングフィルタ412は、外部リソース検索・伸長・取得処理を行う(ステップS1803)。続いて、レンダリングフィルタ412は、現在処理中のFPパーツデータまたはFPピースデータの終端まで解析したか否かを判断する(ステップS1804)。この判断の結果、まだ未解析の箇所が残っているのであれば(ステップS1804でNO)、ステップS1801に戻る。
次に、図23を用いて、図22のステップS1803における外部リソース検索・伸長・取得処理の詳細を説明する。
図23は、図22のステップS1803における外部リソース検索・伸長・取得処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のインタリーブ2801の内容を確認する(ステップS1901)。ジョブ情報管理テーブル2800のインタリーブ2801が“ON”のときは、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ配置方法2802の内容を確認する(ステップS1902)。ジョブ情報管理テーブル2800のイメージ配置方法2802の内容が空だった場合、レンダリングフィルタ412は、第1の外部リソース取得処理を行う(ステップS1903)。空でない場合、レンダリングフィルタ412は、第2の外部リソース取得処理を行う(ステップS1904)。
一方、ステップS1901において、ジョブ情報管理テーブル2800のインタリーブ2801が“OFF”の場合、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ配置方法2802の内容を確認する(ステップS1905)。ジョブ情報管理テーブル2800のイメージ配置方法2802の内容が空だった場合、レンダリングフィルタ412は、第3の外部リソース取得処理を行う(ステップS1906)。空でない場合、レンダリングフィルタ412は、第3の外部リソース取得処理を行う(ステップS1907)。
次に、図24を用いて、図23のステップS1903における第1の外部リソース取得処理の詳細について説明する。第1の外部リソース取得処理は、外部リソースがイメージデータであって、XPSデータがインタリーブ化されており(インタリーブON)、イメージデータのXPSデータ内における配置方法が判明していない場合に実行される処理である。
図24は、図23のステップS1903における第1の外部リソース取得処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のドキュメント位置3001に格納されたドキュメント位置からページ位置3002に格納されたページ位置まで正順にイメージパーツの検索を行う(ステップS2001)。続いて、レンダリングフィルタ412は、イメージパーツが発見できたか否かを判断する(ステップS2002)。イメージパーツが発見できなかったときは、ステップS2005へ進む。一方、イメージパーツが発見できたときは、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ配置方法2802に“ページの前”と書き込む(ステップS2003)。
次に、ステップS2004では、レンダリングフィルタ412は、ジョブ情報管理テーブル2800の“イメージ位置リストの最後のデータへのポインタ”(配置位置)に、発見したイメージパーツのXPSデータ内での位置が記述されたデータを作成し付け加えることで更新する。
ステップS2005では、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のページ位置3002に格納されたページ位置からXPSデータの最後まで正順に検索を行う。続いて、レンダリングフィルタ412は、イメージパーツが発見できたか否かを判断する(ステップS2006)。イメージパーツが発見できたときは、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ配置方法2802に“ページの後”と書き込む(ステップS2007)。続いて、レンダリングフィルタ412は、ジョブ情報管理テーブル2800の“イメージ位置リストの最後のデータへのポインタ”(配置位置)に、発見したイメージパーツのXPSデータ内での位置が記述されたデータを作成し付け加えることで更新する(ステップS2008)。
一方、ステップS2006において、イメージデータが発見できなかった場合、レンダリングフィルタ412は、XPSデータの先頭から正順にイメージパーツを検索して取得する(ステップS2009)。
次に、図25を用いて、図23のステップS1904における第2の外部リソース取得処理の詳細について説明する。第2の外部リソース取得処理は、外部リソースがイメージデータであって、XPSデータがインタリーブ化されており(インタリーブON)、イメージデータのXPSデータ内における配置方法が判明している場合に実行される処理である。
図25は、図23のステップS1904における第2の外部リソース取得処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ配置方法2802の内容を確認し、イメージ配置方法2802の内容が“ページの前”か否かを判断する(ステップS2101)。この判断の結果、イメージ配置方法2802の内容が“ページの後”である場合(ステップS2101でNO)、ステップS2106へ進む。一方、イメージ配置方法2802の内容が“ページの前”である場合(ステップS2101でYES)、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のドキュメント位置3001に格納されたドキュメント位置からページ位置3002に格納されたページ位置まで正順にイメージパーツの検索を行う(ステップS2102)。
次に、レンダリングフィルタ412は、イメージパーツが発見できたか否かを判断する(ステップS2103)。イメージパーツを発見できたときは(ステップS2103でYES)、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ位置リストの最後のデータへのポインタ2805に、発見したイメージパーツのXPSデータ内での位置が記述されたデータを作成して格納することで更新して(ステップS2104)、ステップS2107へ進む。
一方、ステップS2103において、イメージパーツが発見できなかったときは、レンダリングフィルタ412は、以前使われたイメージデータかもしれないので、イメージ位置リストの最初から順番にその指し示す先のデータを調べて(ステップS2105)、ステップS2106へ進む。
ステップS2106では、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ位置リストの最初のデータへのポインタ2804の指し示す先の位置からXPSデータの最後まで正順にイメージパーツを検索する。
ステップS2107では、イメージパーツが発見できたか否かを判断し、発見できなければ(ステップS2107でNO)、XPSデータの先頭から検索してイメージパーツを取得する(ステップS2108)。
次に、図26を用いて、図23のステップS1906における第3の外部リソース取得処理の詳細について説明する。第3の外部リソース取得処理は、外部リソースがイメージデータであって、XPSデータがインタリーブ化されておらず(インタリーブOFF)、イメージデータのXPSデータにおける配置方法が判明していない場合に実行される処理である。
図26は、図23のステップS1906における第3の外部リソース取得処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000の前ページ位置3003に格納された前ページ位置からページ位置3002に格納されたページ位置まで正順にイメージパーツの検索を行う(ステップS2201)。続いて、レンダリングフィルタ412は、イメージパーツが発見できたか否かを判断する(ステップS2202)。イメージパーツが発見できなかったときは、ステップS2205へ進む。一方、イメージデータが発見できたときは、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ配置方法2802に“ページの前”と書き込む(ステップS2203)。
次に、ステップS2204では、レンダリングフィルタ412は、ジョブ情報管理テーブル2800の“イメージ位置リストの最後のデータへのポインタ”(配置位置)に、発見したイメージパーツのXPSデータ内での位置が記述されたデータを作成し付け加えることで更新する。
ステップS2205では、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000のページ位置3002に格納されたページ位置からXPSデータの最後まで正順に検索を行う。続いて、レンダリングフィルタ412は、イメージパーツが発見できたか否かを判断する(ステップS2206)。イメージパーツが発見できたときは、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ配置方法2802に“ページの後”と書き込む(ステップS2207)。続いて、レンダリングフィルタ412は、ジョブ情報管理テーブル2800の“イメージ位置リストの最後のデータへのポインタ”(配置位置)に、発見したイメージパーツのXPSデータ内での位置が記述されたデータを作成し付け加えることで更新する(ステップS2208)。
一方、ステップS2206において、イメージデータが発見できなかった場合、レンダリングフィルタ412は、XPSデータの先頭から正順にイメージパーツを検索して取得する(ステップS2209)。
次に、図27を用いて、図23のステップS1907における第4の外部リソース取得処理の詳細について説明する。第4の外部リソース取得処理は、外部リソースがイメージデータであって、XPSデータがインタリーブ化されておらず(インタリーブOFF)、イメージデータのXPSデータにおける配置方法が判明している場合に実行される処理である。
図27は、図23のステップS1907における第4の外部リソース取得処理の詳細を示すフローチャートである。
まず、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ配置方法2802の内容を確認し、イメージ配置方法2802の内容が“ページの前”か否かを判断する(ステップS2301)。この判断の結果、イメージ配置方法2802の内容が“ページの後”である場合(ステップS2301でNO)、ステップS2306へ進む。一方、イメージ配置方法2802の内容が“ページの前”である場合(ステップS2
301でYES)、レンダリングフィルタ412は、処理中ページ情報管理テーブル3000の前ページ位置3003に格納された前ページ位置からページ位置3002に格納されたページ位置まで正順にイメージパーツの検索を行う(ステップS2302)。
次に、レンダリングフィルタ412は、イメージパーツが発見できたか否かを判断する(ステップS2303)。イメージパーツを発見できたときは(ステップS2303でYES)、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ位置リストの最後のデータへのポインタ2805に、発見したイメージパーツのXPSデータ内での位置が記述されたデータを作成して格納して(同上)(ステップS2304)、ステップS2307へ進む。
一方、ステップS2303において、イメージパーツが発見できなかったときは、レンダリングフィルタ412は、以前使われたイメージデータかもしれないので、イメージ位置リストの最初から順番にその指し示す先のデータを調べて(ステップS2305)、ステップS2307へ進む。
ステップS2306では、レンダリングフィルタ412は、ジョブ情報管理テーブル2800のイメージ位置リストの最初のデータへのポインタ2804の指し示す先の位置からXPSデータの最後まで正順にイメージパーツを検索する。
ステップS2307では、イメージパーツが発見できたか否かを判断し、発見できないときは(ステップS2307でNO)、XPSデータの先頭から検索してイメージパーツを取得する(ステップS2308)。
上記実施形態によれば、XPSデータの解析結果からFDパーツデータ及びFPパーツデータの配置情報であるドキュメント位置やページ位置をRAM102に作成された処理中ページ情報管理テーブルに格納し、XPSデータがインタリーブ化されているか否かを判定する。この判定結果をジョブ情報管理テーブルに格納し、このジョブ情報管理テーブルに格納された判定結果に応じて取得方法を変更し、処理中ページ情報管理テーブルに格
納された配置情報に基づいてXPSデータからFPパーツデータを取得する。これにより、MXDWで作成されたXPSデータからパーツデータを取得する際、Local File Headerを先頭から検索することなく、XPSデータへの入出力I/O回数を削減して処理を向上させることができる。
次に、図37を用いて、本実施形態の効果を、ZIPデータの先頭からLocal File Headerを順番に調べる第1の方法を用いた場合における入出力I/Oの数と比較して説明する。
図37の、全3ページで、各ページで2つのイメージへの参照があるインタリーブ化(分割)処理が施されたXPSデータで考える。XPSデータはRAM102などの記憶領域に展開されているものとする。
なお、ここでは、本実施形態によって特に効果を得られる最初のFDピースを発見してから、最後のFPパーツが処理されるまでの入出力I/O回数についての説明を行う。
第1の方法の場合、408回入出力I/Oが発生する(内訳は以下の通り)。
・図37の3701のFixedDocument[0](fdoc/[0].piece)の取得(ヘッダ検索数:10回)
・図37の3702のFixedPage1(1.fpage)の取得(ヘッダ検索数:27回)
・図37の3703のイメージ1(1.jpg)の取得(ヘッダ検索数:22回)
・図37の3704のイメージ2(2.jpg)の取得(ヘッダ検索数:25回)
・図37の3705のFixedDocument[1](fdoc/[1].piece)の取得(ヘッダ検索数:28回)
・図37の3706のFixedPage2(2.fpage)の取得(ヘッダ検索数:39回)
・図37の3707のイメージ3(3.jpg)の取得(ヘッダ検索数:34回)
・図37の3708のイメージ4(4.jpg)の取得(ヘッダ検索数:37回)
・図37の3709のFixedDocument[2](fdoc/[2].piece)の取得(ヘッダ検索数:40回)
・図37の3710のFixedPage3(3.fpage)の取得(ヘッダ検索数:51回)
・図37の3711のイメージ5(5.jpg)の取得(ヘッダ検索数:46回)
・図37の3712のイメージ6(6.jpg)の取得(ヘッダ検索数:49回)
本実施形態の場合、184回目入出力I/Oが発生する(内訳は以下の通り)。
FD1の処理
・ジョブ管理情報テーブルの“インタリーブ”が空と確認(読み込み1回)
・先頭から図37の3701のFixedDocument[0](fdoc/[0].piece)を検索して取得(ヘッダ検索数:10回)
・ジョブ管理情報テーブルの“インタリーブ”への“ON”の書き込み(書き込み1回)
・処理中ページ情報管理テーブルの“ドキュメント位置”に取得したFDパーツのピースデータのXPSデータの先頭からの位置(バイト単位、配置位置)の書き込み(書き込み1回)
・処理中ページ情報管理テーブルの“ドキュメント位置”以外の項目を空にする(書き込み1回)
FP1の処理
・ジョブ管理情報テーブルの“インタリーブ”が“ON”と判断(読み込み1回)
・図37の3702のFixedPage1(1.fpage)を取得し、位置情報を処理中ページ情報管理テーブルの“ページ位置”に書き込む(FixedDocument[0]の位置読み込み1回、ヘッダ検索数:18回、書き込み1回、合計:20回)。
・ジョブ管理情報テーブルの“インタリーブ”が“ON”と判断(読み込み1回)
・ジョブ情報管理テーブルの“イメージ配置方法”が空と確認(読み込み1回)
・処理中ページ情報管理テーブルの“ドキュメント位置”と“ページ位置”を取得(読み込み2回)
・図37の3703のイメージ1(1.jpg)の取得(ヘッダ検索数:13回)
・ジョブ情報管理テーブルの“イメージ配置方法”に“ページの前”と記述(書き込み1回)
・取得したイメージの位置が格納されたデータを作成し、イメージ位置リストの最後につなげる(生成1回、書き込み1回、合計2回)。
・図37の3704のイメージ2(2.jpg)の取得(読み込み4回、ヘッダ検索数:16回、生成1回、書き込み1回、合計22回)
FD2の処理
・ジョブ管理情報テーブルの“インタリーブ”への“ON”の確認(読み込み1回)
・処理中ページ情報管理テーブルの“ページ位置”の取得(読み込み1回)
・図37の3705のFixedDocument[1](fdoc/[1].piece)の取得(ヘッダ検索数:2回)
・“ドキュメント位置”に取得したFDパーツのピースデータのXPSデータの先頭からの位置(バイト単位、配置位置)の書き込み(書き込み1回)
・処理中ページ情報管理テーブルの“ドキュメント位置”以外の項目を空にする(書き込み1回)。
FP2の処理
・ジョブ管理情報テーブルの“インタリーブ”が“ON”と判断(読み込み1回)
・図37の3706のFixedPage2(2.fpage)を取得し、位置情報を処理中ページ情報管理テーブルの“ページ位置”に書き込む(FixedDocument[1]の位置読み込み1回、ヘッダ検索数:12回、書き込み1回、合計:20回)
・ジョブ管理情報テーブルの“インタリーブ”が“ON”と判断(読み込み1回)
・ジョブ情報管理テーブルの“イメージ配置方法”が“ページの前”と確認(読み込み1回)
・処理中ページ情報管理テーブルの“ドキュメント位置”と“ページ位置”を取得(読み込み2回)
・図37の3707のイメージ3(3.jpg)の取得(ヘッダ検索数:7回)
・取得したイメージの位置が格納されたデータを作成し、イメージ位置リストの最後につなげる(生成1回、書き込み1回、合計2回)。
図37の3708のイメージ4(4.jpg)の取得(読み込み4回、ヘッダ検索数:10回、生成1回、書き込み1回、合計16回)
FD3の処理
・ジョブ管理情報テーブルの“インタリーブ”への“ON”の確認(読み込み1回)
・処理中ページ情報管理テーブルの“ページ位置”の取得(読み込み1回)
・図37の3709のFixedDocument[2](fdoc/[2].piece)の取得(ヘッダ検索数:2回)
・“ドキュメント位置”に取得したFDパーツのピースデータのXPSデータの先頭からの位置(バイト単位、配置位置)の書き込み(書き込み1回)
・処理中ページ情報管理テーブルの“ドキュメント位置”以外の項目を空にする(書き込み1回)。
FP3の処理
・ジョブ管理情報テーブルの“インタリーブ”が“ON”と判断(読み込み1回)
・図37の3710のFixedPage3(3.fpage)を取得し、位置情報を処理中ページ情報管理テーブルの“ページ位置”に書き込む(FixedDocument[2]の位置読み込み1回、ヘッダ検索数:12回、書き込み1回、合計:20回)。
・ジョブ管理情報テーブルの“インタリーブ”が“ON”と判断(読み込み1回)
・ジョブ情報管理テーブルの“イメージ配置方法”が“ページの前”と確認(読み込み1回)
・処理中ページ情報管理テーブルの“ドキュメント位置”と“ページ位置”を取得(読み込み2回)
・図37の3711のイメージ5(5.jpg)の取得(ヘッダ検索数:7回)
・取得したイメージの位置が格納されたデータを作成し、イメージ位置リストの最後につなげる(生成1回、書き込み1回、合計2回)。
・図37の3712のイメージ6(6.jpg)の取得(読み込み4回、ヘッダ検索数:10回、生成1回、書き込み1回、合計16回)
上述のことから、例えば、2つのイメージを参照するページがNページ(変数:N)あるXPSデータをインタリーブ化(分割)処理が施されたXPSデータを第1の方法と本実施形態の方法で処理するとき、入出力I/O回数は以下のようになる。
従来の方法
74+138×(N−1)+48×(N2−3N+2)/2回
本実施形態の方法
76+54×(N−1)回
上記により求められた入出力I/O回数を、アルゴリズムの効率の指標を表す計算量(オーダー)で比較した場合、「74+138×(N−1)+48×(N2−3N+2)/2回」:「76+54×(N−1)回」=「O(N2)」:「O(N)」となり、第1の方法での順次検索では、ページ数に対する、入出力I/O回数のオーダーは(O(N2))であり、本実施形態の方法では(O(N))であるので、ページ数(N)が増えるほど、本実施形態による効果が得られる。また、イメージパーツや、フォントパーツ増えるほど、本実施形態による効果が得られる。
なお、本発明をWindows(登録商標) Vistaでの印刷時以外においても、MXDWで作成されたXPSデータを処理・解析する情報処理装置、プログラムに適用することができる。
また、本発明の目的は、以下の処理を実行することによって達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)が記憶媒体に格納されたプログラムコードを読み出す処理である。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコード及び該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
また、プログラムコードを供給するための記憶媒体としては、次のものを用いることができる。例えば、フロッピー(登録商標)ディスク、ハードディスク、光磁気ディスク、CD−ROM、CD−R、CD−RW、DVD−ROM、DVD−RAM、DVD−RW、DVD+RW、磁気テープ、不揮発性のメモリカード、ROM等である。または、プログラムコードをネットワークを介してダウンロードしてもよい。
また、コンピュータが読み出したプログラムコードを実行することにより、上記実施の形態の機能が実現される場合も本発明に含まれる。加えて、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
さらに、前述した実施形態の機能が以下の処理によって実現される場合も本発明に含まれる。即ち、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行う場合である。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した各実施の形態の機能が実現される場合も本発明に含まれる。加えて、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOSなどが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現する場合も含まれる。この場合、上記プログラムは、該プログラムを記憶した記憶媒体から直接、またはインターネット、商用ネットワーク、若しくはローカルエリアネットワーク等に接続された不図示の他のコンピュータやデータベース等からダウンロードすることにより供給される。