次に、図面を参照しながら、本発明の一実施形態について説明する。
<全体構成>
まず、図1を参照して、画像形成システムの一例である印刷システムの全体構成を説明する。図1は、印刷システムの概略構成の一例を示す図である。
図1において、101は、ユーザが操作を行うVDPクライアントである。VDPクライアント101は、例えば、PC(Personal Computer)であり、ネットワークインタフェースを経由してネットワーク104に接続されている。102は、ネットワーク104を経由して、VDPクライアント101から印刷指示を受け付けるVDPプリンタである。VDPプリンタ102も、VDOクライアント101と同じくネットワークインタフェースを経由してネットワーク104に接続されている。このように、VDPクライアント101は、ネットワーク104を通じてVDPプリンタ102に印刷指示を送信することが可能である。本実施形態では、例えば、このVDPクライアント101がデータ処理装置として設けられ、VDPプリンタ102が画像形成装置として設けられる。
103は、データベースを格納するDB(データベース)サーバである。DBサーバ103は、ネットワーク104を経由して外部から送信されたデータをデータベースに書き込んだり、データベースに書き込まれたデータを読み出し、読み出したデータを、ネットワーク104を経由して外部に送信したりするが可能である。DBサーバ103も、VDOクライアント101及びVDPプリンタ102と同じくネットワークインタフェースを経由してネットワーク104に接続されている。
<コンピュータ装置の構成>
次に、図2及び図3を参照して、図1に示した印刷システムで使用されるコンピュータ装置及びプリンタ装置の構成の一例について説明する。
図2は、VDPクライアント101及びDBサーバ103の構成の一例を示すブロック図である。
図2において、201は、RAM202に格納されている制御プログラムに従って本装置全体の制御を行うCPUである。RAM202は、CPU201が実行する本装置の制御プログラムや、文書画像等のデータを格納する内部記憶部である。
203は、CPU201の制御の下に、ネットワーク104と本装置(VDPクライアント101及びDBサーバ103)との接続を行ってデータ等を送受信するネットワークインタフェース(NetI/F)である。204は、データを保存する磁気ディスク等の外部記憶装置である。205はディスプレイ、206はキーボード、207は、マウス等のポインティングデバイスである。208は、キーボード206及びポインティングデバイス207と本装置(VDPクライアント101及びDBサーバ103)とを相互に接続するためのキーボードインタフェース(KeyI/F)である。
RAM202に格納されているプログラムは、同じくRAM202に格納されているOS(Operating System)の機能を必要に応じて使用して処理を実行する。具体的に、RAM202に格納されているプログラムは、RAM202に一時的に記憶するデータの内容を読み書きしたり、外部記憶装置204に対してデータを読み書きしたり、ネットワークインタフェース203を通じてデータの送受信を行ったりする。この他、プログラムは、キーボード206やポインティングデバイス207からの入力を受け取ったり、ディスプレイ205に画像の表示を行ったりする。
DBサーバ103は、外部記憶装置204にデータベースを格納している。RAM202に格納されたデータベースプログラムは、VDPクライアント101から、ネットワークインタフェース203を通じてデータベースの読み書き命令を受け取ると、その読み書き命令に対応するデータを、データベースから読み出す。そして、RAM202に格納されたデータベースプログラムは、読み出したデータを、ネットワークインタフェース203を通じてVDPクライアント101に送信する。
図3は、VDPプリンタ102の構成の一例を示すブロック図である。
図3において、301は、VDPプリンタ102全体の制御を行うMFP制御部である。302、303、305は、夫々RAM、ネットワークインタフェース、外部記憶装置であり、図2に示したRAM202、ネットワークインタフェース203、外部記憶装置204と同じ機能を有する。
304は、ネットワークインタフェース303から受信したプリントデータがPDL(Page Description Language)データである場合にそれを解釈してラスタライズする装置であるRIP部である。306は、RIP部304でラスタライズされたラスタデータを画像処理して画像データを生成する出力画像処理部である。307は、シートを給紙し、出力画像処理部306で生成された画像データを、そのシート上に順次印字してプリントアウトするプリンタエンジンである。プリントアウトされたシートは後処理部308へ送り込まれる。後処理部308は、プリンタエンジン307からプリントアウトされたシートの仕分け処理やシートの仕上げ処理を行う。
<全体のブロック図>
次に、図4〜図5を参照して、印刷システムの構成の一例について説明する。
図4は、印刷システムの基本となる構成の一例を示すブロック図である。
図4において、401は、VDPクライアントである。VDPクライアント401では、VDPアプリケーションプログラム404が動作している。402は、DBサーバである。DBサーバ402は、コンテンツDB405を管理している。403は、VDPプリンタである。VDPプリンタ403では、RIPプログラム406が動作している。
VDPアプリケーションプログラム404は、ユーザが編集するVDPドキュメントにおいて、固定データ或いは可変データとして指定されたコンテンツに対するコンテンツデータの取得要求を、通信経路408を介してDBサーバ402に送信する。DBサーバ402は、VDPアプリケーションプログラム404からのコンテンツデータの取得要求に基づいて、コンテンツDB405からコンテンツデータ410を取得する。そして、DBサーバ409は、取得したコンテンツデータ410を、通信経路409を介してVDPクライアント401に送信する。VDPアプリケーションプログラム404は、DBサーバ402から取得したコンテンツデータ410に基づいて、VDPジョブファイル412を作成する。このとき、VDPアプリケーションプログラム404は、PPML等のVDP文書フォーマットを使用してVDPジョブファイル412を作成する。
VDPジョブファイル412には、DBサーバ402から取得したコンテンツデータ410がそのまま格納される。VDPアプリケーションプログラム404は、作成したVDPジョブファイル412を、通信経路411を介してVDPプリンタ403に送信する。VDPジョブファイル412がVDPプリンタ403で受信されると、RIPプログラム406は、受信されたVDPジョブファイル412に対するRIP処理を行い、RIP処理の結果をプリンタエンジン307に送信する。これによりVDPジョブファイル412の印刷処理が行われる。
図5は、印刷システムの構成の一例を特徴となる部分を含めて示すブロック図である。即ち、図5は、物理的に図1の構成をとるVDPクライアント101、VDPプリンタ102、DBサーバ103、及びネットワーク104において、本実施形態の動作に関わる論理ブロック(プログラムモジュール、データエンティティ、及び通信経路)を示す。
図5において、VDPクライアント101は、OSの制御の下で動作する。504、505は、夫々VDPアプリケーションプログラム、DBブローカープログラムであり、通常は外部記憶装置204に保存されている。VDPアプリケーションプログラム504とDBブローカープログラム505は、ユーザ、OS、又は別のプログラムから実行が指示されると、OSの制御によりRAM202に読み出され、実行可能な状態となる。
DBブローカープログラム505は、VDPアプリケーションプログラム504からコンテンツDB506に対して行われるコンテンツデータの取得要求を仲介する。そして、DBブローカープログラム505は、VDPアプリケーションプログラム504に代理して、VDPプリンタ503のキャッシュマネージャプログラム509との通信を行う。511は、VDPアプリケーションプログラム504からDBブローカープログラム505へ行なわれるコンテンツデータの取得要求の通信経路である。104aは、DBブローカープログラム505がVDPアプリケーションプログラム504に代理してDBサーバ103へ行うコンテンツデータ516の取得要求の通信経路である。
104bは、コンテンツデータの取得要求に対して、DBサーバ103からDBブローカープログラム505に返されるコンテンツデータ516の通信経路である。512は、DBブローカープログラム505で生成されたプロキシデータ513の通信経路である。図5に示すように、プロキシデータ513は、DBブローカープログラム505からVDPアプリケーションプログラム504に送信される。104dは、DBブローカープログラム505からキャッシュマネージャプログラム509へ送信されるコンテンツデータ516の通信経路である。104eは、コンテンツデータ516の送信に基づいて返信されるキャッシュID523の通信経路を示す。また、104cは、DBブローカープログラム505から取得したプロキシデータ513を使用してVDPアプリケーションプログラム504が作成したVDPジョブファイル518の通信経路である。図5に示すように、VDPジョブファイル518は、VDPクライアント101からVDPプリンタ102に送信される。
VDPジョブファイル518には、通信経路512を介してDBブローカープログラム505から取得したプロキシデータ513がそのまま格納される。コンテンツデータの取得要求の通信経路511と、プロキシデータ513の通信経路512における通信は、OSの制御によりVDPアプリケーションプログラム504と、DBブローカープログラム505とのプロセス間通信として実行される。VDPジョブファイル518、コンテンツデータ516、及びキャッシュID523の通信経路104c、104d、104eを介した通信には、VDPクライアント101及びVDPプリンタ102のネットワークインタフェース203、303が使用される。
DBサーバ103は、OSの制御の下で動作する。506は、DBサーバ103の外部記憶装置204に格納されたコンテンツDBである。VDPクライアント101や他のコンピュータで動作するプログラムは、DBサーバ103のネットワークインタフェース203を通じて、DBサーバ103で動作する不図示のデータベースプログラムと通信する。これにより、VDPクライアント101や他のコンピュータで動作するプログラムは、コンテンツDB506の内容(コンテンツデータ516)を読み書きすることが可能である。
前述したように、104aは、DBブローカープログラム505からDBサーバ103へ行われるコンテンツデータ516の取得要求の通信経路である。また、104bは、コンテンツデータの取得要求に対して、DBサーバ103からDBブローカープログラム505に返されるコンテンツデータ516の通信経路である。通信経路104a、104bにおける通信は、VDPクライアント101のネットワークインタフェース203と、DBサーバ103のネットワークインタフェース203とを使用して行われる。
VDPプリンタ102は、MFP制御部301の制御の下で動作する。510は、VDPプリンタ102の外部記憶装置305に格納されたキャッシュDBである。508、509は、RIPプログラム、キャッシュマネージャプログラムであり、VDPプリンタ102のRAM302に格納され、常に実行可能なプログラムである。
RIPプログラム508は、ネットワークインタフェース303を通じてVDPジョブファイル518を受信すると、VDPジョブファイル518のデータを必要に応じて外部記憶装置305に格納する。そして、RIPプログラム508は、必要に応じてキャッシュマネージャプログラム509を呼び出しながら、出力画像処理部306やプリンタエンジン307を制御してVDPジョブファイル518の内容の印刷を行う。
キャッシュマネージャプログラム509は、MFP制御部301の制御の下で、キャッシュDB510の内容を読み書きすることが可能である。526は、キャッシュマネージャプログラム509からRIPプログラム508に送信されるコンテンツデータ516の通信経路である。525は、コンテンツデータ516の取得に対応して、RIPプログラム508からキャッシュマネージャプログラム509に送信されるラスタデータ507の通信経路である。また、キャッシュデータの取得要求(キャッシュID523)も、通信経路525を介して、RIPプログラム508からキャッシュマネージャプログラム509へ送信される。更に、そのキャッシュデータの取得要求であるキャッシュID523の取得に対応して、キャッシュマネージャプログラム509からラスタデータ528が、通信経路526を介してRIPプログラム508に返される。通信経路525、526における通信は、MFP制御部301の制御により、RIPプログラム508とキャッシュマネージャプログラム526とのプロセス間通信として実行される。
<VDPジョブの概念的な構造>
次に、図6〜図7を参照して、図4に示した基本的なVDPジョブファイル412と、本実施形態で説明する特徴を含んだVDPジョブファイル518の概念的な構造の一例について説明する。
図6は、文書フォーマット技術としてPPMLを使用した場合のVDPジョブファイル412の概念的な基本構造の一例を示す図である。
602は、PPMLファイルである。PPMLの仕様では、VDPジョブファイル601の1つにつき、1つのPPMLファイル602が存在する。
410a〜410cは、図4に示したコンテンツデータ410に相当するファイルであり、夫々PostScriptのファイル、PDFのファイル、JPEGフォーマットのファイルである。
603、604、605は、PPMLファイル602で定義された描画領域を表わす。これらの描画領域603〜605には、夫々コンテンツデータ410a〜410cが関連付けられている。
VDPクライアント401とVDPプリンタ403との間で事前の合意、或いは送信時のネゴシエーションがあれば、VDPジョブファイル412の各構成ファイル410a〜410c、602を送信する方法として、任意の方法を採ることが可能である。通常は、ZIPフォーマットに代表される圧縮フォーマットを使用して、各構成ファイル410a〜410c、602を1つのファイルに結合・圧縮して送信することが行われる。
VDPジョブファイル412を受け取ったRIPプログラム406は、そのVDPジョブファイル412が圧縮されている場合には、そのVDPジョブファイル412を伸長して、各構成ファイル410a〜410c、602を復元する。その後RIPプログラム406は、各構成ファイル410a〜410c、602の情報に基づいてRIP処理を行う。
図7は、文書フォーマット技術としてPPMLを使用した場合のVDPジョブファイル518の概念的な構造の一例を示す図である。
702は、PPMLファイルである。前述したように、PPMLの仕様では、VDPジョブファイル701の1つにつき1つのPPMLファイル702が存在する。703、704、705は、PPMLファイル702で定義された描画領域を表わす。
513a〜513cは、コンテンツデータ516の代わりとなるプロキシデータ513に相当するファイルである。プロキシデータ513の概念的な構造を、図7(b)に拡大して示す。図7(b)に示すように、プロキシデータ513には、コンテンツデータ516の識別情報の一例であるキャッシュID523と、サムネイルデータ709とが格納される。尚、プロキシデータ513a〜513cは、夫々同様の構造を持つ。
尚、描画領域703〜705には、夫々プロキシデータ513a〜513cが関連付けられている。また、本実施形態では、VDPアプリケーションプログラム504は、ZIPフォーマットを使用して1つのファイルに結合・圧縮してから、VDPジョブファイル518をVDPプリンタ102に送信するようにしている。
VDPジョブファイル518を受け取ったRIPプログラム508は、そのVDPジョブファイル518を伸長して、各構成ファイル513a〜513c、702を復元する。その後、RIPプログラム508は、キャッシュID513をキャッシュマネージャプログラム509に送信し、送信したキャッシュID523に対する返信としてキャッシュマネージャプログラム509からラスタデータ507を取得する。RIPプログラム508は、このようにしてラスタデータ507を取得しながら、復元した各構成ファイル513a〜513c、702に基づいてRIP処理を行う。
<VDPシステムの処理シーケンス>
次に、図8〜図9を参照して、印刷システムにおける印刷処理シーケンスの一例について説明する。
図8は、図4に示した印刷システムにおいて、ユーザが印刷を指示した場合に行われる印刷処理シーケンスの一例を示す図である。図8では、ネットワーク104を経由した通信もシーケンス図のメッセージを用いて図示したり、複数のメッセージをまとめて"}"で示したりしている。したがって、図8は、UML(Unified Modeling Language)の記法に厳密に従って記載されているわけではない。
ユーザ801は、図4に示した印刷システムを使用するアクターの一例を示す。ここで、アクターは、印刷システム内のオブジェクトと直接相互作用するオブジェクトの役割を果たす。実際の印刷システムでは、DBサーバ103の管理者や、VDPプリンタ102のオペレーターといったその他のアクターが想定され得る。印刷処理シーケンスを示す目的からすると、アクターの数は本質的ではないので、ここでは印刷を指示するユーザ801のみをアクターとしている。
まず、ユーザ801は、キーボード206やポインティングデバイス207を用いて、VDPアプリケーションプログラム404に印刷を指示する(ステップS801)。
VDPアプリケーションプログラム404は、通信経路408を介してコンテンツDB405に、コンテンツデータ410の取得要求のメッセージを送信する(ステップS802)。
コンテンツDB405は、取得要求のあったコンテンツデータ410を、通信経路409を介してVDPアプリケーションプログラム404に返す(ステップS803)。
ステップS802、S803は、VDPジョブファイル412に含めるコンテンツデータ410の数だけ繰り返される。図6に示したVDPジョブファイル412の場合、コンテンツデータ410a〜410cが3つ存在するので、ステップS802、S803が3回繰り返される。
VDPアプリケーションプログラム404は、ステップS802、S803を繰り返して取得した1つ以上のコンテンツデータ410を使用してVDPジョブファイル412を作成する(ステップS804)。このステップS804で作成されるVDPジョブファイル412の概念的な構造は、例えば図6に示したものとなる。
VDPアプリケーションプログラム404は、ステップS804で作成したVDPジョブファイル412を、通信経路411を介してRIPプログラム406に送信する(ステップS805)。
RIPプログラム406は、ステップS805で受信したVDPジョブファイル412に含まれるコンテンツデータ410のRIP処理を行ってラスタデータを作成する(ステップS806)。
ステップS806は、VDPジョブファイル412に含まれるコンテンツデータ410の数だけ繰り返される。図6に示したVDPジョブファイル412の場合、コンテンツデータ410a〜410cが3つ存在するので、ステップS806が3回繰り返される。
RIPプログラム406は、ステップS806で作成したラスタデータを使用して印刷データを作成する(ステップS807)。そして、RIPプログラム406は、印刷データの印刷処理を行う(ステップS808)。
図9は、図5に示した本実施形態の特徴を有する印刷システムにおいて、ユーザが印刷を指示した場合に行なわれる印刷処理シーケンスの一例を示す図である。図9でも、図8と同様に、ネットワーク104を経由した通信を行う部分と、"}"で示している部分は、UMLの記法に従っていない。また、VDPクライアント101における処理とVDPプリンタ102における動作とが並行に行われていることを示す表記もUMLの記法に従っていない。図9において、ユーザ901は、図4に示したユーザ801と同様に、図5に示した印刷システムを使用するアクターの一例を示す。
まず、ユーザ901は、キーボード206やポインティングデバイス207を用いて、VDPアプリケーションプログラム504に印刷を指示する(ステップS901)。
VDPアプリケーションプログラム504は、DBブローカープログラム505に、コンテンツデータの取得要求のメッセージを、通信経路511を介して送信する(ステップS902)。
DBブローカープログラム505は、コンテンツデータの取得要求のメッセージを、通信経路104aを介してそのままコンテンツDB506に送信する(ステップS903)。
コンテンツDB506は、取得要求のあったコンテンツデータ516を、通信経路104bを介してDBブローカープログラム505に返す(ステップS904)。これにより、DBブローカープログラム505は、コンテンツデータ516を取得する。これによりVDPアプリケーションプログラム404は、コンテンツデータ410を取得する。このように本実施形態では、例えば、ステップS904の処理によってコンテンツデータ取得手段、コンテンツデータ取得ステップが実現される。
DBブローカープログラム505は、取得したコンテンツデータ516を、VDPアプリケーションプログラム504に直接返すのではなく、通信経路104eを介してキャッシュマネージャプログラム509に送信する(ステップS905)。このように本実施形態では、例えば、ステップS905の処理によってコンテンツデータ送信手段、コンテンツデータ送信ステップが実現される。
コンテンツデータ516を受信したキャッシュマネージャプログラム509は、キャッシュID523を生成し(ステップS906)、生成したキャッシュID523をDBブローカープログラム505に返信(返信)する(ステップS907)。DBブローカープログラム509は、ステップS904で取得したコンテンツデータ516から作成したサムネイルデータ709と、ステップS907で取得したキャッシュID523とを用いて、プロキシデータ513を生成する(ステップS908)。このステップS908で生成されるプロキシデータ513の概念的な構造は、例えば、図7に示したものとなる。以上のように本実施形態では、例えば、ステップS906の処理によって、コンテンツデータ受信手段、識別情報生成手段、コンテンツデータ受信ステップ、識別情報生成ステップが実現される。また、例えば、ステップS907の処理によって、識別情報送信手段、識別情報送信ステップが実現される。更に、例えば、ステップS908の処理によって、識別情報取得手段、識別情報取得ステップが実現される。
また、DBブローカープログラム509は、ステップS904で取得したコンテンツデータ516、コンテンツデータ516から作成したサムネイルデータ709、ステップS907で取得したキャッシュID523を対応付けて、外部記憶装置204に格納する。これにより、DBブローカープログラム505は、VDPアプリケーションプログラム504から取得要求のあったコンテンツデータ516に関するキャッシュID523が既に取得されている場合には、ステップS905〜S907の処理を省略できる。このように本実施形態では、例えば、ステップS908の処理によって、データ処理装置の記憶手段、データ処理方法の記憶ステップが実現される。
DBブローカープログラム509は、ステップS908で生成したプロキシデータ513をVDPアプリケーションプログラム504に返信(送信)する(ステップS909)。VDPアプリケーションプログラム504から見ると、コンテンツデータの取得要求(ステップS902)に対してプロキシデータ513が返ってきたように見える。
VDPアプリケーションプログラム04は、ステップS909で取得したプロキシデータ513を、例えば図7に示す構造を持つVDPジョブファイル518に追加する(ステップS910)。このように本実施形態では、例えば、VDPジョブファイル518が画像形成用データに相当し、更に、例えば、ステップS910の処理によって画像形成用データ送信手段が実現される。
一方、キャッシュマネージャプログラム509は、ステップS907で、キャッシュID523をDBブローカープログラム505に返す。その後、キャッシュマネージャプログラム509は、ステップS905で受信したコンテンツデータ516を、通信経路529を介してキャッシュDB510に保存する(ステップS911)。このとき、キャッシュマネージャプログラム509は、ステップS907でDBブローカープログラム505に返したキャッシュID523と、ステップS905で受信したコンテンツデータ516とを対応付けてキャッシュDB510に保存する。尚、キャッシュDB510の構造については、図14を用いて後述する。
キャッシュマネージャプログラム509は、ステップS905で受信したコンテンツデータ516と同じコンテンツデータ516を、通信経路526を介してRIPプログラム508に送信する。これにより、コンテンツデータ516のラスタライズの要求(ラスタデータの生成要求)がなされる(ステップS912)。
RIPプログラム508は、ステップS912で受信したコンテンツデータ516に対してラスタライズ処理を行う。そして、RIPプログラム508は、そのラスタライズ処理を行うことにより得られたラスタデータ507を、通信経路525を介してキャッシュマネージャプログラム509に返す(ステップS913)。以上のように本実施形態では、ステップS913の処理によって、画像化データ生成手段、画像化データ生成ステップが実現される。
キャッシュマネージャプログラム509は、ステップS913で取得したラスタデータ507を、通信経路529を介してキャッシュDB510に保存する(ステップS914)。このとき、キャッシュマネージャプログラム509は、ステップS907でDBブローカープログラム505に返したキャッシュID523と、ステップS911で保存されたコンテンツデータ516と対応付けてラスタデータ507を保存する。このように本実施形態では、ステップS914の処理によって、画像形成装置の記憶手段、画像形成方法の記憶ステップが実現される。
ここで、VDPクライアント101で実行されるステップS908〜S910と、VDPプリンタ102で実行されるステップS911〜S914とは、別のハードウェア上で実行されるため、並行処理が可能となっている。
ステップS902〜S914は、VDPジョブファイル518に含まれるコンテンツデータ(プロキシデータ513)の数だけ繰り返される。図7に示したVDPジョブファイル518の場合、コンテンツデータ(プロキシデータ513a〜513c)が3つ存在するので、ステップS902〜S914が3回繰り返される。
VDPアプリケーションプログラム504は、ステップS902〜S914を繰り返して作成した1つ以上のプロキシデータ513を使用して作成したVDPジョブファイル518を、RIPプログラム508に送信する(ステップS915)。このステップS915で作成されるVDPジョブファイル518の概念的な構造は、例えば図7に示したものとなる。
RIPプログラム508は、ステップS915で受信したVDPジョブファイル518にプロキシデータ513が含まれていれば、そのプロキシデータ513に含まれているキャッシュID523を取得する(図7を参照)。そして、RIPプログラム508は、その取得したキャッシュID523をキーとして、通信経路525を介して、キャッシュマネージャプログラム509に、ラスタデータ507の取得を要求する(ステップS916)。このように本実施形態では、ステップS916の処理によって画像形成用データ受信手段、画像形成用データ受信ステップが実現される。
キャッシュマネージャプログラム509は、ステップS916で受信したキャッシュID523をキーとして、通信経路529を介してキャッシュDB510を検索する(ステップS17)。キャッシュDB510は、ステップS914で保存されたラスタデータ507のうち、ステップS916で受信したキャッシュID513に合致するラスタデータ507を検索する。そして、キャッシュDB510は、検索したラスタデータ507を、通信経路530を介してキャッシュマネージャプログラム509に返す(ステップS918)。
キャッシュマネージャプログラム509は、ステップS918で取得したラスタデータ507を、通信経路526を介してRIPプログラム508に返す(ステップS919)。
RIPプログラム508は、ステップS919で取得したラスタデータ507を印刷データに追加する(ステップS920)。
ステップS916〜S920は、VDPジョブファイル518に含まれるプロキシデータ513の数だけ繰り返される。図7に示したVDPジョブファイル518の場合、コンテンツデータ(プロキシデータ513a〜513c)が3つ存在するので、ステップS916〜920が3回繰り返される。
RIPプログラム508は、ステップS916〜S920を繰り返して作成した印刷データの印刷処理を行う(ステップS921)。このように本実施形態では、ステップS920の処理によって画像形成手段、画像形成ステップが実現される。
<VDPアプリケーションのレイアウト画面>
次に、図10を参照して、本実施形態で使用されるVDPアプリケーションのレイアウト画面について説明する。
図10は、VDPクライアント101において、VDPアプリケーションプログラム504がRAM202に読み込まれて実行されている最中に、ディスプレイ205に表示されるレイアウト画面の一例を示す図である。
図10において、1001は、VDPアプリケーションプログラム504が作成するVDP文書のレイアウト(編集)を行うためのメインウィンドウである。このメインウィンドウ1001の境界は、VDP文書のページの境界を表している。このように、本実施形態では、メインウィンドウ1001の領域が、画像形成領域に対応する。
1002、1003、1004、1005は、固定データや可変データを配置するための枠である。ユーザは、キーボード206やポインティングデバイス207を使用して、これらの枠1002〜1005の作成・移動・選択といった操作を行う。このように本実施形態では、例えば、枠1002〜1005が、差込領域に対応する。
図10に示す例では、ユーザが、キーボード206やポインティングデバイス207を使用して、枠1004にテキストデータを入力した様子を示している。後述する図12の枠管理テーブル1200に示すように、枠1002〜1005に入力されるデータは、固定のテキストデータに限らない。ユーザは、枠1002〜1005に入力されるデータを、枠管理テーブル1200に登録された枠ルールに従って指定することができる。このように、ユーザは、枠管理テーブル1200に枠ルールを登録することによって固定データや可変データを指定できる。
1006は、VDPアプリケーションプログラム504に対して指定可能なオプションを指定したり実行可能なコマンドを実行したりするためのメニューウィンドウである。ユーザは、キーボード206やポインティングデバイス207を使用して、このメニューウィンドウ1006に対して、入力や操作を行う。
1007は、作成中のVDP文書に対して関連付けるデータソースをユーザが指定するためのテキストボックスである。ここでは"CUSTOMER"というテーブルが指定されている。
1008は、VDP文書に作成された枠1002〜1005の中から選択した枠に対する枠ルールを、ユーザが表示・編集するためのテキストボックスである。
1009は、VDP文書で使用される固定データのうち、どのデータをキャッシュする対象のデータとするかのかを判断するためのスレッショルド値をユーザが指定するためのテキストボックスである。ここで指定したスレッショルド値以上のサイズを持つ固定データはキャッシュする対象となる。
1010は、VDP文書の新規作成をユーザが指示するためのボタンである。
1011は、VDPクライアント101の外部記憶装置204に存在するVDP文書を開く(オープンする)ことをユーザが指示するためのボタンである。
1012は、作成したVDP文書をVDPクライアント101の外部記憶装置204への上書き保存をユーザが指示するためのボタンである。1013は、作成したVDP文書をVDPクライアント101の外部記憶装置204への別名での保存をユーザが指示するためのボタンである。
1014は、編集中のVDP文書を閉じることをユーザが指示するためのボタンである。
ボタン1010〜104が実行する機能は、Microsoft Windows(登録商標)やApple MacOS(登録商標)で実行されるアプリケーションプログラムにより実現される標準的なものであるので、ここでは詳細な説明を省略する。
1015は、新規の枠を作成することをユーザが指示するためのボタンである。ユーザは、キーボード206やポインティングデバイス207を使用してこのボタン1015を押下すると、メインウィンドウ1001が枠作成モードに変わる。ユーザは、メインウィンドウ1001が枠作成モードに変わった状態で、キーボード206やポインティングデバイス207を使用して枠の起点とサイズを指定することにより、新規の枠を作成することができる。枠を作成すると枠作成モードは終了し、メインウィンドウ1001は、通常の編集状態に戻る。
1016は、編集中のVDP文書をVDPプリンタ102で印刷することをユーザが指示するためのボタンである。
<CUSTOMERテーブルの構造と内容>
次に、図11を参照して、本実施形態で使用されるデータソースの構造と内容について説明する。
図11は、作成中のVDP文書に関連付けられるデータソースの一例として指定されているCUSTOMERテーブルの内容の一例を示す図である。このCUSTOMERテーブル1100は、例えば、VDPクライアント101の外部記憶装置204に格納される。
1101は、レコード番号を示すための列である。このレコード番号1101は、データ構造に含まれない。レコード番号は、最初のレコードから順に「1」、「2」、「3」・・・と昇順に発番される。
1102〜1106は、CUSTOMERテーブル1100を構成する五つの列である。具体的に1102は、姓を格納するLastName列であり、1103は、名を格納するFirstName列であり、1104は、性別を格納するGender列である。また、1105は、郵便番号を格納するZipCode列であり、1106は、住所を格納するAddress列である。
LastName列1102、FirstName列1103、ZipCode列1105、Address列1106には、任意の文字列を格納することが可能である。一方、Gender列1104には、文字"M"(男性を表わす)又は"F"(女性を表わす)のみを格納することが可能である。
図11に示すCUSTOMERテーブル1100では、レコード番号1〜3の3つのレコードが格納されている。図15〜図26を用いて後述する印刷動作では、これら図11に示すレコードを使用した場合を例に挙げて説明を行う。
<枠管理テーブルの構造と内容>
次に、図12を参照して、本実施形態で使用される枠管理テーブルの構造と内容について説明する。
図12は、枠1002〜1005についての情報をRAM202に格納しておく際に使用する枠管理テーブルの構造と、本実施形態で使用する枠情報の内容との一例を示す図である。この枠管理テーブル1200は、例えば、VDPクライアント101の外部記憶装置204に格納される。
1201は、FrameNo列であり、枠番号が格納される。枠番号は枠管理テーブル1200内で一意に特定されれば任意の数字でよい。
1202は、FrameRule列であり、枠ルールが格納される。枠ルールは、枠1002〜1005に適用されるコンテンツデータ516を導出するためのルールである。具体的に枠ルールは、「条件判定」、「文字列」、「データソース参照」、「コンテンツデータベース参照」の4つの構成要素を使って、最終的に「文字列」又は「コンテンツデータベース参照」の何れかが導出されるように記述される。枠ルールを記述するための枠ルール文法の一例を以下にEBNF(Extended Backus-Naur Form)で示す。
[1]枠ルール::= 文字列 | コンテンツデータ参照 | 条件文
[2]文字列 ::= (リテラル文字列 | データソース参照 | 空白)+
[3]コンテンツデータ参照 ::= (使用文字)+
[4]リテラル文字列 ::= '"' (使用文字)+ '"'
[5]データソース参照 ::= '$' (使用文字)+
[6]条件文 ::= if 空白 判定式 空白 枠ルール 空白 else 空白 枠ルール
[7]判定式 ::= データソース参照 空白? 判定記号 空白? リテラル文字列
[8]判定記号 ::= '='
[9]使用文字 ::= [a-zA-Z0-9] | [-'()+.=#@_%] | [亜-熙]
[10]空白 ::= (#x20 | #x9 | #xD | #xA)+
[1]により、枠ルールは、「文字列」、「コンテンツデータ参照」、又は「条件文」である。
[2]により、「文字列」は、「リテラル文字列」、「データソース参照」、又は「空白」を一個以上並べたものである。「文字列」は、「リテラル文字列」や「データソース参照」の結果を連結したものとなる。尚、空白の部分は無視される。
[3]により、「コンテンツデータ参照」は、使用可能な文字(使用文字)を一個以上並べたものである。「コンテンツデータ参照」には、コンテンツDB506内のコンテンツデータ516のファイルを参照するための情報が記述される。本実施形態では、Microsoft Windows(登録商標)で使われているUNC(Universal Naming Convention)表記を使用して、「コンテンツデータ参照」の記述がなされる。具体的に、「コンテンツデータ参照」には、コンテンツDB506内のコンテンツデータ516のファイルがUNC名で直接表記される。[9]により、使用文字には、「"」や「$」が含まれない。従ってVDPクライアント101は、先頭が「"」や「$」で始まっていなければ、「コンテンツデータ参照」であると判定できる。
[4]により、「リテラル文字列」は、使用文字を1個以上並べたものを「"、"」で囲んだものである。「リテラル文字列」は、最終的に文字列を導出する際の構成要素、又は条件文[6]に含まれる判定式[7]で使用される。
[5]により、「データソース参照」は、「$」から始まり、使用文字を一個以上並べたものである。本実施形態では、VDPアプリケーションプログラム504によってVDP文書に関連付けられているデータソース1007の列名に「$」を付けて使用する。そして、そのデータソース1007が参照するテーブルの該当する列のデータに相当する「リテラル文字列」が導出される。例えば、データソースとして、図11に示すCUSTOMERテーブル1100がVDP文書に関連付けられており、「データソース参照」として「$LastName」と指定されているとする。そうすると、レコード番号1のレコードを処理中は"山田"という文字列が導出され、レコード番号2のレコードを処理中は"鈴木"という文字列が導出される。
[6]により、「条件文」は、「if、判定式、枠ルール、else、枠ルール」という順番で表記される。判定式が真と判定されると前者の枠ルールが導出され、判定式が偽と判定されると後者の枠ルールが導出される。[1]により、枠ルールには条件文も含まれるため、条件文を入れ子(ネスト)にして表記することも可能である。
[7]により、「判定式」は、「データソース参照」と「リテラル文字列」とを判定記号でつなげたものである。尚、判定記号の両側には空白があってもよい。
[8]により、判定記号は「=」である。判定式[7]では、判定記号の左側のデータソース文字列から導出される「リテラル文字列」と、判定記号の右側の「リテラル文字列」とを文字列として比較し、両者が同じ文字列であれば真と判定される。一方、違う文字列であれば偽と判定される。
[9]には、枠ルールで使用可能な文字の定義がなされており、アルファベット、日本語、いくつかの記号が含まれる。
[10]には、空白文字の定義がなされている。
図12に説明を戻し、1203は、ReusableObject列であり、枠1002〜1005に関連付けられたコンテンツデータ516が再利用可能オブジェクトか否かを判定するための情報(「TRUE」又は「FALSE」)が格納される。この判定は、VDPアプリケーションプログラム504によって行われる。「TRUE」と判定されるのは、その枠に対する枠ルールがデータソース参照を含まない場合であり、それ以外の場合には、「FALSE」と判定される。
図10で作成した4つの枠1002〜1005に対して、以上のようにして定義された枠ルール文法を使用して決定した枠ルールの一例を図12に示す。
FrameNo列1201に枠番号として「1」が格納されている枠は、図10に示した枠1002に対応する。この枠に対する枠ルールは、FrameRule列1202の1行目に格納されている通り、「コンテンツデータ参照」である。ここでは、コンテンツDB506に存在するコンテンツデータ516のファイルを「\\Share\img\logo.jpg」としており、UNCで「コンテンツデータ参照」の表記をしている。この枠ルールには、「データソース参照」は含まれない。したがって、ReusableObject列1203の1行目には、「TRUE」が格納されている。すなわち、「\\Share\img\logo.jpg」で示されるコンテンツデータ516は、再利用可能オブジェクトである。コンテンツDB506に存在するコンテンツデータ516の内容については図13を使用して後述する。
FrameNo列1201に枠番号として「2」が格納されている枠は、図10に示した枠1003に対応する。この枠に対する枠ルールは、FrameRule列1202の2行目に格納されている通り、「リテラル文字列」と「データソース参照」とを連結したものである。したがって、「データソース参照」を解決すれば文字列が導出される。また、この枠ルールには、「データソース参照」が含まれる。したがって、この枠ルールに従って作成されるコンテンツデータ516は、再利用可能オブジェクトではないので、ReusableObject列1203の2行目には、「FALSE」が格納される。
FrameNo列1201に枠番号として「3」が格納されている枠は、図10に示した枠1004に対応する。この枠に対する枠ルールを格納するFrameRule列1202には、何もない。このように、FrameRule列1202に何も格納されていない場合は、枠(ここでは枠1004)に入力されたテキストがそのままリテラル文字列として使用されるようにしている。また、この枠ルールには、「データソース参照」が含まれない。したがって、この枠ルールに従って作成されるコンテンツデータ516は、再利用可能オブジェクトであるので、ReusableObject列1203の3行目には、「TRUE」が格納される。
FrameNo列1201に枠番号として「4」が格納されている枠は、図10に示した枠1005に対応する。この枠に対する枠ルールは、FrameRule列1202の4行目に格納されている通り、「条件文」である。この「条件文」の判定式では、図11に示したGender列に登録されている値($Gender)とリテラル文字列「M」との比較の結果に基づいて、異なるデータソースを参照するようにしている。したがって、「データソース参照」を解決して判定式を評価することにより、いずれかの「コンテンツデータ参照」(「\\Share\img\car.jpg」、「\\Share\img\bag.jpg」)が導出される。このように、各「コンテンツデータ参照」を、コンテンツDB506に存在するコンテンツデータ516のファイルをUNCで表記している。
<コンテンツDB506の内容>
次に、図13を参照して、本実施形態で使用されるコンテンツDB506の内容の一例について説明する。
図13は、コンテンツDB506に存在するコンテンツデータ516のうち、本実施形態の説明に必要なコンテンツデータの情報の一例を示す図である。
図13において、1301は、FrameRule列1202に格納されている枠ルールにおいて、「コンテンツデータ参照」を記述する場合に使用されるパス名を格納する領域である。前述したように、本実施形態では、このパス名を、UNCで表記している。
1302は、コンテンツデータ516のファイルサイズを格納する領域である。
1303は、コンテンツデータ516が表示、或いは印刷される場合の様子を表示するためのサムネイルデータ709を格納する領域である。
<キャッシュDB510の構造>
次に、図14を参照して、本実施形態で使用されるキャッシュDB510の構造について説明する。
図14は、キャッシュDB510の構造の一例を示す図である。
図14において、1401は、キャッシュID523を格納する領域である。キャッシュID523は、各レコードについて一意となるようにキャッシュマネージャプログラム509によって発番される。
1402は、コンテンツIDを格納する領域である。コンテンツIDは、同一のコンテンツデータ516に対して、同一の値となるようにキャッシュマネージャプログラム509によって発番される。
1403は、コンテンツデータ516を格納する領域である。
1404は、コンテンツデータ516をRIPプログラム508がRIPすることにより得られたラスタデータ507を格納する領域である。
<VDPアプリケーションプログラム504の動作>
次に、図15のフローチャートを参照して、ボタン1016がユーザによって押され、印刷が指示された場合のVDPアプリケーションプログラム504における動作の一例について説明する。尚、図15のフローチャートは、CPU201が、例えば外部記憶装置204に格納されたプログラムをRAM202に展開して実行することにより実現される。ここで、図10に示したレイアウト画面において、VDF文書の編集を行うためのメインウィンドウ1001には、図11に示したCUSTOMERテーブル1100がデータソースとして関連付けられている。また、メインウィンドウ1001に作成された枠1002〜1005には、図12に示した枠管理テーブル1200の情報(枠番号、枠ルール、再利用可能オブジェクトか否かを示す情報(フラグ))が設定されている。
図15の処理を大まかに分けると、ステップS1501が前処理、ステップS1502〜S1512が再利用可能オブジェクトの処理、ステップS1513〜S1528が印刷データの作成処理、ステップS1529が印刷データの送信処理となる。
まず、ステップS1501において、VDPアプリケーションプログラム504は、VDPジョブファイル518を作成するための一時的なディレクトリをVDPクライアント501の外部記憶装置204に作成する。この一時的なディレクトリのディレクトリのパス名をtmpDirとする。
ステップS1502〜1512は、VDPアプリケーションプログラム504が、VDP文書に含まれる再利用可能オブジェクトを処理するためのループ処理となっている。すなわち、ステップS1502〜1512では、図12に示した枠管理テーブル1200に存在する枠情報に対して順番に処理が行われる。ループ処理の終了はステップS1504で判定される。
ステップS1502において、VDPアプリケーションプログラム504は、図12に示した枠管理テーブル1200を参照するための変数frameIndexをRAM202に用意し、その変数frameIndexの値を0にする(初期化する)。
次に、ステップS1503において、VDPアプリケーションプログラム504は、変数frameIndexの値を増分(+1)する。
次に、ステップS1504において、VDPアプリケーションプログラム504は、変数frameIndexの値が、図12に示した枠管理テーブル1200に格納されている枠の数以下であるか否かを判定する。この判定の結果、変数frameIndexの値が枠の数以下であれば、ループ処理を継続すると判定してステップS1505に進む。一方、変数frameIndexの値が枠の数より大きければ、ループ処理を終了すると判定して後述する図15−2のステップS1513に進む。
ステップS1505において、VDPアプリケーションプログラム504は、枠情報を保持するための変数frameInfoがまだ用意されていなければRAM202に用意する。そして、VDPアプリケーションプログラム504は、図12に示した枠管理テーブル1200に格納されている枠情報のうち、frameIndex番目の枠情報を、変数frameInfoに格納する。
次に、ステップS1506において、VDPアプリケーション504は、ステップS1505で格納した枠情報に含まれるReusableObject列1203の値が、「TRUE」か否かを判定する。すなわち、VDPアプリケーション504は、ステップS1505で格納した枠情報で特定される枠に関連づけられたコンテンツデータ516が、再利用可能なオブジェクトか否かを判定する。この判定の結果、ReusableObject列1203の値が、「FALSE」であれば、枠に関連づけられたコンテンツデータ516が、再利用可能なオブジェクトでないと判定して、ステップS1503に戻り、次の枠情報に対する処理を開始する。
一方、ReusableObject列1203の値が、「TRUE」であれば、枠に関連づけられたコンテンツデータ516が、再利用可能なオブジェクトであると判定して、ステップS1507に進む。図12に示した例では、変数frameIndexの値が「1」の場合と、変数frameIndexの値が「3」の場合に(枠1002、1004の場合)、枠に関連づけられたコンテンツデータ516が再利用可能オブジェクトであると判定される。
ステップS1507において、VDPアプリケーションプログラム504は、再利用可能なオブジェクトであるコンテンツデータ516の枠ルールを特定するための変数pathNameがまだ用意されていなければRAM202に用意する。そして、VDPアプリケーションプログラム504は、用意した変数pathNameを、枠情報に含まれる枠ルール(FrameRule列1202に格納されている枠ルール)に初期化する。ステップS1506の判定処理と、図12の枠管理テーブル1200における再利用可能オブジェクトか否かの判定方法とにより、このステップS1507で変数pathNameにより特定される枠ルールには「データソース参照」が含まれない。すなわち、図12に示した例では、コンテンツデータ516が再利用可能なオブジェクトでなければ、そのコンテンツデータ516が入る枠に対する枠ルールには、「データソース参照」が含まれない。したがって、変数pathNameは、「空」か、「リテラル文字列」か、「コンテンツデータ参照」かの何れかとなる。
次に、ステップS1508において、VDPアプリケーションプログラム504は、変数pathNameが「空」又は「リテラル文字」か否かを判定する。すなわち、VDPアプリケーションプログラム504は、枠に入力された「テキスト」又は「リテラル文字列」を処理するのか、それとも「コンテンツデータ参照」を利用するのかを判定する。この判定の結果、変数pathNameが「空」又は「リテラル文字列」であれば、枠に入力された「テキスト」又は「リテラル文字列」を処理すると判定して、ステップS1509に進む。一方、変数pathNameが「空」又は「リテラル文字列」でなければ、コンテンツデータ516を参照すると判定して後述するステップS1511に進む。図12の枠管理テーブル1200の例では、変数frameIndexが「1」の場合は、変数pathNameが「コンテンツデータ参照」なのでステップS1511進む。一方、変数frameIndexが「3」の場合は、変数pathNameが「空」なのでステップS1509に進む。
ステップS1509に進むと、VDPアプリケーションプログラム504は、枠に入力された「テキスト」又は「リテラル文字列」をPostScriptデータに変換する。そして、VDPアプリケーションプログラム504は、そのPostScriptデータを、ステップS1501でRAM202に用意した変数tmpDataが指す一時的なディレクトリに格納する。ここで、変数pathNameが「空」の場合には、処理中の枠(枠管理テーブル1200のframeIndex番目の枠)に対してメインウィンドウ1001に入力されたテキストデータを文字列として使用する。一方、変数pathNameが「リテラル文字列」の場合には、その「リテラル文字列」を文字列としてそのまま使用する。図12の枠管理テーブル1200の例では、変数frameIndexが「3」の場合(図10の枠1004の場合)に、変数pathNameが「空」になる。したがって、図10の枠1004に入力されたテキストがPostScriptデータに変換されて変数tmpDataに格納される。
次に、ステップS1510において、VDPアプリケーションプログラム504は、変数isPorxy、data、cacheIdがまだ用意されていなければRAM202に用意する。そして、変数tmpDataに格納されているPostScriptデータの内容を引数として、DBブローカープログラム505に対して、キャッシュIDの生成を依頼する。その後、VDPアプリケーションプログラム504は、DBブローカープログラム505から、プロキシデータ512とキャッシュID516を受け取る。そして、VDPアプリケーションプログラム504は、受け取ったプロキシデータ512とキャッシュID523を、変数dataと変数cacheIdに夫々格納する。また、VDPアプリケーションプログラム504は、変数isProxyに「TRUE」を格納する。そして、ステップS1512に進む。尚、キャッシュIDの生成の依頼を受けたDBブローカープログラム505の動作は、図16を使用して後述する。
尚、ステップS1510において、VDPアプリケーションプログラム504は、取得する必要のあるキャッシュID523とプロキシデータ512とが、変数cacheIdと変数dataとに既に記録されているか否かを判定する。この判定の結果、取得する必要のあるキャッシュID523とプロキシデータ512とが既に記録されている場合には、キャッシュIDの生成を依頼しないようにする。一方、取得する必要のあるキャッシュID523とプロキシデータ512とが既に記録されている場合には、前述したように、キャッシュIDの生成を依頼する。
前記ステップS1508において、変数pathNameが「空」又は「リテラル文字列」でないと判定された場合には、ステップS1511に進む。ステップS1511に進むと、VDPアプリケーションプログラム504は、変数isPorxy、data、cacheIdがまだ用意されていなければRAM202に用意する。VDPアプリケーションプログラム504は、変数pathNameに格納されている「コンテンツデータ参照」から特定されるコンテンツデータ516の名前を第1の引数として、DBブローカープログラム505にコンテンツデータ516の取得を依頼する。このときVDPアプリケーションプログラム504は、ステップS1506の判定の結果からも明らかなように、再利用可能オブジェクトを処理している。再利用可能オブジェクトは、複数のページで使用される。このため、VDPアプリケーションプログラム504は、再利用可能オブジェクトを常にキャッシュした方が効率がよいと判断する。そして、VDPアプリケーションプログラム504は、常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)を「TRUE」に設定し、DBブローカープログラム505に送信する。
VDPアプリケーションプログラム504は、コンテンツデータ516の取得を依頼すると、DBブローカープログラム505から、データ、そのデータがプロキシデータか否かを識別するためのフラグ、及びキャッシュID523を受け取る。そして、VDPアプリケーションプログラム504は、受け取ったデータ、そのデータがプロキシデータか否かを識別するためのフラグ、及びキャッシュID523を、変数data、変数isProxy、変数cacheIdに夫々格納する。そして、ステップS1512に進む。尚、コンテンツデータ516の取得の依頼を受けたDBブローカープログラム505の動作は、図16を使用して後述する。
尚、ステップS1511においても、VDPアプリケーションプログラム504は、取得する必要のあるデータが、変数data、変数isProxy、変数cacheIdに既に記録されているか否かを判定する。この判定の結果、取得する必要のあるデータが既に記録されている場合には、コンテンツデータの取得を依頼しないようにする。一方、取得する必要のあるデータが既に記録されている場合には、前述したように、コンテンツデータの取得を依頼する。
ステップS1512に進むと、VDPアプリケーションプログラム504は、コンテンツデータ516を保持するための配列contentData[]がまだ用意されていなければRAM202に用意する。そして、VDPアプリケーションプログラム504は、ステップS1510又はS1511で変数dataに格納した情報を、ステップS1501で用意した変数tmpDirが指す一時的なディレクトリに格納する。ここで、一時的なディレクトリに格納する情報のファイル名を「"0000"+"枠番号"」とする。枠番号は、処理中の枠に対してFrameNo列1201に格納されている値を4桁で表わしたものとする。尚、FrameNo列1201に格納されている値が4桁に満たない部分は、満たない部分を"0"で埋めた文字列とする。例えば、処理中の枠に対してFrameNo列1201に格納されている値(枠番号)が「1」の場合、ファイル名は"00000001"となる。ファイル名の拡張子は、変数dataが保持しているデータの種別に応じて適切なものが使用される。
VDPアプリケーションプログラム504は、このようにして与えられるファイル名をRAM202に用意した変数fileNameに格納する。VDPアプリケーションプログラム504は、変数frameIndexの値を参照する。そして、VDPアプリケーションプログラム504は、コンテンツデータ516を保持するための配列contentData[]に対して、変数fileName、変数isProxy、変数cacheIdの値をそれぞれ格納する。そして、ステップS1503に戻る。
前記ステップS1504において、枠管理テーブル1200を参照するための変数frameIndexの値が枠の数より大きいと判定された場合には、図15−2のステップS1513に進む。図15−2のステップS1513〜S1528は、VDP文書に関連付けられたデータソースを枠ルールに適用することで、VDPアプリケーションプログラム504が、データソースのレコード毎にVDP文書のPPMLファイルのページを作成する処理である。これらステップS1513〜S1528は、二重ループになっている。外側のループであるステップS1513〜S1528は、データソースの各レコードを処理するループである。この外側のループの終了はステップS1515で判定される。一方、内側のループであるステップS1516〜S1527は、VDP文書に存在する各枠の枠ルールに対してレコードを適用する処理である。この内側のループの終了はステップS1518で判定される。
ステップS1513において、VDPアプリケーションプログラム504は、図11に示したCUSTOMERテーブル1100を参照するための変数recordNoをRAM202に用意し、その変数recordNoの値を0にする(初期化する)。
次に、ステップS1514において、VDPアプリケーションプログラム504は、変数recordNoの値を増分(+1)する。
次に、ステップS1515において、VDPアプリケーションプログラム504は、変数recordNoの値が、図11に示したCUSTOMERテーブル1100に格納されているレコードの数以下であるか否かを判定する。この判定の結果、変数recordNoの値がレコードの数以下でなければ、ループの終了と判定して後述するステップS1529に進む。一方、変数recordNoの値がレコードの数以下であれば、ループを継続すると判定してステップS1516に進む。
ステップS1516において、VDPアプリケーションプログラム504は、ステップS1503でRAM202に用意した変数frameIndexの値を0にする(初期化する)。
次に、ステップS1517において、VDPアプリケーションプログラム504は、変数frameIndexの値を増分(+1)する。
次に、ステップS1518において、VDPアプリケーションプログラム504は、変数frameIndexの値が、図12に示した枠管理テーブル1200に格納されている枠の数以下であるか否かを判定する。この判定の結果、変数frameIndexの値が枠の数より大きければ、ループ処理を終了すると判定して後述する図15−2のステップS1528に進む。一方、変数frameIndexの値が枠の数以下であれば、ループ処理を継続すると判定してステップS1519に進む。
ステップS1519において、VDPアプリケーションプログラム504は、図12に示した枠管理テーブル1200に格納されている枠情報のうち、frameIndex番目の枠情報を、ステップS1505で用意した変数frameInfoに格納する。
次に、ステップS1520において、VDPアプリケーションプログラム504は、ステップS1519で格納した枠情報に含まれるReusableObject列1203の値が、「TRUE」か否かを判定する。すなわち、VDPアプリケーション504は、ステップS1519で格納した枠情報で特定される枠に関連づけられたコンテンツデータ516が、再利用可能なオブジェクトか否かを判定する。
この判定の結果、ReusableObject列1203の値が、「TRUE」であれば、枠に関連づけられたコンテンツデータ516が、再利用可能なオブジェクトであると判定する。この場合、再利用可能オブジェクトのコンテンツデータ516は、ステップS1502〜S1512で処理済みなので、ステップS1517に戻り、次のループを開始する。
一方、ReusableObject列1203の値が、「FALSE」であれば、枠に関連づけられたコンテンツデータ516が、再利用可能なオブジェクトでないと判定して、ステップS1521に進む。図12に示した例では、変数frameIndexの値が「2」の場合と、変数frameIndexの値が「4」の場合(枠1003、1005の場合)に、枠に関連づけられたコンテンツデータ516が再利用可能オブジェクトではないと判定される。
ステップS1521において、VDPアプリケーションプログラム504は、変数recordがまだ用意されていなければRAM202に用意する。そして、VDPアプリケーションプログラム504は、図11に示したCUSTOMERテーブル1100に格納されているレコード情報のうち、recordNo番目のレコード情報を、変数recordに格納する。
次に、ステップS1522において、VDPアプリケーションプログラム504は、ステップS1519で格納した枠情報に含まれる枠ルール(FrameRule列1202の情報)に、ステップS1521で格納したレコード情報を適用する。ステップS1521の判定処理と、図12の枠管理テーブル1200における再利用可能オブジェクトか否かの判定方法とにより、このステップ1522で処理される枠ルールには「データソース参照」が含まれる。そこで、VDPアプリケーションプログラム504は、その「データソース参照」に、変数recordに格納されているレコード情報を適用することで、枠ルールとして「リテラル文字列」か「コンテンツデータ参照」の何れかを導出する。そして、VDPアプリケーションプログラム504は、導出した「リテラル文字列」又は「コンテンツデータ参照」を、ステップS1507で用意した変数pathNameに格納する。
例えば、変数recordNoが「1」であり、且つ変数frameIndexが「2」の場合、変数recordに含まれる情報は、図11に示すレコード番号が「1」の情報である。そして、変数frameInfoに含まれる情報は、図12に示すFrameNoが「2」の情報である。このとき、枠ルールは、次のようになる。
"〒" $ZipCode
$Address
$LastName $FirstName "様"
この枠ルールに含まれるコンテンツデータ参照($ZipCode)を、レコード番号が「1」の場合におけるZipCode列1105の値(111-2222)に置き換える。その他のコンテンツデータ参照($Address、$LastName、$FirstName)も同様に、レコード番号が「1」の場合におけるAddress列1106、LastName列1102、FirstName列1103の値に夫々置き換える。その結果、枠ルールから以下のリテラル文字列が導出される。
〒111-2222
東京都千代田区丸の内○−○−○
山田 太郎 様
また、例えば、変数recordNoが「1」であり、且つ変数frameIndexが「4」の場合、変数recordに含まれる情報は、図11に示すレコード番号が「1」の情報である。そして、変数frameInfoに含まれる情報は、図12に示すFrameNoが「4」の情報である。このとき、枠ルールは、次のようになる。
if $Gender="M"
\\Share\img\car.jpg
else
\\Share\img\bag.jpg
この枠ルールに含まれるコンテンツデータ参照($Gender)を図11に示すレコード番号が「1」の場合におけるGender列1104の値(M)に置き換える。そして、「条件文」に対して前述した枠ルール文法[6]を適用すると、「コンテンツ参照(\\Share\img\car.jpg)」が導出される。
図15−2に説明を戻し、ステップS1523において、VDPアプリケーションプログラム504は、変数pathNameが「リテラル文字」か否かを判定する。すなわち、VDPアプリケーションプログラム504は、枠に入力されたリテラル文字列を処理するのか、それとも「コンテンツデータ参照」を利用するのかを判定する。この判定の結果、変数pathNameが「リテラル文字列」であれば、リテラル文字列を処理すると判定して、ステップS1524に進む。一方、変数pathNameが「リテラル文字列」でなければ、コンテンツトデータ516を参照すると判定してステップS1526に進む。
図12の枠管理テーブル1200の例では、変数frameIndexが「2」の場合は、変数pathNameが「リテラル文字列」なのでステップS1524に進む。一方、変数frameIndexが「4」の場合は、変数pathNameが「コンテンツ参照」なので後述するステップS1526に進む。
ステップS1524に進むと、VDPアプリケーションプログラム504は、枠に入力されたリテラル文字列をPostScriptデータに変換する。そして、VDPアプリケーションプログラム504は、そのPostScriptデータを、ステップS1501でRAM202に用意した変数tmpDataが指す一時的なディレクトリに格納する。図12に示す枠管理テーブルの例において、変数frameIndexが「2」の場合は、前述した
〒111-2222
東京都千代田区丸の内○−○−○
山田 太郎 様
というリテラル文字列がPostScriptデータに変換されて変数tmpDataが指す一時的なディレクトリに格納される。
次に、ステップS1525において、VDPアプリケーションプログラム504は、変数tmpDataに格納されているPostScriptデータを引数として、DBブローカープログラム505に対して、キャッシュIDの生成を依頼する。その後、VDPアプリケーションプログラム504は、DBブローカープログラム505から、プロキシデータ512とキャッシュID523を受け取る。また、VDPアプリケーションプログラム504は、変数isProxyに「TRUE」を格納する。そして、ステップS1527に進む。尚、キャッシュIDの生成の依頼を受けたDBブローカープログラム505の動作は、図16を使用して後述する。
前記ステップS1523において、変数pathNameが「リテラル文字列」でないと判定された場合には、ステップS1526に進む。そして、VDPアプリケーションプログラム504は、変数pathNameに格納されている「コンテンツデータ参照」から特定されるコンテンツデータの名前を第1の引数として、DBブローカープログラム505にコンテンツデータ516の取得を依頼する。また、VDPアプリケーションプログラム504は、サイズの大きなオブジェクトのみをキャッシュした方が効率がよいと判断し、常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)を「FALSE」に設定する。そして、VDPアプリケーションプログラム504は、常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)の値をDBブローカープログラム505に送信する。更に、VDPアプリケーションプログラム504は、キャッシュするか否かを判定する際のスレッショルド値(第3の引数)として、図10のテキストボックス1009に入力された値を設定し、DBブローカープログラム505に送信する。尚、ここでは、キャッシュするか否かを判定する際のスレッショルド値を「200KB」とする。
VDPアプリケーションプログラム504は、コンテンツデータ516の取得を依頼すると、DBブローカープログラム505から、データ、プロキシデータか否かを識別するためのフラグ、及びキャッシュID523を受け取る。そして、VDPアプリケーションプログラム504は、受け取ったデータ、そのデータがプロキシデータか否かを識別するためのフラグ、及びキャッシュID523を、変数data、変数isProxy、及び変数cacheIdに夫々格納する。そして、ステップS1527に進む。尚、コンテンツデータ516の取得の依頼を受けたDBブローカープログラム505の動作は、図16を使用して後述する。
ステップS1527に進むと、VDPアプリケーション504は、ステップS1525又はS1526で変数dataに格納した情報を、ステップS1501で用意した変数tmpDirが指す一時的なディレクトリに格納する。ここで、一時的なディレクトリに格納する情報のファイル名を「"レコード番号"+"枠番号"」とする。レコード番号は、処理中のレコードに対してレコード番号の列1101に格納されている値を4桁で表わしたものとする。レコード番号の列1101に格納されている値が4桁に満たない部分は、満たない部分を"0"で埋めた文字列とする。また、枠番号は、処理中の枠に対してFrameNo列1201に格納されている値を4桁で表わしたものとする。尚、FrameNo列1201に格納されている値が4桁に満たない部分は、満たない部分を"0"で埋めた文字列とする。
例えば、処理中のレコードに対してレコード番号の列1101に格納されている値(レコード番号)が「2」であり、処理中の枠に対してFrameNo列1201に格納されている値(枠番号)が「3」の場合、ファイル名は"00020003"となる。ファイル名の拡張子は、変数dataが保持しているデータの種別に応じて適切なものが使用される。
VDPアプリケーションプログラム504は、このようにして与えられるファイル名をRAM202に用意した変数fileNameに格納する。VDPアプリケーションプログラム504は、変数frameIndexの値を参照する。そして、VDPアプリケーションプログラム504は、ステップS1512で用意したコンテンツデータ516を保持するための配列contentData[]に対して、変数fileName、変数isProxy、変数cacheIdの値を夫々格納する。そして、ステップS1517に戻る。
前記ステップS1518において、変数frameIndexの値が枠の数より大きいと判定された場合には、ステップS1528に進む。そして、VDPアプリケーションプログラム504は、コンテンツデータ516を保持するための配列contentData[]に格納されたデータを利用して、recordNoページ目のPPMLデータファイル702を作成する。ここで、ステップS1501で用意した変数tmpDirが指す一時的なディレクトリに保存されたコンテンツデータ516又はプロキシデータ512が参照される。作成されたPPMLデータファイル702も、ステップS1501で用意した変数tmpDirが指す一時的なディレクトリに保存される。そして、ステップS1514に戻る。
前記ステップS1515において、変数recordNoの値がレコードの数以下でないと判定された場合には、ステップS1529に進む。そして、VDPアプリケーションプログラム504は、ステップS1501で用意した変数tmpDirが指す一時的なディレクトリに格納されている内容を全てZIPフォーマットで結合及び圧縮し、VDPジョブファイル518を作成する。VDPアプリケーションプログラム504は、作成したVDPジョブファイル518を、RIPプログラム508に送信する。尚、VDPジョブファイル518を受信したRIP508の動作は、図18を使用して後述する。
<DBブローカープログラム505の動作>
図16のフローチャートを参照して、ステップS1510、S1525でキャッシュIDの生成が依頼された場合と、ステップS1511、S1526でコンテンツデータ516の取得が依頼された場合のDBブローカープログラム505の動作の一例を説明する。尚、図16のフローチャートは、CPU201が、例えば外部記憶装置204に格納されたプログラムをRAM202に展開して実行することにより実現される。
まず、ステップS1601においてDBブローカープログラム505は、VDPアプリケーションプログラム504から、コンテンツデータ516の取得依頼があったか否かを判定する。この判定の結果、コンテンツデータ516の取得依頼がなかった場合には、後述するステップS1607に進む。一方、コンテンツデータ516の取得依頼があった場合には、ステップS1602に進む。
尚、前述したように、コンテンツデータ516の取得依頼に際しては、変数pathNameに格納されている「コンテンツデータ参照」から特定されるコンテンツデータの名前が第1の引数としてDBブローカープログラム505に送信される。また、常にキャッシュを行うか否かを識別するためのフラグが第2の引数としてDBブローカープログラム505に送信される。更に、キャッシュするか否かを判定する際のスレッショルド値が第3の引数としてDBブローカープログラム505に送信される。
ステップS1602において、DBブローカープログラム505は、RAM202に変数data、isProxy、cacheIdを用意する。DBブローカープログラム505は、第1の因数と同じファイル名のコンテンツデータ516を、通信経路104a、104bを通じてコンテンツDB506から取得する。そして、DBブローカープログラム505は、取得したコンテンツデータ516を変数dataに格納する。また、DBブローカープログラム505は、変数isProxyと変数cacheIdの値を、夫々「FALSE」と「N/A(値なし)」に初期化する。
次に、ステップS1603において、DBブローカープログラム505は、常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)が、「TRUE」か否かを判定する。この判定の結果、常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)が、「TRUE」である場合には、キャッシュを行うと判定して、後述するステップS1605に進む。一方、常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)が、「FALSE」である場合には、ステップS1604に進む。
ステップS1604に進むと、DBブローカープログラム505は、ステップS1602で変数dataに格納したコンテンツデータ516の容量が、キャッシュするか否かを判定する際のスレッショルド値(第3の引数)よりも大きいか否かを判定する。この判定の結果、変数dataに格納したコンテンツデータ516の容量が、キャッシュするか否かを判定する際のスレッショルド値(第3の引数)よりも大きい場合には、キャッシュを行うと判定して、ステップS1605に進む。一方、変数dataに格納したコンテンツデータ516の容量が、キャッシュするか否かを判定する際のスレッショルド値(第3の引数)よりも大きくない場合には、キャッシュを行わないと判定する。この場合、コンテンツデータ516の取得依頼に対する戻り値(変数data、変数isProxy、変数cacheId)として、以下のデータがDBブローカープログラム505からVDPアプリケーションプログラム504に返される。すなわち、変数dataの値として引数pathNameで指定されたコンテンツデータ516の内容が返される。また、変数isProxyの値として「FALSE」が返される。更に、変数cacheIdの値として「N/A(値なし)」が返される。
ステップS1604でキャッシュを行わないと判定されるのは、例えば次のような場合である。即ち、枠1004(図12のFrameNoが「4」の枠)に対して、第2の引数として「FALSE」が設定され、第3の引数として「200KB」が設定された場合のうち、レコード番号が「2」のレコードをステップS1526で処理している場合である。この場合、レコード番号が「2」のレコードは$Genderの値が「F」であることから、枠1004に対する枠ルールは、「\\Share\img\bag.jpg」と導出される。そして、このファイルパスに一致するコンテンツデータ516のサイズは、図13に示すように100KBである。したがって、ステップS1604において、Noと判定される。
以上のように本実施形態では、例えば、ステップS1603、S1604で予め定められた条件に基づいて、キャッシュID523を生成するか否か(コンテンツデータ516の代わりとしてキャッシュID523を用いるか否か)を判定する。
前記ステップS1604において、変数dataに格納したコンテンツデータ516の容量が、キャッシュするか否かを判定する際のスレッショルド値(第3の引数)よりも大きい場合には、ステップS1605に進む。ステップS1605に進むと、DBブローカープログラム505は、変数dataに格納したコンテンツデータ516の内容を引数として、キャッシュマネージャプログラム509に、キャッシュID523の取得依頼を行う。このキャッシュID523の取得依頼には、通信経路104d、104eが使用される。その後、キャッシュマネージャプログラム509から、プロキシデータ512とキャッシュID523とが返されるので、DBブローカープログラム505は、キャッシュID523をRAM202に用意した変数data、cacheIdに夫々格納する。また、DBブローカープログラム505は、変数isProxyに「TRUE」を格納する。この場合、コンテンツデータ516の取得処理に対する戻り値(変数data、変数isProxy、変数cacheId)として、以下のデータがDBブローカープログラム505からVDPアプリケーションプログラム504に返される。即ち、変数dataの値として、キャッシュマネージャプログラム509から送信されたプロキシデータ513が返される。また、変数isProxyの値として「TRUE」が返される。更に、変数cacheIdの値として、キャッシュマネージャプログラム509から送信されたキャッシュID523が返される。
ステップS1605の処理が行われるのは、例えば次のようにして、ステップS1511において、コンテンツデータ516の取得依頼があった場合である。即ち、「TRUE」が設定された第2の引数がDBデータプログラム505に送信された場合である。この場合には、ステップS1603においてYesと判定され、ステップS1605に処理が進む。
また、枠1004に対して、第2の引数として「FALSE」が設定され、第3の引数として「200KB」が設定され、且つレコード番号が「1」及び「3」のレコードをステップS1526で処理している場合にもステップS1605の処理が行われる。この場合、レコード番号が「1」及び「3」のレコードは$Genderの値が「M」であることから、枠1004に対する枠ルールは、「\\Share\img\car.jpg」と導出される。そして、このファイルパスに一致するコンテンツデータ516のサイズは、図13に示すように「300KB」である。したがって、ステップS1604において、Yesと判定されステップS1605に処理が進む。
尚、キャッシュマネージャプログラム509のキャッシュ処理の動作については、図17を使用して後述する。
次に、ステップS1606において、DBブローカープログラム505は、変数dataに格納したコンテンツデータ516の内容から、サムネイルデータ709を作成し、RAM202に用意した変数dataに格納する。そして、DBブローカープログラム505は、変数data、isProxy、変数cacheIdの値を戻り値として、VDPアプリケーションプログラム504に返す。
前記ステップS1601において、コンテンツデータ516の取得依頼がなかったと判定された場合には、ステップS1607に進む。そして、DBブローカープログラム505は、VDPアプリケーションプログラム504から、キャッシュIDの取得依頼があったか否かを判定する。この判定の結果、キャッシュIDの生成依頼がなかった場合には、処理を終了する。一方、キャッシュIDの生成依頼があった場合には、前述したステップS1605に進む。ただし、ステップS1607からステップS1605に進んだ場合には、DBブローカープログラム505は、キャッシュID523を受け取る。したがって、DBブローカープログラム505は、キャッシュID523をRAM202に用意した変数cacheIdに夫々格納する。その後、DBブローカープログラム505は、ステップS1606でサムネイルデータ709を生成し、変数dataの値と変数cacheIdの値とを戻り値として、VDPアプリケーションプログラム504に返す。
<キャッシュマネージャプログラム509の動作>
次に、図17のフローチャートを参照して、ステップS1605で、キャッシュID523の取得依頼があった場合のキャッシュマネージャプログラム509における動作の一例を説明する。前述したように、キャッシュID523の取得依頼の際には、変数dataに格納したコンテンツデータ516の内容が引数として、キャッシュマネージャプログラム509に渡される。尚、図17のフローチャートは、MFP制御部(CPU)301が、例えば外部記憶装置305に格納されたプログラムをRAM302に展開して実行することにより実現される。
ステップS1701において、キャッシュマネージャプログラム509は、VDPプリンタ503のRAM302に変数cacheIdを用意する。そして、キャッシュマネージャプログラム509は、一意なキャッシュID523を生成して変数cacheIdに格納する。キャッシュマネージャプログラム509は、例えば、Microsoft Windows(登録商標)で使用されるGUID(Global Unique Identifier)を使用することによりキャッシュID523を生成できる。
次に、ステップS1702において、キャッシュマネージャプログラム509は、変数cacheIdの値を戻り値としてDBブローカープログラム505に返す。次のステップS1703〜S1704の処理は時間がかかる可能性がある。しかしながら、ステップS1702で、キャッシュIDの取得依頼に対する応答を終了するので、依頼側のDBブローカープログラム505は、ステップS1703〜S1704の終了を待たずに処理を続けることができる。
次に、ステップS1703において、キャッシュマネージャプログラム509は、VDPプリンタ503のRAM302に、変数contentId、rasterDataを用意する。まず、キャッシュマネージャプログラム509は、引数であるコンテンツデータ516の内容から一意なコンテンツID523を生成して変数contentIdに格納する。ここでは、引数の値からMD5(Message Digest Algorithm 5)を計算して使用する。次に、キャッシュマネージャプログラム509は、RIPプログラム508に対して、ラスタデータ507の生成依頼を行う。その後、キャッシュマネージャプログラム509は、引数であるコンテンツデータ516の内容をRIP処理することにより生成されたラスタデータ507を取得し、変数rasterDataに格納する。このラスタデータ507を生成する際のやり取りは、通信経路525、526を介して行われる。
次に、ステップS1704において、キャッシュマネージャプログラム509は、変数cacheId、変数contentId、引数contentData、変数rasterDataの値を、通信経路529を介してキャッシュDB510に保存する。図14に示した例では、領域1401〜104に、変数cacheId、変数contentId、引数contentData、変数rasterDataが、夫々保存される。
<処理中のVDPシステムの内部状態>
次に、図18〜図21を参照して、図15〜図17のフローチャートを実行している最中のVDPシステムの内部状態の一例について説明する。
図18は、ステップS1501、S1502を実行した後にステップS1503〜S1512のループ実行し、ステップS1504でNoと判定されてループを終了した時点でのVDPシステムの内部状態の一例を示す図である。すなわち、枠管理テーブル1200に格納されている全ての枠に対して再利用可能オブジェクトに関わる処理を実行した時点でのVDPシステムの内部状態の一例を示す図である。
1901は、VDPアプリケーションプログラム504で作成されたVDP文書のレイアウトを示す。
枠1002は、図12の枠管理テーブル1200の先頭に存在する。したがって、ステップS1501〜S1512のループでは、この枠1002に対する処理が最初に実行される。すなわち、枠1002に対する処理では、変数frameIndexの値として「1」が使用される。
枠1003〜1005に対する処理では、変数frameIndexの値として、夫々「2」〜「4」が使用される。
1902は、ステップS1512で設定される配列contentData[]の内容を示す。前述したように、ステップS1506でコンテンツデータが再利用可能オブジェクトであると判定された場合に、ステップS1507〜S1512の処理が実行される。したがって、ステップS1507〜S1512の処理は、図12のReusableObject列1203の値が、「TRUE」の枠に対してのみ実行される。すなわち、図12に示した例では、枠1002、1004に対してのみステップS1507〜S1512の処理が実行される。
枠1002に対する処理で使用される変数frameIndexの値は「1」である。1909は、枠1002に対するコンテンツデータ516を保持するための配列contentData[1]を示す。contentData[1].fileNameの値は、ステップS1512において前述した規則に従って「00000001.jpg」となる。枠1002の枠ルールは、図12より、「\\Share\img\logo.jpg」という「コンテンツ参照」である。したがって、ステップS1508の判定はNoとなり、ステップS1511に進む。そして、ステップS1511において、常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)を「TRUE」として、コンテンツデータ516の取得依頼が行われる。そうすると、図16のステップS1606で「TRUE」に設定された変数isProxyがで戻り値として返され、ステップS1512でcontentData[1].isProxyに、「TRUE」設定される。
また、ステップS1605でキャッシュIDの取得依頼がなされると、図17のステップS1701、S1703、S1704で、夫々キャッシュID523、コンテンツID、ラスタデータ507が生成され、キャッシュDB510に保存される。ここでは、キャッシュID523として、「C55AACBD-66EE-4dc6-974A-2BAC781D0D31」というGUID1915が生成される。また、コンテンツIDとして、図13に示すコンテンツ「\\Share\img\logo.jpg」から「1bbb0237adef732589b4daca8ce0497e」というMD5値1916が生成される。
コンテンツデータは、例えば、図18に示すような内容のJPEGデータである。このJPEGデータ1917は、図13に示したものと同じである。また、ラスタデータ507は、JPEGデータ1917をラスタライズ処理したデータとなる。
以上のようなキャッシュID523(GUID1915)が、ステップS1511において、戻り値cacheIdとしてVDPアプリケーションプログラム504に返される。そして、ステップS1512において、そのキャッシュID523(GUID1915)が、contentData[1].cacheIdに設定される。
また、ステップS1606で生成されたサムネイルデータ709aが、戻り値dataとしてVDPアプリケーションプログラム504に返される。このサムネイルデータ709aは、ステップS1512において、contentData[1].fileName(00000001.jpg)1911というファイル名で、変数tmpDataが指す一時的なディレクトリに保存される。
枠1004に対する処理で使用される変数frameIndexの値は「3」である。1910は、枠1004に対するコンテンツデータ516を保持するための配列contentData[3]を示す。contentData[3].fileNameの値は、ステップS1512において前述した規則に従って「00000003.jpg」となる。枠1004の枠ルールは、図12より「空」である。したがって、ステップS1508の判定はYesとなり、ステップS1509、S1510に進む。
そして、ステップS1510で変数isProxyが「TRUE」に設定されることから、ステップS1512において、contentData[3].isProxyの値が「TRUE」に設定される。また、ステップS1510でキャッシュID523の生成依頼が行われて、図16のフローチャートが実行され、更にステップS1605においてキャッシュID523の取得依頼が行われて図17のフローチャートが実行される。
そして、ステップS1701、S1703、S1704で、夫々キャッシュID523、コンテンツID、ラスタデータ507が生成され、キャッシュDB510に保存される。ここではキャッシュID523として、「1E3B90CC-A325-4d68-AE61-050C7166E14F」というGUID1918が生成される。また、コンテンツIDとして、図10の枠1004内に示す表示をPostScriptデータに変換したデータから「cce49c2d2d7f16cc0b9180fcaa5af015」というMD5値1919が生成される。
コンテンツデータ516は、例えば、図18に示すような内容のPostScriptデータ1914である。また、ラスタデータ507は、そのPostScriptデータ1914をラスタライズ処理したデータとなる。
以上のようなキャッシュID523(GUID1918)が戻り値cacheIdとしてVDPアプリケーションプログラム504に返される。そして、ステップS1512において、そのキャッシュID523(GUID1918)が、contentData[3].cacheIdに設定される。
また、ステップS1606で生成されたサムネイルデータ709bが戻り値dataとしてVDPアプリケーションプログラム504に返される。このサムネイルデータ709bは、ステップS709bにおいて、contentData[3].fileName(00000003.jpg)1913というファイル名で、変数tmpDataが指す一時的なディレクトリに保存される。
図19は、ステップS1513を実行した後に、ステップS1514〜S1527を1回実行した(ジョブの1ページ目の処理が完了した)時点でのVDPシステムの内部状態の一例を示す図である。この場合、変数recordNoの値として「1」が使用される。
2010、2012は、ステップS1527で設定される配列contentData[]の内容を示す。前述したように、ステップS1520でコンテンツデータが再利用可能オブジェクトでないと判定された場合に、ステップS1521〜S1527の処理が実行される。したがって、ステップS1521〜S1527の処理は、図12のReusableObject列1203の値が、「FALSE」の枠に対してのみ実行される。すなわち、図12に示した例では、枠1003、1005に対してのみステップS1521〜S1527の処理が実行される。
枠1003に対する処理で使用されるframeIndexの値は「2」である。2010は、枠1003に対するコンテンツデータ516を保持するための配列contetnData[2]を示す。contentData[2].fileNameの値は、ステップS1527において前述した規則に従って「00010002.jpg」となる。枠1003の枠ルールは、図12より以下のようになる。
"〒" $ZipCode
$Address
$LastName $FirstName "様"
このように、枠1003の枠ルールには「データソース参照」が含まれる。したがって、ステップS1521において、図11のレコード情報のうち、レコード番号が「1」(recordNo=1)であるレコード情報が取得される。そして、ステップS1522において、そのレコード情報が枠ルールに適用され、以下の「リテラル文字列」が導出される。
〒111-2222
東京都千代田区丸の内○−○−○
山田 太郎 様
このようにレコード情報が枠ルールに適用され、「リテラル文字列」が導出されると、ステップS1523の判定は、Yesとなり、ステップS1524、S1525に進む。そして、ステップS1525において変数isProxyが「TRUE」に設定されることから、ステップS1527において、contentData[2].isProxyの値が「TRUE」に設定される。
また、ステップS1605でキャッシュID523の取得依頼がなされると、図17のステップS1701、S1703、S1704で、夫々キャッシュID523、コンテンツID、ラスタデータ507が生成され、キャッシュDB510に保存される。ここでは、キャッシュID523として、「D8BB50FE-44E7-41ea-A658-99E77AF3235A」というGUID2027が生成される。また、前述したリテラル文字列は、ステップS1524でPostScriptデータに変換される。そして、このPostScriptデータから「f2950230fffc3d5d346f84135d149a67」というMD5値2028がコンテンツIDとして生成される。
コンテンツデータは、例えば、図19示すような内容のPostScriptデータ2029である。また、ラスタデータ507は、PostScriptデータ2029をラスタライズ処理したデータとなる。
以上のようなキャッシュID523(GUID2027)が、ステップS1525において、戻り値cacheIdとしてVDPアプリケーションプログラム504に返される。そして、ステップS1527において、そのキャッシュID523(GUID2027)が、contentData[2].cacheIdに設定される。
また、ステップS1606で生成されたサムネイルデータ709cが、戻り値dataとしてVDPアプリケーションプログラム504に返される。このサムネイルデータ709c8は、ステップS1527において、contentData[2].fileName(00010002.jpg)2027というファイル名で、変数tmpDataが指す一時的なディレクトリに保存される。
枠1005に対する処理で使用される変数frameIndexの値は「4」である。2012は、枠1005に対するコンテンツデータ516を保持するための配列contentData[4]を示す。contentData[4].fileNameの値は、ステップS1527において前述した規則に従って「00010004.jpg」となる。枠1005の枠ルールは、図12より以下のようになる。
if $Gender="M"
\\Share\img\car.jpg
else
\\Share\img\bag.jpg
このように、枠1005の枠ルールには「データソース参照」が含まれる。したがって、ステップ1521において、図11のレコード情報のうち、レコード番号が「1」(recordNo=1)であるレコード情報が取得される。そして、ステップS1522において、そのレコード情報が枠ルールに適用され、以下の「コンテンツ参照」が導出される。
\\Share\img\car.jpg
「コンテンツ参照」が導出されると、ステップS1523では、Noと判定され、ステップS1526に進む。そして、ステップS1526において、常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)を「FALSE」とし、キャッシュするか否かを判定する際のスレッショルド値(第3の引数)を「200KB」とする。そして、これら第2及び第3の引数を用いて、コンテンツデータ516の取得依頼が行われる。そうすると、図16の処理が実行される。
常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)は「FALSE」であるので、ステップS1603ではNoと判定され、ステップS1604に進む。
ここで、「コンテンツ参照」で示される「\\Share\img\car.jpg」のサイズは、図13に示したように「300KB」である。したがって、ステップS1604では、Yesと判定され、ステップS1605の処理に進む。このステップS1605では、変数isProxyに「TRUE」が設定され、この「TRUE」が設定された変数isProxyが、ステップS1526において戻り値としてVDPアプリケーションプログラム504に返される。そして、その戻り値が、ステップS1527においてcontentData[4].isProxyに設定される。
また、ステップS1605でキャッシュIDの取得依頼がなされると、図17のステップS1701、S1703、S1704で、夫々キャッシュID523、コンテンツID、ラスタデータ507が生成され、キャッシュDB510に保存される。ここでは、キャッシュID523として「3688C04A-32B6-45eb-B189-ADCED3B9310B」というGUID2030が生成される。また、コンテンツIDとして、「コンテンツ参照」で示される「\\Share\img\car.jpg」から「cce49c2d2d7f16cc0b9180fcaa5af015」というMD5値2031が生成される。
コンテンツデータは、例えば、図19に示すような内容のJPEGデータ2032である。このJPEGデータ2032は、図13に示したものと同じである。また、ラスタデータ507は、JPEGデータ2032をラスタライズ処理したデータとなる。
以上のようなキャッシュID523(GUID2030)が、ステップS1526において、戻り値cacheIdとしてVDPアプリケーションプログラム504に返される。そして、ステップS1527において、そのキャッシュID523(GUID2030)が、contentData[4].cacheIdに設定される。
また、ステップS1606で生成されたサムネイルデータ709dが、戻り値dataとしてVDPアプリケーションプログラム504に返される。このサムネイルデータ709dは、ステップS1527において、contentData[4].fileName(00010004.jpg)2019というファイル名で、変数tmpDataが指す一時的なディレクトリに保存される。
図20は、ステップS1514〜S1527を2回実行した(ジョブの2ページ目の処理が完了した)時点でのVDPシステムの内部状態の一例を示す図である。この場合、変数recordNoの値として「2」が使用される。
枠1003に対する処理は、図19を用いて説明した処理と略同様であるが、ステップS1521で取得されるレコード情報が、図19を用いて説明したレコード情報と異なる。すなわち、ここでは、図11のレコード情報のうち、レコード番号が「2」(recordNo=2)であるレコード情報が取得される。尚、2110は、枠1003に対するコンテンツデータ516を保持するための配列contentData[2]を示す。また、709eは、コンテンツデータ516のサムネイルデータ709であり、2121は、そのサムネイルデータ709eのファイル名である。また、2137は、キャッシュID523として生成されるGUIDである。2138は、コンテンツIDとして生成されるMD5値である。2139は、コンテンツデータとして生成されるPostScriptデータである。
枠1005に対する処理は、図19を用いて説明した処理処理と似ているが、いくつの点が異なるので、以下詳細に説明する。
枠1005に対する処理で使用される変数frameIndexの値は「4」である。2112は、枠1005に対するコンテンツデータ516を保持するための配列contentData[4]を示す。contentData[4].fileNameの値は、ステップS1527において前述した規則に従って「00020004.jpg」となる。枠1005の枠ルールは、図12より以下のようになる。
if $Gender="M"
\\Share\img\car.jpg
else
\\Share\img\bag.jpg
このように、枠1005の枠ルールには「データソース参照」が含まれる。したがって、ステップ1521において、図11のレコード情報のうち、レコード番号が「2」(recordNo=2)であるレコード情報が取得される。そして、ステップS1522において、そのレコード情報が枠ルールに適用され、以下の「コンテンツ参照」が導出される。
\\Share\img\bag.jpg
「コンテンツ参照」が導出されると、ステップS1523では、Noと判定され、ステップS1526に進む。そして、ステップS1526において、常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)を「FALSE」とし、キャッシュするか否かを判定する際のスレッショルド値(第3の引数)を「200KB」とする。そして、これら第2及び第3の引数を用いて、コンテンツデータ516の取得依頼が行われる。そうすると、図16の処理が実行される。
常にキャッシュを行うか否かを識別するためのフラグ(第2の引数)は「FALSE」であるので、ステップS1603ではNoと判定され、ステップS1604に進む。
ここで、「コンテンツ参照」で示される「\\Share\img\bag.jpg」のサイズは、図13に示したように「100KB」である。したがって、ステップS1604では、Noと判定され、図16のフローチャート(コンテンツデータ取得処理)が終了する。ここで、戻り値data、isProxy、cacheIdの値は、ステップS1602で設定された値となり、夫々「\\Share\img\bag.jpg」の内容、「FALSE」、「N/A(値なし)」となる。そして、これらの戻り値data、isProxy、cacheIdの値が、VDPアプリケーションプログラム504に返される。
そして、ステップS1527において、戻り値dataに含まれる「\\Share\img\bag.jpg」のコンテンツデータが、変数tmpDataが指す一時的なディレクトリに保存される。2124は、このコンテンツデータを示す。ここで、コンテンツデータ2124は、contentData[4].fileName(00020004.jpg)2123というファイル名で保存される。このように、ここで保存されるのはサムネイルデータではなく、オリジナルのコンテンツデータである。また、戻り値cacheId、isProxyは、ステップS1527において、夫々contentData[4].cacheId、contentData[4].isProxyに設定される。
図21は、ステップS1514〜S1527を3回実行し、ステップS1518でNoと判定された(ジョブの3ページ目(全ページ)の処理が完了した)時点でのVDPシステムの内部状態の一例を示す図である。この場合、変数recordNoの値として「3」が使用される。
枠1003に対する処理は、図19及び図20を用いて説明した処理と略同様であるが、ステップS1521で取得されるレコード情報が、図19及び図20を用いて説明したレコード情報と異なる。すなわち、ここでは、図11のレコード情報のうち、レコード番号が「3」(recordNo=3)であるレコード情報が取得される。尚、2210は、枠1003に対するコンテンツデータ516を保持するための配列contentData[2]を示す。また、709fは、コンテンツデータ516のサムネイルデータであり、2225は、そのサムネイルデータ709fのファイル名である。また、2244は、そのコンテンツデータ516に対するキャッシュIDであり、2245は、そのコンテンツデータ516のコンテンツIDであり、2246は、そのコンテンツデータ516の内容である。
枠1005に対する処理も、図19及び図20を用いて説明した処理と略同様であるが、ステップS1521で取得されるレコード情報が、図19及び図20を用いて説明したレコード情報と異なる。すなわち、ここでは、図11のレコード情報のうち、レコード番号が「3」(recordNo=3)であるレコード情報が取得される。また、「コンテンツ参照」に示される「\\Share\img\car.jpg」に対するキャッシュID、コンテンツID、コンテンツデータ、及びラスタデータは、キャッシュDB510に既に存在している。すなわち、キャッシュDB510には、「\\Share\img\car.jpg」に対するキャッシュID2030、コンテンツID2031、コンテンツデータ/ラスタデータ2032が既に存在している。したがって、「コンテンツ参照」に示される「\\Share\img\car.jpg」に対するキャッシュID、コンテンツID、コンテンツデータ、及びラスタデータは、新たに作成されない。
<生成されるPPMLファイル>
図22は、図15−2のステップS1528で生成されるPPMLデータファイル702の一例を示す図である。尚、図22の左側にある3桁の数字は説明用に付加した行番号であるので、実際のPPMLデータファイル702の記述には含まれない。
前述したように、図11に示したCUSTOMERテーブル1100には、レコード情報が3つ含まれている。したがって、図11に示したCUSTOMERテーブル1100の例では、ステップS15288は3回実行される。
ステップS1528を1回実行したときのVDPシステムの内部状態は、図19に示す状態である。1回目のステップS1528で行番号001〜041(1行目〜41行目)を作成する。ステップS1528を2回実行したときのVDPシステムの内部状態は、図20に示す状態である。2回目のステップS1528で行番号042〜060(42行目〜60行目)を作成する。ステップS1528を3回実行したときのVDPシステムの内部状態は、図21に示す状態である。3回目のステップS1528で行番号061〜079(61行目〜79行目)を作成する。また、行番号080〜082(80行目〜82行目)は、ステップS1529でVDPジョブファイル518が作成される直前に追加される。
行番号001(1行目)には、XML宣言(XML Declaration)が記述されている。ここでは、PPMLデータファイル702がXML 1.0仕様にしたがって記述されていることを示す。
行番号002(2行目)には、ルート要素としての「<PPML>要素」の開始タグが記述されている。ここでは、PPML2.1仕様に従い、標準のXML名前空間として「urn://www.podi.org/ppml/ppml2」を指定している。また、本実施形態で使用される拡張記述用のXML名前空間として"ext"という接頭辞と「http://xxx.invalid/ppml2-ext」という名前空間URIとを指定している。ここで「http://xxx.invalid/ppml2-ext」は例示のためのもので、実在のURIではない。
行番号003(3行目)には、ジョブを示すための「<JOB>要素」の開始タグが記述されている。行番号004(4行目)には、文書を示すための「<DOCUMENT>要素」の開始タグが記述されている。PPMLデータファイル702には、ジョブと文書とを夫々複数格納することが可能だが、図22に示す例では、どちらも1つずつ格納するものとする。
行番号005〜014(5〜14行目)には、「枠1002に対するコンテンツデータ516を保持するための配列contentData[1]1909(図18を参照)」に対応するオブジェクトを参照するための再利用可能オブジェクトが定義されている。
行番号005(5行目)には、再利用可能オブジェクトの定義を開始するための「<REUSABLE_OBJECT>要素」の開始タグが記述されている。
行番号006(6行目)には、参照される再利用オブジェクトを定義するための「<OBJECT>要素」の開始タグである。属性のPositionは、再利用可能オブジェクトが参照されたときの描画位置からのオフセットを表わす。オフセットは、1/72インチ単位で行われる。
行番号007〜009(7〜9行目)には、再利用可能オブジェクトとなるコンテンツデータの位置を指定するための「<SOURCE>要素」及び「<EXTERNAL_DATA>要素」が記述されている。「<SOURCE>要素」のFormat属性は、このコンテンツデータのフォーマットを指定するものである。「<SOURCE>要素」のDimension属性は、このコンテンツデータが参照されるときの描画サイズを表わす。
「<EXTERNAL_DATA>要素」のSrc属性は、コンテンツデータの格納場所を指定するものである。ここでは、「<EXTERNAL_DATA>要素」のSrc属性として、配列contentData[1]1909に示す「contentData[1].fileName」の内容が記述されている。「<EXTERNAL_DATA>要素」のisProxy属性は、プロキシデータ513か否かを指定するためのものである。ここでは、「<EXTERNAL_DATA>要素」のisProxy属性として、配列contentData[1]1909に示す「contentData[1].isProxy」の内容が記述されている。「<EXTERNAL_DATA>要素」のcacheId属性は、キャッシュID523を指定するためのものである。ここでは、配列contentData[1]1909に示す「contentData[1].cacheId」の内容が記述されている。「<EXTERNAL_DATA>要素」のisProxy属性及びcacheId属性は、本実施形態により拡張された仕様である。このため、「<EXTERNAL_DATA>要素」のisProxy属性及びcacheId属性として、ext接頭辞で別の名前空間が指定される。
行番号010(10行目)には、「<OBJECT>要素」の終了タグが記述されている。この終了タグは、行番号006(6行目)に記述されている開始タグに対応している。
行番号011〜013(11〜13行目)には、再利用可能オブジェクトの参照方法を定義するための「<OCCURRENCE_LIST>要素」及び「<OCCURRENCE>要素」が記述されている。「<OCCURRENCE>要素」のName属性は、再利用可能オブジェクトを参照する場合に指定される名前を定義するためのものである。ここでは、contentData[4].fileName(00010004.jpg)2019のうち拡張子を除いた部分を使用して、「<OCCURRENCE>要素」のName属性が記述される。「<OCCURRENCE>要素」のScope属性は、再利用可能オブジェクトを参照する際の有効範囲を指定するためのものであり、ここでは有効範囲が、文書内であることが記述されている。
行番号014(14行目)には、「<REUSABLE_OBJECT>要素」の終了タグが記述されている。この終了タグは、行番号005(5行目)に記述されている開始タグに対応している。
行番号015〜024(15〜24行目)には、「枠1004に対するコンテンツデータ516を保持するための配列contentData[3]1910(図18を参照)」に対応するオブジェクトを参照するための再利用可能オブジェクトが定義されている。行番号015〜024(15〜24行目)の記述方法は、行番号005〜014(5〜14行目)と同様である。
行番号025〜043(25〜43行目)には、1ページ目を印刷出力するためのページの定義がなされる。
行番号025(25行目)には、コメントが記述されている。
行番号026(26行目)には、ページの定義を開始するための「<PAGE>要素」の開始タグが記述されている。
行番号027〜029(27〜29行目)には、枠1002を描画するための「<MARK>要素」及び「<OCCURRENCE_REF>要素」が記述されている。「<MARK>要素」のPosition属性で、枠1002の左下座標が指定される。図19に示すように、枠1002に対応するオブジェクトは、配列contentData[1]1909で特定されるものであり、このオブジェクトは再利用可能オブジェクトである。したがって、「<OCCURRENCE_REF>要素」のRef属性で、行番号005〜014(5〜14行目)で定義された再利用可能オブジェクトを参照する記述がなされている。
行番号030〜034(30〜34行目)には、枠1003を描画するための「<OBJECT>要素」、「<SOURCE>要素」、及び「<EXTERNAL_DATA>要素」が記述されている。「<OBJECT>要素」のPosition属性で、枠1003の左下座標が指定される。図19に示すように、枠1003に対応するオブジェクトは、配列contentData[2]2010であり、このオブジェクトは再利用可能オブジェクトではない。したがって、「<SOURCE>要素」及び「<EXTERNAL_DATA>要素」を使ってコンテンツデータが直接指定される。「<SOURCE>要素」のFormat属性には、このコンテンツデータのフォーマットが指定され、「<SOURCE>要素」のDimension属性には、このコンテンツデータが参照されるときの描画サイズが記述されている。
「<EXTERNAL_DATA>要素」のSrc属性は、コンテンツデータの格納場所を指定するためのものである。ここでは、contentData[2].fileNameの内容である「00010002.jpg」2017が記述されている。「<EXTERNAL_DATA>要素」のisProxy属性は、プロキシデータか否かを指定するためのものである。ここでは、contentData[2].isProxyの内容である「TRUE」が記述されている。「<EXTERNAL_DATA>要素」のcacheId属性は、キャッシュIDを指定するためのものである。ここでは、contentData[2].cacheIdの内容が記述されている。「<EXTERNAL_DATA>要素」のisProxy属性及びcacheId属性は、本実施形態により拡張された仕様である。このため、「<EXTERNAL_DATA>要素」のisProxy属性及びcacheId属性として、ext接頭辞で別の名前空間が指定されている。
行番号035〜037(35〜37行目)には、枠1004を描画するための「<MARK>要素及び「<OCCURRENCE_REF>要素」が記述されている。「<MARK>要素」のPosition属性で、枠1004の左下座標が指定される。図19に示すように、枠1004に対応するオブジェクトは、配列contentData[3]1910で特定されるものであり、このオブジェクトは再利用可能オブジェクトである。したがって、「<OCCURRENCE_REF>要素」のRef属性で、行番号015〜024(15〜24行目)で定義された再利用可能オブジェクトを参照する記述がなされている。
行番号038〜042(38〜42行目)には、枠1005を描画するための「<OBJECT>要素」、「<SOURCE>要素」、及び「<EXTERNAL_DATA>要素」が記述されている。「<OBJECT>要素」のPosition属性で、枠1005の左下座標が指定される。図19に示すように、枠1005に対応するオブジェクトは、配列contentData[4]2012であり、このオブジェクトは再利用可能オブジェクトではない。したがって、「<SOURCE>要素及び「<EXTERNAL_DATA>要素」を使ってコンテンツデータが直接指定される。「<SOURCE>要素」のFormat属性には、このコンテンツデータのフォーマットが指定され、「<SOURCE>要素」のDimension属性には、このコンテンツデータが参照されるときの描画サイズが記述されている。
「<EXTERNAL_DATA>要素」のSrc属性は、コンテンツデータの格納場所を指定するためのものである。ここでは、contentData[4].fileNameの内容である「00010004.jpg」が記述されている。「<EXTERNAL_DATA>要素」のisProxy属性は、プロキシデータか否かを指定するためのものである。ここでは、contentData[4].isProxyの内容である「TRUE」が記述されている。「<EXTERNAL_DATA>要素」のcacheId属性は、キャッシュIDを指定するためのものである。ここでは、contentData[4].cacheIdの内容が記述されている。「<EXTERNAL_DATA>要素」のisProxy属性及びcacheId属性は、本実施形態により拡張された仕様である。このため、「<EXTERNAL_DATA>要素」のisProxy属性及びcacheId属性として、ext接頭辞で別の名前空間が指定されている。
行番号043(43行目)には、「<PAGE>要素」の終了タグが記述されている。この終了タグは、行番号026(26行目)に記述されている開始タグに対応している。
行番号044〜062(44〜62行目)には、2ページ目を印刷出力するためのページの定義がなされる。図20に示したVDPシステムの内部状態を参照して記述される点を除いては、行番号025〜043(25〜43行目)の1ページ目の定義と同様にして記述される。枠1005に対するコンテンツデータ516を保持するための配列contentData[4]2112の内容に従って、行番号059(59行目)の「<EXTERNAL_DATA>要素」のisProxy拡張属性として「FALSE」が記述されている。
行番号063〜081(63〜81行目)には、3ページ目を印刷出力するためのページの定義がなされている。図21に示したVDPシステムの内部状態を参照して記述される点を除いては、行番号025〜043(25〜43行目)の1ページ目の定義と同様にして記述される。
行番号082(82行目)には、「<DOCUMENT>要素」の終了タグが記述されている。この終了タグは、行番号004(4行目)に記述されている開始タグに対応している。
行番号083(83行目)には、「<JOB>要素」の終了タグが記述されている。この終了タグは、行番号003(3行目)に記述されている開始タグに対応している。
行番号084(84行目)には、ルート要素としての「<PPML>要素」の終了タグが記述されている。この終了タグは、行番号002(2行目)に記述されている開始タグに対応している。
<RIP動作>
次に、図23のフローチャートを参照しながら、図15−2のステップS1529でVDPジョブファイル518が送信された場合のRIPプログラム508における動作の一例を説明する。VDPジョブファイル518には、図21の配列contentData[1]〜[4]1909、1910、2210、2212(一時的なディレクトリtemDir)内の全てのファイル)と、図22に示したPPMLデータファイル702とが含まれる。VDPジョブファイル518が送信されたときのキャッシュDB510の内容は、図21に示した通りである。尚、図23のフローチャートは、MFP制御部(CPU)301が、例えば外部記憶装置305に格納されたプログラムをRAM302に展開して実行することにより実現される。
ステップS1801〜S1804は、再利用可能オブジェクトの定義を処理するためのループ処理である。
まず、ステップS1801において、RIPプログラム508は、PPMLデータファイル702中の再利用可能オブジェクトの定義に対する処理が全て終了したか否かを判定する。この判定の結果、PPMLデータファイル702中の再利用可能オブジェクトの定義に対する処理が全て終了した場合には、後述するステップS1806に進む。一方、PPMLデータファイル702中の再利用可能オブジェクトの定義に対する処理が全て終了していなければステップS1802に進む。
ステップS1802において、RIPプログラム508は、処理対象とすべき再利用可能オブジェクトの定義を1つ取得する。具体的にRIPプログラム508は、PPMLデータファイル702中の再利用可能オブジェクトの定義をRAM302に書き込む。
次に、ステップS1803において、RIPプログラム508は、ステップS1802で取得した再利用可能オブジェクトに対応するプロキシデータ513がVDPジョブファイル518に含まれているか否かを判定する。具体的にRIPプログラム508は、PPMLデータファイル702中の「<EXTERNAL_DATA>要素」の「<isProxy>拡張属性」の値が「TRUE」であれば、プロキシデータ513があると判定する。この判定の結果、VDPジョブファイル518にプロキシデータ513が含まれている場合には、ステップS1804に進む。一方、VDPジョブファイル518にプロキシデータ513が含まれていない場合には、ステップS1805に進む。図22に示したPPMLデータファイル702の例では、行番号005〜014(5〜14行目)の再利用可能オブジェクトの定義において、「<EXTERNAL_DATA>要素」の「<isProxy>拡張属性」の値は「TRUE」である。更に、行番号015〜024(15〜24行目)の再利用可能オブジェクトの定義においても、「<EXTERNAL_DATA>要素」の「<isProxy>拡張属性」の値は「TRUE」である。
ステップS1804に進んだ場合、再利用可能オブジェクトのコンテンツデータ516及びラスタデータ507は、既にキャッシュDB510に格納されているはずである。したがって、RIPプログラム508は、そのラスタデータ507を取得する。具体的にRIPプログラム508は、PPMLデータファイル702中の「<EXTERNAL_DATA>要素」の「<cacheId 拡張属性」の値をキーとして、ラスタデータ507の取得をキャッシュマネージャ509に依頼する。キャッシュマネージャ509は、該当するラスタデータ507をキャッシュDB510から読み出し、RIPプログラム508に送信する。このステップS1804の処理では、通信経路525、529、530、526が使用される。こうしてラスタデータ507を取得すると、RIPプログラム508は、取得したラスタデータ507をRAM302に用意した連想配列reusableObject[]に格納する。連想配列のキーは、「<OCCURRENCE>要素」の「Name属性」の値である。
図22に示したPPMLデータファイル702の例では、行番号005〜014(5〜14行目)の再利用可能オブジェクトの定義において、「cacheId="C55AACBD-66EE-4dc6-974A-2BAC781D0D31"」が記述される。したがって、キャッシュID1915が該当するキャッシュIDとなる。よって、RIPプログラム508は、コンテンツデータ1917に対応するラスタデータを取得する。そして、RIPプログラム508は、「Name="00000001"」をキーとして、取得したラスタデータを、連想配列reusableObject[]に格納する。
行番号015〜024(15〜24行目)の再利用可能オブジェクトの定義において、「cacheId="1E3B90CC-A325-4d68-AE61-050C7166E14F"」が記述されている。したがって、キャッシュID1918が該当するキャッシュIDとなる。よって、RIPプログラム508は、コンテンツデータ1920に対応するラスタデータを取得する。そして、RIPプログラム508は、「Name="00000003"」をキーとして、取得したラスタデータを、連想配列reusableObject[]に格納する。そして、ステップS1801に戻る。
一方、ステップS1805に進んだ場合には、再利用可能オブジェクトのコンテンツデータ516は、キャッシュDB510に格納されていない。したがって、RIPプログラム508は、VDPジョブファイル518からコンテンツデータ516を取得して、ラスタライズすることでラスタデータ507を生成する。そして、RIPプログラム508は、生成したラスタデータ507をRAM302に用意した連想配列reusableObject[]に格納する。連想配列のキーは、「<OCCURRENCE>要素」のName属性の値である。そして、ステップS1801に戻る。
前記ステップS1801において、PPMLデータファイル702中の再利用可能オブジェクトの定義に対する処理が全て終了した場合には、ステップS1806に進む。そして、RIPプログラム508は、1ページ分の印刷データをプリンタエンジンに送るための印刷データ用メモリpageDataをRAM302に用意する。
ステップS1807〜S1817は、二重ループ処理になっている。外側のループであるステップS1807〜S1817は、各ページを印刷するための処理であり、ステップS1807で、その外側のループの終了判定を行う。内側のループであるステップS1809〜S1816は、ページ内の各オブジェクトを、印刷データ用メモリpageDataに描画するための処理であり、ステップS1808で、その内側のループの終了判定を行う。
ステップS1807において、RIPプログラム508は、PPMLデータファイル702中の全ての「<PAGE>要素」の処理が終わったか否かを判定する。具体的にRIPプログラム508は、PPMLデータファイル702中の「<DOCUMENT>要素」の終了タグである</DOCUMENT>が見つかったら、全ての「<PAGE>要素」の処理が終了したと判定する。この判定の結果、全ての「<PAGE>要素」の処理が終了した場合には、処理を終了する。一方、全ての「<PAGE>要素」の処理が終了していない場合には、ステップS1808に進む。
ステップS1808において、RIPプログラム508は、PPMLデータファイル702中の全ての「<PAGE>要素」内の全てのオブジェクトに対する処理が終了したか否かを判定する。具体的に、RIPプログラム508は、PPMLデータファイル702中の「<PAGE>要素」の終了タグである</PAGE>が見つかったら、全てのオブジェクトの処理が終了したと判定する。この判定の結果、全ての「<PAGE>要素」内の全てのオブジェクトに対する処理が終了した場合には、後述するステップS1816に進む。一方、全ての「<PAGE>要素」内の全てのオブジェクトに対する処理が終了した場合には、ステップS1809に進む。
ステップS1809において、RIPプログラム508は、処理対象であるオブジェクトを取得する。具体的にRIPプログラム508は、PPMLデータファイル702中の「<PAGE>要素」内の次のオブジェクトをRAM302に書き込む。
次に、ステップS1810において、RIPプログラム508は、ステップS1809で書き込んだオブジェクトが、再利用可能オブジェクトか否かを判定する。具体的にRIPプログラム508は、ステップS1809で書き込んだオブジェクトが「<MARK>要素」であれば、そのオブジェクトは、再利用可能オブジェクトであると判定して、後述するステップS1815に進む。一方、ステップS1809で書き込んだオブジェクトが「<MARK>要素」でなければ、ステップS1811に進む。図22に示したPPMLデータファイル702の例では、各ページとも1つ目のオブジェクトと3つ目のオブジェクトが再利用可能オブジェクトであると判定される。
ステップS1811において、RIPプログラム508は、ステップS1808で取得したオブジェクトに対応するプロキシデータ513がVDPジョブファイル514に含まれているか否かを判定する。具体的にRIPプログラム508は、PPMLデータファイル702中の「<EXTERNAL_DATA>要素」の「<isProxy>拡張属性」の値が「TRUE」であれば、プロキシデータ513があると判定する。この判定の結果、VDPジョブファイル518にプロキシデータ513が含まれている場合には、ステップS1812に進む。一方、VDPジョブファイル518にプロキシデータ513が含まれていない場合には、後述するステップS1814に進む。
図22に示したPPMLデータファイル702の例では、行番号005〜014(5〜14行目)の再利用可能オブジェクトの定義において、「<EXTERNAL_DATA>要素」の「<isProxy>拡張属性」の値は「TRUE」である。また、行番号015〜024(15〜24行目)の再利用可能オブジェクトの定義でも、「<EXTERNAL_DATA>要素」の「<isProxy>拡張属性」の値は「TRUE」である。図22に示したPPMLデータファイル702では、1ページ目を処理しているときは、2つ目のオブジェクト(30〜34行目)も4つ目のオブジェクト(38〜42行目)もプロキシデータ513であると判定される。また、2ページ目を処理しているときは、2つ目のオブジェクト(49行〜53行目)は、プロキシデータ513であると判定されるが、4つ目のオブジェクト(57〜61行目)は、プロキシデータ513ではないと判定される。また、3ページ目を処理しているときは、2つ目のオブジェクト(68〜72行目)も、4つ目のオブジェクト(76〜80行目)もプロキシデータ513であると判定される。
ステップS1812に進むと、ステップS1809でRAM302に書き込んだオブジェクトのコンテンツデータ516及びラスタデータ507が既にキャッシュDB510に格納されている。したがって、ステップS1812において、RIPプログラム508は、そのラスタデータ507を取得する。具体的にRIPプログラム508は、PPMLデータファイル702中の「<EXTERNAL_DATA>要素」の「<cacheId>拡張属性」の値をキーとして、ラスタデータ507の取得をキャッシュマネージャ509に依頼する。キャッシュマネージャ509は、該当するラスタデータ507をキャッシュDB510から読み出し、RIPプログラム508に送信する。このステップS1812の処理では、通信経路525、529、530、526が使用される。こうしてラスタデータ507を取得すると、RIPプログラム508は、取得したラスタデータ507をRAM302に用意した変数dataに格納する。連想配列のキーは、「<OCCURRENCE>要素」の「Name属性」の値である。また、RIPプログラム508は、PPMLデータファイル702中の「<OBJECT>要素」の「Position属性」の値を、RAM302に用意した変数positionに格納する。
図22に示したPPMLデータファイル702の場合、行番号030〜034(30〜34行目)では、「<EXTERNAL_DATA>要素」の「<cacheId>拡張属性」の値として、「D8BB50FE-44E7-41ea-A658-99E77AF3235A」が記述されている。したがって、キャッシュID2027が該当するキャッシュIDとなる。よって、RIPプログラム508は、コンテンツデータ2029に対応するラスタデータを取得し、変数dataに格納する。
次に、ステップS1813において、RIPプログラム508は、変数dataに格納したラスタデータを印刷データ用メモリpageDataの座標positionの位置に上書きコピーする。そして、ステップS1808に戻る。
前記ステップS1811において、ステップS1808で取得したオブジェクトに対応するプロキシデータ513がVDPジョブファイル514に含まれていないと判定された場合には、ステップS1814に進む。ステップS1814に進んだ場合、ステップS1809で書き込んだオブジェクトのコンテンツデータ516が、キャッシュDB510に格納されていない。したがって、ステップS1814において、RIPプログラム508は、VDPジョブファイル518からコンテンツデータ516を取得してラスタライズ処理を実行することでラスタデータ507を生成する。そして、RIPプログラム508は、生成したラスタデータ507を、RAM302に用意した変数dataに格納する。また、RIPプログラム508は、PPMLデータファイル702中の「<OBJECT>要素」の「Position属性」の値を、RAM302に用意した変数positionに格納する。そして、前述したステップS1813に進む。
図22に示したPPMLデータファイル702の場合、行番号057〜061(57〜61行目)においては、「<EXTERNAL_DATA>要素」の「Src属性」の値として"00020004.jpg"が記述されている。したがって、キャッシュID2030が該当するキャッシュIDとなる。よって、RIPプログラム508は、VDPジョブファイル518からコンテンツデータ516を取得してラスタライズ処理を実行することでラスタデータ507を生成する。
前記ステップS1810において、ステップS1809で書き込んだオブジェクトが、再利用可能オブジェクトであると判定された場合には、ステップS1815に進む。ステップS1815に進んだ場合、ラスタデータ507は既に連想配列reusableObject[]に用意されている。したがって、RIPプログラム508は、PPMLデータファイル702中の「<OCCURRENCE_REF>要素」の「Ref属性」に指定された名前をキーとして連想配列reusableObject[]からラスタデータ507を取得する。そして、RIPプログラム508は、取得したラスタデータ507をRAM302に用意した変数dataに格納する。また、RIPプログラム508は、PPMLデータファイル702中の「<MARK>要素」の「Position属性」の値を、RAM302に用意した変数positionに格納する。
図22に示したPPMLデータファイル702の場合、RIPプログラム508は、行番号027〜029(27〜29行目)における「<OCCURRENCE_REF>要素」の「Ref属性」の値"00000001"をキーとして連想配列reusableObject[]にアクセスする。そして、RIPプログラム508は、行番号005〜014(5〜14行目)で定義された再利用可能オブジェクトに対して、ステップS1804で用意されたラスタデータ507を取得する。
前記ステップS1808において、、PPMLデータファイル702中の全ての「<PAGE>要素」内の全てのオブジェクトに対する処理が終了した場合には、ステップS1816に進む。そして、RIPプログラム508は、印刷データ用メモリpageDataの内容をプリンタエンジン307に送信して印刷処理を行う。
図24、図25、及び図26に、以上のようにして得られた1〜3ページ目の印刷結果の一例を夫々示す。
以上のように本実施形態では、VDPクライアント101は、VDPジョブファイル518を生成する前に、コンテンツデータ516をVDPプリンタ102に送信しておく。そして、VDPクライアント101は、そのコンテンツデータ516を識別するキャッシュID523を、VDPプリンタ102から取得して、コンテンツデータ516と対応付けて記憶しておく。VDPクライアント101は、キャッシュID523を含むプロキシデータ513をコンテンツデータ516の代わりに用いて、VDPジョブファイル518を生成してVDPプリンタ102に送信する。このように、オリジナルのコンテンツデータ516ではなく、そのコンテンツデータ516よりもデータ量の小さい代理データを用いてVDPジョブファイル518を生成するので、VDPジョブファイル518のデータ量を低減することができる。よって、コンテンツデータ516を差し込んで画像を形成する際のスループットを従来よりも向上させることができる。
また、本実施形態では、VDPプリンタ102は、VDPクライアント101からコンテンツデータ516を受け取ると、そのコンテンツデータ516のキャッシュID523を生成する。更に、VDPプリンタ102は、そのコンテンツデータ516をラスタライズしてラスタデータ507を生成する。そして、VDPプリンタ102は、それらキャッシュID523と、コンテンツデータ516と、ラスタデータ507とを対応付けてキャシュDB510に記憶する。その後、VDPクライアント101から送信されたVDPジョブファイル518にプロキシデータ513がある場合、VDPプリンタ102は、そのプロキシデータ513に含まれているキャッシュID523に対応するラスタデータ507を用いて印刷処理を行う。したがって、VDPジョブファイル518の取得時に行うラスタライズ処理の一部を省略することができ、印刷処理時間を短縮することができる。
また、本実施形態では、キャッシュID523と、そのキャッシュID523で識別されるコンテンツデータ516と、そのコンテンツデータ516サムネイルデータ709とを対応付けて、外部記憶装置204に記憶するようにした。したがって、VDPアプリケーションプログラム504から取得要求のあったコンテンツデータ516に関するキャッシュID523が既に記憶されている場合には、そのキャッシュIDの取得処理を省略することができる。
尚、本実施形態では、図1において、VDPクライアント101、VDPプリンタ102、及びDBサーバ103が、ネットワーク104を介して相互に接続されるようにした。しかしながら、VDPクライアント101、VDPプリンタ102、及びDBサーバ103の接続形態は、これ以外のものであってもよい。例えば、VDPクライアント101とVDPプリンタ102とが直接接続されるようにしてもよい。また、VDPクライアント101とVDPプリンタ102とが接続されておらず、可搬メディア(USBメモリやリムーバブルHDD等)を使って、VDPジョブファイル518を、VDPクライアント101からVDPプリンタ102に人手で運搬してもよい。
また、本実施形態では、図2において、プログラムがRAM202、302に格納されるとしたが、プログラムの格納場所はこれに限るものではない。例えば、プログラムを外部記憶装置204、305から読み出して実行するようにしてもよいし、ネットワークインタフェース203、303を介して受信してプログラムを実行するようにしてもよい。また、図2及び図3には示していないが、ROM等の読み出し専用の内部記憶媒体からプログラムを読み出して実行するようにしてもよい。
また、VDPクライアント101及びDBサーバ103は、キーボード206やポインティングデバイス207の代わりに、或いはそれらに加えて、音声入力等の他の入力装置を備えることもできる。また、ディスプレイ205、キーボード206、及びポインティングデバイス207を、他のコンピュータ装置と共有することもできる。
VDPプリンタ102において、RIP処理を行う装置とプリンタエンジンによる出力を行う装置とを別の装置として分離してもよい。
また、本実施形態では、図5においてVDPアプリケーションプログラム504が単体のプログラムであるとしたが、VDPアプリケーションプログラム504は単体のプログラムに限るものではない。例えば、VDPアプリケーションプログラム504は、Adobe PhotoShop(登録商標)プラグイン、Adobe Illustrator(登録商標)プラグイン、Adobe InDesign(登録商標)プラグイン、Adobe PDF(登録商標)プラグインとして実行されるようなサブプログラムであってもよい。また、VDPアプリケーションプログラム504は、Microsoft Word(登録商標)アドオンとして実行されるようなサブプログラムであってもよい。
また、DBブローカープログラム505は、VDPクライアント501に存在するとしたが、これに限るものではない。例えば、DBブローカープログラム505は、DBサーバ103又はVDPプリンタ102に存在していてもよい。また、全く別のコンピュータ装置にDBブローカープログラム505が存在してもよい。
また、VDPアプリケーションプログラム504、DBブローカープログラム505、コンテンツDB506、RIPプログラム508、及びキャッシュマネージャ509間で、各種のデータを直接送受信している。しかしながら、ワークフローマネージャや、代理サーバ等のモジュールを介して各種のデータを送受信する形態としてもよい。特にVDPジョブファイル518に関しては、VDPクライアント101の外部記憶装置204にホットフォルダを設け、RIPプログラム508が、そのホットフォルダの変化を監視するようにしてもよい。このようにすれば、RIPプログラム508が、そのホットフォルダに置かれたVDPジョブファイル518を能動的に取得することができる。尚、前記において、各種のデータとは、例えば、ラスタデータ507、プロキシデータ513、コンテンツデータ516、VDPジョブファイル518、キャッシュID523、及びラスタデータ507である。
また、入力されたVDPジョブファイル518を管理するためのジョブマネージャや、RIPプログラム508の処理を管理するためのRIPマネージャをVDPプリンタ503に設けるようにしてもよい。この場合、RIPプログラム508は、ラスタライズ処理のみを行うように構成されている場合が多いが、そのような構成においても、前述した本実施形態のシステムを適用できることは明らかである。
また、本実施形態では、図7において、プロキシデータ513が、キャッシュID523とサムネイルデータ709とを含む構成とした。しかしながら、サムネイルデータ709は、検査、プレビュー、試し印刷等の処理ができるようにするためにVDPジョブファイル518に含めているものである。したがって、それらの処理が不要であればサムネイルデータ709を省略することができる。また、キャッシュID523は、コンテンツIDから検索することもできるので、キャッシュID523の代わりにコンテンツIDを使用してもよい。また、キャッシュID523の生成にGUIDを使用したが、システム内での一意性が保証される方法であれば、他の方法でキャッシュID523を生成しても構わない。また、コンテンツID523の生成にMD5を使用したが、同一のコンテンツからは同一のコンテンツIDが生成され、異なるコンテンツからは異なるコンテンツIDが生成されれば、どのような方法でコンテンツID523を生成してもよい。すなわち、コンテンツID523の衝突がない(或いは無視できる程度に限りなくコンテンツID523の衝突が少ない)方法であれば、どのような方法でコンテンツID523を生成してもよい。
また、本実施形態では、図10において、メニューウィンドウ1006と、メインウィンドウ1001とが別のウィンドウとなっているが、必ずしもこのようにする必要はない。例えば、Windows(登録商標)のアプリケーションで行われているように、メインウィンドウ1001の上部にメニューバーやツールバーを設けてもよい。また、ユーザがメニューにアクセスすることが可能な方法であれば他の方法を用いてメニューの表示を行ってもよい。また、図10に示したメニューの項目もあくまでも一例である。
また、メインウィンドウ1001に作成した枠1002〜1005を最小単位としてコンテンツデータを配置したが、必ずしもこのようにする必要はない。例えば、枠1002〜1005に入力されたテキストの一部を可変データとして枠ルールを設定するようにしてもよい。また、枠1002〜1005の位置・大きさ・変形方法・書式・属性・可視性等を可変データとして枠ルールを設定するようにしてもよい。枠1002〜1005に限らず、VDP文書に存在するレイヤーやVDP文書そのものの属性等を可変データとしてルールを設定してもよい。このようにVDP文書のあらゆる要素を可変データとしてルールを設定することが可能であるが、このような場合でも、前述した本実施形態のシステムに適用することが可能である。
また、本実施形態では、テキストボックス1007で指定されたCUSTOMERテーブル1100にVDPアプリケーションプログラム504が直接アクセスを行うようにした。しかしながら、このCUSTOMERテーブル1100を、外部DB(例えばコンテンツDB506)に保存するようにしてもよい。この場合、DBブローカー505が、VDPアプリケーションプログラム504からCUSTOMERテーブル1100へのアクセスを仲介することになる。
また、本実施形態では、図12の枠管理テーブル1200に示したように、枠ルール文法を定義したが、必ずしも図12に示した枠ルール文法を使用する必要はなく、任意の枠ルール文法を定義することが可能である。
また、本実施形態では、UNCの記述に基づいてコンテンツデータ516を参照するようにしたが、必ずしもこのようにする必要はない。例えば、コンテンツデータ516を、URI、URL、URN等の記述に基づいて参照してもよいし、特定の環境に依存した方法で参照してもよい。また、何らかのデータベースを参照するような記述(SQL文による指定等)や、何らかのプログラムをローカル又はリモートで呼び出すための記述等に基づいて、コンテンツデータ516を参照してもよい。つまり、コンテンツデータ516が参照できれば、コンテンツデータ516を参照するための記述方法は任意である。また、ReusableObject列1203に格納されるフラグを、枠管理テーブル1200に持たせるのではなく、毎回更新するようにしてもよい。
また、本実施形態では、キャッシュデータとしてラスタデータ507を使用したが、デバイス(プリンタ)に依存しない中間言語データをキャッシュデータとして使用してもよい。また、中間言語データとラスタデータとの両方をキャッシュデータとして持つようにしてもよい。
また、本実施形態では、図16において、コンテンツデータ516をキャッシュするか否かを判定するスレッショルド値(閾値)としてコンテンツデータ516のサイズ(容量)を使用したが、必ずしもこのようにする必要はない。例えば、コンテンツデータ516の種別、ラスタライズ処理時の複雑度、又はキャッシュDB510の残り容量等、任意の指標(条件)を用いて、スレッショルド値を決定することが可能である。
また、本実施形態では、サムネイルデータ709を、DBブローカー505で作成するようにしたが、必ずしもこのようにする必要はない。例えば、キャッシュマネージャプログラム509が、RIPプログラム508の機能を利用してサムネイルデータ709を作成してもよい。このようにした場合、キャッシュマネージャプログラム509は、キャッシュID523に加えてサムネイルデータ709を、通信経路104eを介してDBブローカー505に返すこともできる。このように、サムネイルデータ709もキャッシュDB510に保存しておくことで、同一のコンテンツデータ516に対するサムネイルデータ709もキャッシュしておくことができる。
また、本実施形態では、文書フォーマット技術としてPPML技術を使用したが、文書フォーマット技術は、PPML技術に限定されるものではない。例えば、PPML/VDX、PPML Template、VIPP、FreeForm、VPS等の文書フォーマット技術を使用してもよい。
また、本実施形態では、プロキシデータ513に、キャッシュID523と、サムネイルデータ709とを含ませるようにした。その際、サムネイルデータ709をVDPジョブファイル518に格納し、XML名前空間を使用した拡張属性として、キャッシュID523をPPMLデータファイル702に記述した。しかしながら、キャッシュID523を、VDPジョブファイル518内の特定のファイルに記述したり、サムネイルデータ709の中に直接埋め込んだりすることもできる。
(本発明の他の実施形態)
前述した本発明の実施形態におけるデータ処理装置、画像形性装置を構成する各手段、並びにデータ処理方法、画像形成方法の各ステップは、コンピュータのRAMやROMなどに記憶されたプログラムが動作することによって実現できる。このプログラム及び前記プログラムを記録したコンピュータ読み取り可能な記録媒体は本発明に含まれる。
また、本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。
尚、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラム(実施形態では図8、図9に示すシーケンス、及び図15〜図17、図23に示すフローチャートに対応したプログラム)を、システムあるいは装置に直接、あるいは遠隔から供給する。そして、そのシステムあるいは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合を含む。
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であってもよい。
プログラムを供給するための記録媒体としては、例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RWなどがある。また、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM、DVD−R)などもある。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
なお、前述した各実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。