(57)【要約】【課題】レコード毎にレイアウトを変えることができるマルチレコード対応の自動レイアウト機能をもった文書処理装置及び方法を提供する。【解決手段】テンプレートに設定されたフローエリアに定義されている条件式に基づいて、コンテンツデータを流し込むべきサブテンプレートを決定し、該コンテンツデータが流し込まれたサブテンプレートをフローエリア内に配置できない場合、所定のフローエリアを有するページを複製する。【選択図】図２２
2006243805.tif 000002
【特許請求の範囲】
【請求項１】
データベースからレイアウトすべきコンテンツデータを抽出するための抽出条件が設定された領域を有するテンプレートのレイアウトをコンテンツデータに応じて動的に変更可能な文書処理装置であって、
前記抽出条件を満たすコンテンツデータを前記データベースから取得する取得手段と、
コンテンツデータを配置するための１または複数のサブテンプレートと各コンテンツデータとを関連づけた関連付け情報から、前記取得手段により取得された各コンテンツデータを配置すべき１または複数のサブテンプレートを特定する特定手段と、
前記特定手段により特定された１または複数のサブテンプレートに対して各コンテンツデータを配置して、前記領域にレイアウトすることにより出力結果を作成する配置手段と
を備えることを特徴とする文書処理装置。
【請求項２】
前記取得手段により取得されたコンテンツデータをサブテンプレート内に配置してレイアウト調整するレイアウト調整手段を有し、
前記レイアウト調整手段は、前記コンテンツデータのデータサイズに応じてレイアウト調整することを特徴とする請求項１に記載の文書処理装置。
【請求項３】
前記サブテンプレートは前記コンテンツデータを入力するための部分表示領域を有し、
前記レイアウト調整手段は、前記コンテンツデータのデータサイズに応じて、前記サブテンプレート内における前記部分表示領域のレイアウト位置および前記部分表示領域のサイズを調整することを特徴とする請求項１または２に記載の文書処理装置。
【請求項４】
前記配置手段は、前記レイアウト調整手段によりレイアウト調整されたレイアウト調整済みのサブテンプレートを前記領域に並べて配置することを特徴とする請求項１乃至３のいずれかに記載の文書処理装置。
【請求項５】
データベースからレイアウトすべきコンテンツデータを抽出するための抽出条件が設定された領域を有するテンプレートにおいて、該コンテンツデータに応じて動的にレイアウトを変更可能な文書処理装置であって、
前記抽出条件を満たすコンテンツデータを前記データベースから取得する取得手段と、
前記取得手段により取得されたコンテンツデータを前記領域に配置することができない場合、前記領域を有するページを新たに生成する生成手段を有することを特徴とする文書処理装置。
【請求項６】
前記生成手段は、前記取得手段により取得されたコンテンツデータが収まるまで前記領域を有するページを繰り返し生成することを特徴とする請求項５に記載の文書処理装置。
【請求項７】
前記生成手段は、前記領域を有する所定のページを複製することを特徴とする請求項５または６に記載の文書処理装置。
【請求項８】
データベースからレイアウトすべきコンテンツデータを抽出するための抽出条件および区切り方法が設定された領域を有するテンプレートのレイアウトをコンテンツデータに応じて動的に変更可能な文書処理装置であって、
前記抽出条件を満たすコンテンツデータを前記データベースから取得する取得手段と、
複数の区切り方法からいずれかの区切り方法を設定する設定手段と、
前記取得手段により取得されたコンテンツデータを前記領域に配置するに際して、前記選択手段により選択されたいずれかの区切り方法に従って文書を区切ってコンテンツデータを配置して文書データを作成する配置手段と
を備えることを特徴とする文書処理装置。
【請求項９】
前記区切り方法には、改文書、改ページ、改行のいずれかが定義されており、
前記配置手段は、前記区切り方法が改文書の場合には、前記取得手段により取得されたコンテンツデータを配置する際に、文書の一単位を完結させる区切り処理を行い、前記区切り情報が改ページの場合には、前記取得手段により取得されたコンテンツデータを配置する際に、ページを改める区切り処理を行い、前記区切り情報が改行の場合には、前記取得手段により取得されたコンテンツデータを配置する際に、行を改める区切り処理を行い、区切り処理ののちに、配置すべきコンテンツデータを前記テンプレートに従って配置することを特徴とする請求項５に記載の文書処理装置。
【請求項１０】
前記テンプレートを作成するテンプレート作成手段をさらに備えることを特徴とする請求項１乃至９のいずれか１項に記載の文書処理装置。
【請求項１１】
前記取得手段により取得されたコンテンツデータを前記領域にレイアウトすることに応じて、前記コンテンツデータをレイアウトした文書データを表示する表示手段または印刷する印刷手段の少なくともいずれかをさらに備えることを特徴とする請求項１乃至１０のいずれか１項に記載の文書処理装置。
【請求項１２】
データベースからレイアウトすべきコンテンツデータを抽出するための抽出条件が設定された領域を有するテンプレートのレイアウトをコンテンツデータに応じて動的に変更可能な文書処理方法であって、
前記抽出条件を満たすコンテンツデータを前記データベースから取得する取得工程と、
コンテンツデータを配置するための１または複数のサブテンプレートと各コンテンツデータとを関連づけた関連付け情報から、前記取得工程により取得された各コンテンツデータを配置すべき１または複数のサブテンプレートを特定する特定工程と、
前記特定工程により特定された１または複数のサブテンプレートに対して各コンテンツデータを配置して、前記領域にレイアウトすることにより出力結果を作成する配置工程と
を備えることを特徴とする文書処理方法。
【請求項１３】
前記取得工程により取得されたコンテンツデータをサブテンプレート内に配置してレイアウト調整するレイアウト調整工程を有し、
前記レイアウト調整工程は、前記コンテンツデータのデータサイズに応じてレイアウト調整することを特徴とする請求項１２に記載の文書処理方法。
【請求項１４】
前記サブテンプレートは前記コンテンツデータを入力するための部分表示領域を有し、
前記レイアウト調整工程は、前記コンテンツデータのデータサイズに応じて、前記サブテンプレート内における前記部分表示領域のレイアウト位置および前記部分表示領域のサイズを調整することを特徴とする請求項１２または１３に記載の文書処理方法。
【請求項１５】
前記配置工程は、前記レイアウト調整工程によりレイアウト調整されたレイアウト調整済みのサブテンプレートを前記領域に並べて配置することを特徴とする請求項１２乃至１４のいずれかに記載の文書処理方法。
【請求項１６】
データベースからレイアウトすべきコンテンツデータを抽出するための抽出条件が設定された領域を有するテンプレートにおいて、該コンテンツデータに応じて動的にレイアウトを変更可能な文書処理方法であって、
前記抽出条件を満たすコンテンツデータを前記データベースから取得する取得工程と、
前記取得工程により取得されたコンテンツデータを前記領域に配置することができない場合、前記領域を有するページを新たに生成する生成工程を有することを特徴とする文書処理方法。
【請求項１７】
前記生成工程は、前記取得工程により取得されたコンテンツデータが収まるまで前記領域を有するページを繰り返し生成することを特徴とする請求項１６に記載の文書処理方法。
【請求項１８】
前記生成工程は、前記領域を有する所定のページを複製することを特徴とする請求項１６または１７に記載の文書処理方法。
【請求項１９】
データベースからレイアウトすべきコンテンツデータを抽出するための抽出条件および区切り方法が設定された領域を有するテンプレートのレイアウトをコンテンツデータに応じて動的に変更可能な文書処理方法であって、
前記抽出条件を満たすコンテンツデータを前記データベースから取得する取得工程と、
複数の区切り方法からいずれかの区切り方法を設定する設定工程と、
前記取得工程により取得されたコンテンツデータを前記領域に配置するに際して、前記選択工程により選択されたいずれかの区切り方法に従って文書を区切ってコンテンツデータを配置して文書データを作成する配置工程と
を備えることを特徴とする文書処理方法。
【請求項２０】
前記区切り方法には、改文書、改ページ、改行のいずれかが定義されており、
前記配置工程は、前記区切り方法が改文書の場合には、前記取得工程により取得されたコンテンツデータを配置する際に、文書の一単位を完結させる区切り処理を行い、前記区切り情報が改ページの場合には、前記取得工程により取得されたコンテンツデータを配置する際に、ページを改める区切り処理を行い、前記区切り情報が改行の場合には、前記取得工程により取得されたコンテンツデータを配置する際に、行を改める区切り処理を行い、区切り処理ののちに、配置すべきコンテンツデータを前記テンプレートに従って配置することを特徴とする請求項１６に記載の文書処理方法。
【請求項２１】
前記テンプレートを作成するテンプレート作成工程をさらに備えることを特徴とする請求項１２乃至２０のいずれか１項に記載の文書処理方法。
【請求項２２】
前記取得工程により取得されたコンテンツデータを前記領域にレイアウトすることに応じて、前記コンテンツデータをレイアウトした文書データを表示する表示工程または印刷する印刷工程の少なくともいずれかをさらに備えることを特徴とする請求項１２乃至２１のいずれか１項に記載の文書処理方法。
【請求項２３】
請求項１２乃至２２のいずれか１項に記載の文書処理方法をコンピュータにより実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、たとえばデータベースに登録されたレコードの各フィールドを予め定めた位置に配置して文書を完成させる自動レイアウト機能を有する文書処理装置及び文書処理方法に関するものである。
【背景技術】
【０００２】
近年、商品の多品種化で商品ライフが短くなっていること、インターネット利用の普及による消費者のカスタマイズサービス指向などの要因からＣＲＭ（カスタマ・リレーションシップ・マネージメント）や、Ｏｎｅ−ｔｏ−Ｏｎｅ（１対１）マーケティングの必要性が注目されている。これらの手法により顧客満足度を高め、顧客の開拓や囲い込みを目指すものである。
【０００３】
カスタマ・リレーションシップ・マネージメントとは、顧客のデータベースをもとに、個々のニーズに即した対応を実施して、顧客の満足度を高め、会社の収益性を向上させる仕組みである。また１対１マーケティングは、データベース・マーケティングの一種で、顧客の年齢、性別、趣味、嗜好、購買履歴等の個人属性情報をデータベース化し、その内容を分析して、顧客のニーズに合った提案を行うマーケティング手法であり、その代表的な適用例としてバリアブルプリントが挙げられる。ここ最近、ＤＴＰ（デスクトップパブリッシング）技術の進展とデジタル印刷装置の普及に伴って、文書を顧客毎にカスタマイズして出力するバリアブルプリントシステムが開発され、顧客毎に異なる量のコンテンツを最適にレイアウトした文書の作成が求められるようになった。
【０００４】
従来、バリアブルプリントシステムでは、ドキュメント上にレイアウト枠（コンテナともいう）が作成され、各コンテナのコンテンツとしてデータベースの一定の条件を満たすレコードやフィールドが関連づけられる。こうしてデータベースとレイアウトとを関連付けることにより、バリアブルプリントは実現されていた。
【０００５】
しかし、テキストおよびイメージのコンテナのサイズが固定であったため、データベース内のデータがコンテナに挿入されたときに、データ量がコンテナサイズより多いとテキストのオーバーラップおよびイメージのクリッピングが発生する。またデータ量がコンテナサイズより小さいと隙間が空いてしまう。
【０００６】
それらの問題を解決するための技術として、ある文字領域のサイズが大きくなった場合、隣接した領域のサイズを小さくする技術が特許文献１に開示されており、文字領域に対して文字を入力するに従い該文字領域サイズを拡張していき、該文字領域と隣接する領域サイズを縮小することが記載されている。
【０００７】
このように、従来の自動レイアウト技術には、入力されるテキスト量に応じて、レイアウト枠(コンテナ)のサイズを動的に変化させることが可能なものが存在する。
【０００８】
また、特許文献２には、複数の商品情報（商品レコード）をページ内のレイアウト領域に配置する技術も記載されている。
【０００９】
この技術では、レイアウト（たとえば商品名、イメージ、価格などの配置）をあらかじめ設定したマスタ部品（本件のサブテンプレートに相当）を用意しておき、商品情報ごとにどのマスタ部品を使用するかを設定する。そして、商品情報が有するデータ（商品名やイメージ、価格など）を、設定されたマスタ部品内の所定の領域に配置して、ページ内に指定されたレイアウト領域に順次配置する。なお、本願ではサブテンプレートに従って１レコードの情報を配置し、複数のサブテンプレートをフローエリアに順次配置する機能をマルチレコード機能と呼び、その動作を、サブテンプレートをフローエリアに流しこむ、と表現する。
【特許文献１】特開平７−１２９６５８号
【特許文献２】特開２０００−４８２１６号（段落００２５〜００５５、図２、図１１）
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１に記載の技術には、テキストの入力に応じて文字領域が拡大されていくことが記載されているが、文字領域のサイズが大きくなった場合、隣接した領域は間隔を保つべく縮小されてしまうため、入力されるテキスト量が増加するに従い、隣接した領域は縮小され続けてしまうといった問題点があった。
【００１１】
更に特許文献１では、上述したようなデータベースと各領域を関連付けてコンテンツデータを流し込むことで、顧客毎にカスタマイズした文書を作成するバリアブルプリントシステムについては考慮されていなかった。
【００１２】
また、特許文献２に記載の技術では、レコードごとにどのマスタ部品を使用すべきかを予め設定しなければならず、例えばレコード数が膨大な量であった場合、レコード数の増加に応じて設定するための操作回数も増加するためユーザの操作性を低下させることとなる。
【００１３】
また、ユーザによっては同じようなデータ属性を有するレコードは同じマスタ部品を使用したいと考えることが想定される。例えば、レコード１〜１０を用いて文書を作成する場合、レコード２およびレコード５には同じ価格データが設定されているとする。この場合、ユーザはレコード内のデータ属性が同じであるレコード２および５に関しては同じマスタ部品を使用して文書を作成したいと考える場合がある。
【００１４】
このような場合、特許文献２に記載の技術では、レコード毎にどのマスタ部品を使用すべきかを予め設定しなければならないためレコード２で使用したマスタ部品を覚えておき、レコード５にマスタ部品を設定する際に、ユーザの記憶を頼りにマスタ部品を選択しなければならない。しかしながら、通常パンフレットやカタログを作成する際のレコード数は膨大な数となることが予想され、さらに多くの種類のマスタ部品が使用される。この際に、ユーザの記憶のみでマスタ部品を選択していく手法が最適であるとは言い難い。
【００１５】
また、特許文献２では、レイアウト領域に配置すべきレコード数によっては、指定されたレイアウト領域にレコードを収めることができない場合がある。１ページ分のレイアウト領域しか設定していなかった場合、特許文献２では次のレイアウト候補位置に移動して配置することになるが、次のレイアウト候補位置へ移動できない場合の処理については記載されておらず、結果として、データをレイアウトすることができないという問題が発生する。
【００１６】
また、このように全レコードをレイアウトすることができない場合の一般的な処理として、レイアウトすべきデータを縮小する方法などが考えられるが、レイアウトすべきデータのサイズを変更することにより、ユーザの所望とするレイアウトサイズが得られなくなる可能性がある。
【００１７】
このように、ユーザが当該顧客の好みそうなカタログやパンフレットを作成することを想定すると、従来技術だけではユーザに対して良好な操作性を提供しつつ、多様にわたる顧客の趣向に応じた文書を作成することが困難となる。
【００１８】
また、従来のマルチレコード印刷（複数のレコードを１つのドキュメントに配置して文書を印刷する機能）では、レコードの特定の項目が変更された（例えば、顧客名が変わった）ときだけ、ドキュメントを分割する（たとえば顧客別にドキュメントを分割する）という、単純な１階層の分割しかできなかった。これでは、たとえば商品毎にページを改めたい場合など、所望の位置に文書区切り（ブレークとも呼ぶ。）を挿入することができず、整然とした文書あるいは所望の区切り目を設けた文書の作成が困難であった。
【００１９】
本発明は上記課題を鑑みてなされたもので、ユーザの操作性を保持したまま顧客の趣向に応じた多種多様な出力結果を得ることを実現するために、テンプレート上の領域に条件式を設定し、該条件式に基づいて抽出されたレコードデータを複数種類のサブテンプレートにレイアウトし、所定の領域内に配置する自動レイアウト機能をもった文書処理装置及び方法を提供することを目的とする。
【００２０】
また、配置すべきデータのサイズを縮小することなく、ユーザの所望とする出力結果をえるために、抽出されたレコードを領域内に配置できない場合、該領域を有するページを生成する自動レイアウト機能をもった文書処理装置及び方法を提供することを目的とする。
【００２１】
また、文書の区切り挿入の自由度を高め、それにより整然としたレイアウトあるいはユーザの意志を反映したレイアウトを実現できるマルチレコード対応の自動レイアウト機能をもった文書処理装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【００２２】
上記目的を達成するために本発明は以下の構成を有する。データベースからレイアウトすべきコンテンツデータを抽出するための抽出条件が設定された領域を有するテンプレートのレイアウトをコンテンツデータに応じて動的に変更可能な文書処理装置であって、前記抽出条件を満たすコンテンツデータを前記データベースから取得する取得手段と、コンテンツデータを配置するための１または複数のサブテンプレートと各コンテンツデータとを関連づけた関連付け情報から、前記取得手段により取得された各コンテンツデータを配置すべき１または複数のサブテンプレートを特定する特定手段と、前記特定手段により特定された１または複数のサブテンプレートに対して各コンテンツデータを配置して、前記領域にレイアウトすることにより出力結果を作成する配置手段とを備える。
【００２３】
あるいは、データベースからレイアウトすべきコンテンツデータを抽出するための抽出条件が設定された領域を有するテンプレートにおいて、該コンテンツデータに応じて動的にレイアウトを変更可能な文書処理装置であって、前記抽出条件を満たすコンテンツデータを前記データベースから取得する取得手段と、前記取得手段により取得されたコンテンツデータを前記領域に配置することができない場合、前記領域を有するページを新たに生成する生成手段を有する。
【００２４】
あるいは、データベースからレイアウトすべきコンテンツデータを抽出するための抽出条件および区切り方法が設定された領域を有するテンプレートのレイアウトをコンテンツデータに応じて動的に変更可能な文書処理装置であって、前記抽出条件を満たすコンテンツデータを前記データベースから取得する取得手段と、複数の区切り方法からいずれかの区切り方法を設定する設定手段と、前記取得手段により取得されたコンテンツデータを前記領域に配置するに際して、前記選択手段により選択されたいずれかの区切り方法に従って文書を区切ってコンテンツデータを配置して文書データを作成する配置手段とを備える。
【発明の効果】
【００２５】
本発明によれば、テンプレート上の領域に条件式を設定し、該条件式に基づいて抽出されたレコードデータを複数種類のサブテンプレートにレイアウトし、所定の領域内に配置するようにしたため、ユーザの操作性を保持したまま顧客の趣向に応じた多種多様な文書を作成することが可能となる。
【００２６】
さらに、本発明によれば、抽出されたレコードを領域内に配置できない場合、該領域を有するページを生成するようにしたため、配置すべきデータのサイズを縮小することなく、ユーザの所望とするレイアウト文書を作成することが可能となる。
【００２７】
また、文書の区切り挿入の自由度を高め、それにより整然としたレイアウトあるいはユーザの意志を反映したレイアウトを実現できる。
【発明を実施するための最良の形態】
【００２８】
［第１実施形態］
＜実施形態の概要＞
本発明の実施例を適用するのに好適な実施形態について説明を行う。まず発明の概略について説明する。本実施形態は、ドキュメントテンプレート（単にテンプレートとも呼ぶ。）に定義されたコンテナ（データが流し込まれる部分領域：フィールド領域とも呼ばれる。）に従って、データベースのレコード等を配置した文書を作成する、いわゆるバリアブルプリントと呼ばれる機能をコンピュータにより実現するためのコンピュータソフトウエアに関する。このソフトウエアが実行可能にロードされたコンピュータは、自動レイアウトシステム（あるいは文書処理装置）として機能する。本実施形態では特に、データをテンプレートに従って配置するのみならず、テンプレートに従って文書の一部を作成し、その文書の一部を、別途テンプレートに定義された領域（フローエリアと呼ぶ。）に挿入してドキュメントを完成させる機能（マルチレコード機能）を持つソフトウエアを開示している。挿入できる文書の一部の数はひとつのフローエリアについて一つとは限らない。さらに、テンプレートに複数のフローエリアが定義されている場合、一定の条件に従って、作成済みの文書の一部をフローエリア毎に振り分ける技術も開示される。なおフローエリア内に配置されるテンプレートを特にサブテンプレートと呼ぶ。また、フローエリアを含むテンプレートを特にマスタテンプレートと呼ぶ。
【００２９】
ここで、本実施形態の自動レイアウトシステムには２つの特徴的機能がある。第１は、レコードが１ページに入りきらない場合、たとえばレコード数が非常に多い場合など、新たなページにそのレコードを配置して、複数ページの文書を自動的に生成する機能である。第２は、個々のレコードについて、そのレコードに応じた形式（サブテンプレート）を用いて配置し、文書のレイアウトの自由度を高めるための機能である。次に、本発明を適用可能な本実施形態におけるコンピュータシステムの構成、およびアプリケーション構成について説明する。
【００３０】
＜システム構成図＞
図１Ａはバリアブルデータドキュメントを印刷するシステム１００を図示している。本明細書で示された方法は図１Ｂで詳しく説明される汎用コンピュータモジュール１０１で所定のプログラムを実行することで実践される。図１Ａに記述されるプロセスは、コンピュータモジュール１０１で実行され、システム１００上で実施可能となるレイアウト編集アプリケーションプログラム１２１のように、ソフトウェアの全体あるいは一部分で実行される。特にレイアウト編集や印刷のステップは、本発明の文書処理装置であるコンピュータ１０１によって実行されるソフトウェアの指示によって実施される。ソフトウェアは例えば以下に記述されるような記憶装置を含むコンピュータの可読媒体に格納される。ソフトウェアはコンピュータの可読媒体からコンピュータにロードされ、コンピュータ１０１によって実行される。そのようなソフトウェアや媒体に記録されたコンピュータプログラムを持つコンピュータの可読媒体はコンピュータプログラム製品である。コンピュータでそのコンピュータプログラム製品を使用することで、ドキュメントのレイアウト編集やバリアブルデータ印刷を行える装置として、そのコンピュータは機能する。
【００３１】
コンピュータモジュール１０１にはキーボード１３２やマウス１３３のようなポインティングデバイスなどの入力装置がつながれ、ディスプレイ装置１４４や状況に応じてはローカルプリンタ１４５を含む出力装置が連結される。入力／出力インターフェース１３８はコンピュータモジュール１０１をネットワーク接続１０７から接続してシステム１００の他のコンピュータ装置につなげることができる。そのネットワーク接続１０７の典型はローカルエリアネットワーク（ＬＡＮ）、あるいはワイドエリアネットワーク（ＷＡＮ）である。
【００３２】
コンピュータモジュール１０１は、一般的には少なくとも１つのプロセッサーユニット１３５、例えば半導体のランダムアクセスメモリ（ＲＡＭ）やリードオンリーメモリ（ＲＯＭ）から構成されるメモリユニット１３６、ビデオインタフェース１３７を含むＩＮＰＵＴ／ＯＵＴＰＵＴ（Ｉ／Ｏ）インターフェース、キーボード１３２やマウス１３３のためのＩ／Ｏインターフェース１４３を含んでいる。
【００３３】
記憶装置１３９は、一般的にはハードディスクドライブ１４０やフレキシブルディスクドライブ１４１を含んでいる。図１Ｂには示されていないが磁気テープドライブもまた使用される可能性がある。ＣＤ−ＲＯＭドライブ１４２は不揮発性のデータソースとして提供される。コンピュータモジュール１０１は、ＧＮＵ／ＬＩＮＵＸ（登録商標）やマイクロソフト社のウィンドウズ（登録商標）のようなオペレーティングシステムに従って、あるいはコンピュータシステムの常套的なオペレーションモードによる方法によって、相互接続バス１３４を介して通信を行うコンピュータモジュール１０１に含まれる各構成要素（符号１３５〜符号１４３）を利用する。
【００３４】
図１Ａのレイアウト編集アプリケーションプログラム１２１は、通常は図１Ｂのハードディスクドライブ１４０に常駐し、プロセッサ１３５により実行、読み込み、コントロールされる。いくつかの事例では、アプリケーションプログラム１２１がＣＤ−ＲＯＭやフレキシブルディスク上にエンコードされており、対応するフレキシブルディスクドライブ１４２やＣＤ−ＲＯＭドライブ１４１を通じて読み込まれてユーザに提供される。あるいはもう一つの方法として、アプリケーションプログラム１２１はネットワーク接続１０７からユーザによって読み込まれてもよい。さらにソフトウェアは、磁気テープまたはＲＯＭまたは集積回路、光磁気ディスクまたは無線またはコンピュータモジュール１０１とその他のデバイス間の赤外線通信、ＰＣＭＣＩＡカードのようなコンピュータ可読カード、そしてＥメール通信やＷＥＢサイト上の記録情報を持つインターネットやイントラネットを含む、他の適当な大きさのコンピュータ可読媒体からコンピュータモジュール１０１内にロードされる可能性もある。上記の例は単に関連するコンピュータ可読メディアの一例である。他のコンピュータ可読媒体も使用される可能性はある。
【００３５】
またレイアウト編集アプリケーション１２１は、バリアブルデータ印刷（ＶＤＰ）を行うよう指示し、２つのソフトウェアコンポーネントを含んでいる。これらのうち第１のコンポーネントはレイアウトエンジン１０５であり、これは長方形のコンテナで与えられた制限やサイズによって、コンテナを構成する矩形および線の位置を計算するためのソフトウェアコンポーネントである。なお、レイアウトエンジン１０５は、コンテナのみならずその他のオブジェクトについても位置等を計算することが可能である。レイアウトエンジン１０５は各部分領域（たとえばコンテナ）のサイズと位置を決定するアプリケーションとして動作し、図示省略したプリンタドライバに描画情報を出力することで、プリンタドライバがバリアブルデータドキュメントのイメージ描画処理を行い、印刷データを生成する。
【００３６】
第２のコンポーネントであるユーザインターフェース１０３は、ユーザにドキュメントテンプレートを作成させ、ドキュメントテンプレート内でデータソースと関連付けるメカニズムを提供する。ドキュメントテンプレートとは、たとえば定型的な文や上述したコンテナを文書上に配置した雛形となるデータである。ドキュメントテンプレートの所定の領域、たとえばコンテナ内にデータベースから取り込んだテキストや画像等のデータを流しこむことでひとつの文書が完成する。
【００３７】
ユーザインターフェース１０３とレイアウトエンジン１０５はコミュニケーションチャネル１２３を介して通信する。ドキュメント生成のためのデータソースは、一般的にデータベースアプリケーションを動かしている他のコンピュータによって構成されたデータベースサーバ１１７上にある一般的なデータベース１１９である。ホストコンピュータ１０１はネットワーク接続１０７によってデータベースサーバ１１７と通信する。バリアブルデータ印刷アプリケーション１２１はホストコンピュータ１０１か一般的に他のコンピュータで構成されるファイルサーバ１１５に保存されるドキュメントテンプレートを生成する。またバリアブルデータ印刷アプリケーション１２１はデータとマージされたドキュメントテンプレートによって構成されたドキュメントを生成する。これらのドキュメントはホストコンピュータ１０１のローカルファイルシステムに保存されるか、ファイルサーバ１１５に保存されるか、あるいはプリンタ１１３に直接印刷される。プリントサーバ１０９は直接ネットワークにつながっていないプリンタにネットワーク機能を提供するコンピュータである。プリントサーバ１０９とプリンタ１１３は一般的な通信チャネル１１１を介して接続される。
【００３８】
テンプレートデータ１３１はドキュメントテンプレートとも呼び、データベース等から読み出したレコードを埋め込むコンテナと呼ぶ領域や、固定されたデータ等が定義された文書の雛形データである。この構成は図２３、図２４を参照して後で説明する。
【００３９】
図３４は本実施形態によるバリアブルデータプリントの概略を説明する図である。レイアウト編集アプリケーション１２１のユーザインターフェースモジュール１０３（以下、ユーザインタフェース１０３と記載する）により、ユーザからの操作指示に従いページ上に複数のコンテナ３４５〜３４７を配置し、各コンテナに位置やサイズに関する制約条件を付与することによりドキュメントテンプレート３４４が生成される。
【００４０】
また、ユーザインターフェース１０３はドキュメントテンプレート３４４とデータソース３４０（図１ではデータベース１１９）との関連付け、更に各コンテナとデータソース３４０内の各データフィールドとの関連付けを行う。各コンテナとデータソース３４０内の各データフィールドとの関連付けた情報は、ドキュメントテンプレート内に記述され、該ドキュメントテンプレートは、ＨＤＤ１４０またはメモリユニット１３６に格納される。
【００４１】
また、データソース３４０は、レコード単位で項目データ（バリアブルデータ）が記載されているファイルであり、ＨＤＤ１４０に格納されている。レイアウトエンジン１０５は、ユーザからの印刷指示もしくはプレビュー指示に応じて、ドキュメントテンプレートの各コンテナ３４５〜３４７に、関連付けられたバリアブルデータをデータソース３４０から読み込み、レコード単位で流し込み（例えば、データレコード１のデータフィールドＡ〜Ｃをコンテナ３４５〜３４７へ流し込む）、流し込まれるべきデータのサイズに応じて各コンテナのサイズ等を調整（レイアウト調整）する。なお、レイアウト調整の方法については後述する。
【００４２】
プレビュー指示の場合は、レイアウト調整されたドキュメントイメージを生成し、ビデオディスプレイ１４４の画面上にプレビューとして表示するべく出力される。また印刷指示の場合は、レイアウトエンジン１０５もしくはプリンタドライバを用いて生成したドキュメントイメージを印刷データとしてプリントサーバ１０９へ出力する。データレコード１，２，３…を順次処理することにより、バリアブルデータプリントが実現されることになる。
【００４３】
ドキュメント生成のためのデータソース（３４０）は、例えば、データベースアプリケーションを動かしている他のコンピュータによって構成されたデータベースサーバ１１７上の一般的なデータベース１１９であってもよい。この場合、ホストコンピュータ１０１はネットワーク１０７を介してデータベースサーバ１１７と通信し、データソースを取得できる。また、レイアウト編集アプリケーション１２１によって生成された、バリアブルデータプリントのためのドキュメントテンプレート（３４４）は、ホストコンピュータ１０１或いは他のコンピュータで構成されるファイルサーバ１１５に保存される。図１Ｃで上述したように、レイアウト編集アプリケーション１２１のレイアウトエンジン１０５は、データとマージされたドキュメントテンプレートによって構成されたバリアブルデータドキュメントを生成する。これらのドキュメントは、ホストコンピュータ１０１のローカルファイルシステムに保存されるか、ファイルサーバ１１５に保存されるか、あるいはプリンタ１１３に送信されて印刷される。プリントサーバ１０９はネットワークと直接にはつながっていないプリンタにネットワーク機能を提供するためのコンピュータである。プリントサーバ１０９とプリンタ１１３は一般的な通信チャネル１１１を介して接続される。
【００４４】
図２は、図１Ａの構成から、レイアウトエンジン２２５を独立させてエンジンサーバ２２７によりレイアウトエンジンを実行させるための構成を示す。エンジンサーバ２２７は一般的なコンピュータである。ファイルサーバ１１５に保存されたドキュメントテンプレートは印刷や他の目的がある際、レイアウトエンジン２２５によってドキュメントを生成するためにデータベース１１９に保存されたデータと結合することができる。そのようなオペレーションはユーザインターフェース１０３を介して要求されるか、特定のレコードのみ印刷するように要求される。
【００４５】
＜アプリケーション構成図＞
（メインウインドウ）
図３で参照されるように、ユーザインターフェース１０１は、操作時にビデオディスプレイ１４４に表示されるアプリケーションウインドウ３０１によって形成されたユーザインターフェースを含んでいる。ウインドウ３０１は、メニューバー３０２とツールバー３０３、そしてマウス１３３の位置・動作によって場所を移動可能なワークエリア３０６とオプションのパレット３１１とカーソル/ポインタデバイス３１３から特徴付けされる。
【００４６】
メニューバー３０２は周知の技術であり、メニューオプションの階層の下に拡張される多くのメニューアイテム３０４を持つ。
【００４７】
ツールバー３０３は、アプリケーションの特別なモードによって非表示にする、または表示することが可能な多くのツールボタン等のウィジット３０５を持つ。オプションのルーラー３０８はワークエリア内のポインター、ページ、ライン、マージンガイド、レイアウト枠（すなわちコンテナ）またはオブジェクトの位置を示すために使われる。パレット３１１はバリアブルデータを読み込んで表示するライブラリのような追加機能にアクセスするために使われる。パレット３１１は移動、リサイズ、クローズをするためのウインドウコントロール３１２を持つ。
【００４８】
ツールバーエリア３０３は少なくとも、次のユーザ選択可能な「ボタン」を持つ。
（１）選択ツールボタン４０３：コンテナの辺を選択、移動、サイズ変更、リサイズそしてロック・ロック解除するために使われる。コンテナは、複数のコンテナの周りに選択ボックスをドラッグする、あるいは複数コンテナを選択する間にCTRLキーを押しつづけることによって、複数選択を可能にする。
（２）イメージコンテナツールボタン４０４：スタティック（固定）あるいはバリアブルイメージを持つコンテナを作成するために使われる。
（３）テキストコンテナツールボタン４０５：スタティック（固定）あるいはバリアブルテキストを持つコンテナを作成するために使われる。
（４）リンクツールボタン４０６：コンテナ間に関連付けを行うリンクを作成するために使われ、リンクの距離をコントロールするために使われる。
これらのボタンは、周知の技術であるように操作状況に合わせて変化するアイコンのツールチップとして実装される。
【００４９】
レイアウト編集アプリケーション１２１の図３に示したアプリケーションウインドウ３０１は、ページ内に各コンテナやリンクをレイアウトすることで、基本レイアウトを決定することができる。基本レイアウトとは、バリアブルデータプリントで基本となるレイアウトのことである。基本レイアウト内の各コンテナが固定コンテナである場合は、すべてのレコードの印刷結果のレイアウトは同じになる。また、基本レイアウト内の各コンテナが後述する可変コンテナである場合は、レコード単位に読み込まれるデータの量やサイズにより各コンテナのサイズや位置が、後述する制約の範囲内で変動することになる。よって、レイアウト編集アプリケーション１２１で作成されるドキュメントテンプレートは、あくまで基本レイアウトを決定するものであり、可変コンテナが含まれる場合は、最終的な印刷物のレイアウトは読み込まれるデータによりレイアウト調整されることになる。
【００５０】
（ドキュメントテンプレート）
ワークエリア３０６はドキュメントテンプレートのデザインを表示および編集するために使われる。これはユーザに下準備で印刷されたドキュメントの概観をデザインすること、そしてマージされたドキュメントが、バリアブルデータの量またはサイズに基づいてどのように変化するかを理解することを可能にする。
【００５１】
もし外部データソース（例えばデータベースのレコード等）がテンプレートにリンクされていたら、現在のドキュメントのプレビューができるように、バリアブルテキストとイメージがコンテナに表示される。
【００５２】
ドキュメントの構造とバリアブルデータのコンテナの描写をする視覚的な手がかりとなるオブジェクトは、カーソルをコンテナ上に移動させたときや、コンテナを選択したときにいつも表示される。
【００５３】
ワークエリア３０６はスクロールバー３０７とオプションのルーラ３０８とドキュメントテンプレート３０９により特徴付けられる。ドキュメントテンプレート３０９はページが複数あることを示すことができる。
【００５４】
与えられたドキュメントテンプレートのページサイズは、周知の技術によりユーザによって指定される。例えばメニューの「ファイル」から「ページ設定」を選択することでページサイズを設定するダイアログを表示し、そこでユーザが指定したページサイズが反映されることになる。それぞれのドキュメントでの実際のページ数はバリアブルデータによって変化する可能性がある。もし１ページ内に収めることができず、所定の用紙サイズのページに各コンテナを収めるような制約が基本レイアウトになかった場合、追加のページは自動的に作成される。それぞれのページ内の境界線は、ページ上の印刷可能なオブジェクトの最大幅を示す、任意のページマージン３１０である。
【００５５】
また、図３には１ページのドキュメントテンプレート３０９上に表示することが可能なオブジェクトの例も示されている。それらは、複数のコンテナ４０７、４０８と、固定されていない辺４１０、リンク４１２そしてスライダ４１３を持つ。なお、各オブジェクトの機能については後述する。
【００５６】
（コンテナ）
コンテナは、ドキュメントテンプレート内に固定あるいは可変のテキストやイメージが流しこまれて描画されるスペースであり、他のコンテナやオブジェクトと相互に作用しながらレイアウトされる。コンテナはポインティングデバイス１３３を操作してポインタ３１３を使い、図３のユーザインターフェースで示され、移動やサイズ調整そして再作成されることができる。
【００５７】
より正確にはコンテナは、設定の集まり、視覚的表現そしてインタラクションと編集動作をもっている。下記にコンテナの定義について説明する。
（１）コンテナは固定あるいは可変のコンテンツが流し込まれる。可変コンテンツは、データソース（たとえばデータベースのレコード）から取得され、異なるドキュメントでは異なるデータに応じてコンテナサイズを可変するという意味でダイナミック（動的）である。可変コンテンツとしては、アニメーション化されたもの、あるいは他の方法で時間に応じて変化するものは印刷に適合していないため含まない。固定コンテンツはひとつのテンプレートを用いて生成される全てのドキュメントで同じように表示される。けれども、可変コンテンツとリンクが設定されている場合、可変コンテンツを含むコンテナの位置やサイズの変化によって、固定コンテンツを含むコンテナはそれぞれのドキュメントで位置が異なる可能性がある。
【００５８】
（２）コンテナは、コンテンツに適用される背景色、ボーダー、フォントスタイルといったテキスト設定のような装飾機能を持っている。このような設定をコンテナ属性と呼ぶ。コンテナ属性は、コンテナごとに設定可能であるが、あるコンテナと同じコンテナ属性であるという設定を行うことも可能である。
【００５９】
（３）コンテナはドキュメントを生成したときにデータソースからのデータとマージされる。可変コンテンツはデータソースからの特定のデータとして得られ、表示あるいは印刷される。コンテナに収められるコンテンツは、例えば印刷されるか、スクリーン１４４上で表示されるか、あるいはその両方により出力され得る。
【００６０】
（４）コンテナはユーザインターフェースを持つ。例えばコンテナの編集そして表示設定のためのインタラクティブなＧＵＩを持つ。ユーザインタフェースの要素は普通はスクリーン１４４上に表示される。ユーザインターフェース１０３は、背景色やフォントのようなコンテナの装飾機能のいくつかを表示する。そしてコンテナの設定の編集や表示を行わせるための機能も有する。ユーザインターフェース機能の目的の例としては、ボーダー、あるいは、コンテナのサイズや位置を対話的に変更、表示するための角アイコン、あるいはコンテナがデータソースからデータをマージされたとき、コンテナの動作を示すための上塗りした数、線、アイコン、テキストがある。しかしそれらの要素はドキュメント上には印刷されない。
【００６１】
（コンテナ制約）
コンテナはそれぞれのドキュメントで表示または印刷されるコンテンツをどのようにコンテナに収めるか制御するための制約を持つ（すなわち定義可能である）。これらの制約は、固定・可変コンテンツをコンテナと結びつけると共に、ユーザが一つのドキュメントテンプレートによって多数のドキュメントをコントロールする主要な手段である。制約の一例としては「このコンテナのコンテンツの高さは、最大値４インチです。」というものがある。他の制約の例としては「コンテナのコンテンツの左エッジは、それぞれのドキュメントで同じ水平位置で表示しなければならない。」というものもある。ここに記述される内容は、ＧＵＩを使ってこのような制約を表示、編集するためのいろいろな方法である。
【００６２】
イメージがページ上に定義された場所を持っているように、固定コンテンツの配置を指定するコンテンツプレイスホルダは、デジタル印刷技術でよく知られている。以下の説明において、コンテナは位置とサイズとを持ち、それらは公知の技術で知られている手法で編集され、表示することができる。ここでは、バリアブルデータ印刷における表示・編集に焦点を合わせて説明する。
【００６３】
ユーザは、コンテナの位置やサイズ、制約等を指定することで、ドキュメントのコンテンツのサイズおよび位置を指定することができる。複数のドキュメントが一つのドキュメントテンプレートから生成されるので、コンテナの指定可能な設定と制約を指定および表示させるためにユーザインターフェースを使わなければならない。コンテナはそのユーザインターフェースとしても利用される。
【００６４】
＜テンプレート作成モード（コンテナ表示・編集）＞
バリアブル印刷されるドキュメントの作成手順は、テンプレートを作成するテンプレート作成処理（テンプレート作成モード）と、作成されたテンプレートにコンテンツを挿入してドキュメントを作成するドキュメント作成処理（ドキュメントをプレビュー表示する場合を特にプレビューモードと呼ぶ。）という２つのフェーズに分けることができる。まず、テンプレート作成モードについて説明する。
【００６５】
（新規コンテナの作成方法）
コンテナは、テキストコンテナとイメージコンテナの２種類で記述される。テキストコンテナはテキスト、そして埋め込みのイメージを持つ（収納する）。イメージコンテナは、イメージだけを持つ（収納する）。可変というのは前述のとおり、レコード毎に異なり得る、という意味である。
【００６６】
新規テキストコンテナとイメージコンテナは、ウィジット３０５からマウス１３３でクリックして選択するテキストコンテナツール４０４とイメージコンテナツール４０５それぞれにより四角形の領域をドラッグすることによって、ドキュメントテンプレート３０９上に作成される。
【００６７】
あるいはコンテナは、同様に適切なツール４０４，４０５をアクティブにした後に、ドキュメントテンプレート３０９上でクリックすることによって単純に作成されてもかまわない。この場合、デフォルトサイズのコンテナが挿入されるか、新規コンテナの寸法を入れるために、ダイアログボックスが提供される。あるいは他の案が考えられるかも知れない。このようにしてユーザインターフェース上でユーザにより指定された矩形の位置およびサイズが、そのままテンプレート上におけるコンテナの位置およびサイズとして、ドキュメントテンプレートの保存時に、ドキュメントテンプレートファイルとしてハードディスク等に保存される。
【００６８】
（コンテナの表示方法）
コンテナの辺は、関連付けられたコンテンツがドキュメント内で表示される際の、仮想の境界線を定義するものである。コンテナをユーザインターフェイスとして利用するに際して、例えばコンテナの左辺は、関連付けられたコンテンツがどんなドキュメント内でも表示可能である最も左の辺として扱われる。同様に、コンテナの高さは生成されたドキュメントで関連付けられたコンテンツを表示可能な高さの制限として理解できるであろう。本特許提案では、ユーザインターフェース１０３を通してコンテナの辺あるいは大きさを変化させることを前提としている。
【００６９】
（ユーザインターフェースの定義）
次に、コンテンツのレイアウトを制限するために使われるいくつかのユーザインターフェイスとレイアウトの関係のルールの定義を説明する。添付した図面に示すレイアウト例もこの定義に従って表示されている。
【００７０】
（１）もしコンテナの左右の辺が実線なら、コンテナの幅は固定である。コンテナの幅が固定なら、関連付けられたコンテンツに割り当てられる幅は、全てのドキュメントで同じになる。しかしコンテナの高さは変わる可能性がある。
（２）もしコンテナの上下の辺が実線なら、コンテナの高さは固定である。もしコンテナの高さが固定なら、関連付けられたコンテンツに割り当てられる高さは、全てのドキュメントで同じになる。
（３）もし距離の制約が固定なら、指定された距離は全てのドキュメントで同じになる。
（４）もしコンテナの実線辺と他のコンテナを後述するリンクを用いて関連付けると、実線辺のコンテナはリンクによって関連付けられた他のコンテナによって押され、位置を変える場合がある。上下辺に対するリンクは縦方向の位置変更を、左右辺に対するリンクは横方向の位置変更をもたらす。「固定」の反対は、辺、位置、あるいはドキュメント制約がドキュメントごとに変化するかもしれないことを意味している「可変」である。可変を実現するためのユーザインターフェイスとレイアウトの関係のルールの例は、例えば以下のようである。
（５）もしコンテナの左右の辺が点線なら、コンテナの幅は可変である。コンテナの幅が可変なら、関連付けられたコンテンツに割り当てられる幅は、ドキュメントごとに変化する。
（６）もしコンテナの上下の辺が点線なら、コンテナの高さは可変である。もしコンテナの高さが可変なら、関連付けられたコンテンツに割り当てられる高さは、ドキュメントごとに変化する。
（７）もし距離の制約が可変なら、指定された距離はドキュメントごとに変化する可能性がある。距離の制約に対する設定により、最大長・最小長の制限の枠内でコンテナの距離を調整するレイアウトを行なうことができる。
（８）もしコンテナの点線辺と他のコンテナを後述するリンクを用いて関連付けると、そのコンテナはリンクによって関連付けられた他のコンテナを押し（または押され）、位置を変える場合がある。上下辺に対するリンクは縦方向の位置変更を、左右辺に対するリンクは横方向の位置変更をもたらす。
【００７１】
図４は、上記のルールに基づくコンテナの辺の状態を示している。一般的に、コンテナの辺の状態はドキュメントテンプレートのデザインの手助けとして表示される要素であるため、印刷物には描画されない。コンテナの制約として設定される幅・高さの最小値・最大値の設定値は、副次的なダイアログウインドウ３１１（図３参照）に表示される。
【００７２】
なお、上述したユーザインターフェース上の表示とコンテナ自身の制約あるいはコンテナ間の制約は、そのユーザインターフェースを用いるユーザの観点から説明したもので、このユーザインターフェースを実現するために実行されるプログラムの観点からは因果関係が逆となる。上記規則をプログラムの観点から言い換えると以下のようになる。
【００７３】
（１）もしコンテナの幅が固定であるとデータ上設定されていれば、コンテナの左右の辺を実線で表示する。
（２）もしコンテナの高さが固定であるとデータ上設定されていれば、コンテナの上下の辺を実線で表示する。
（３）もし固定値で指定された距離は、全てのドキュメントで同じ距離とする。
（４）コンテナ幅あるいは高さが固定であるとデータ上設定されており、その固定された辺について他のコンテナとの距離（コンテナ制約）が設定されている場合、当該コンテナの位置は、前記他のコンテナのサイズ等に応じて決定される。
（５）もしコンテナの幅が可変であるとデータ上設定されていれば、コンテナの左右の辺を点線で表示する。
（６）もしコンテナの高さが可変であるとデータ上設定されていれば、コンテナの上下の辺を点線で表示する。
（７）もしコンテナ間の距離の制約が可変とデータ上設定されていれば、距離の最大長・最小長の制限の枠内でコンテナの距離を調整するレイアウトを行なうことができる。
（８）コンテナ幅あるいは高さが可変であるとデータ上設定されており、その固定された辺について他のコンテナとの距離（コンテナ制約）が設定されている場合、当該コンテナの幅または高さに応じて、前記他のコンテナの位置が決定される。
【００７４】
図５（Ａ）で、コンテナ５０１は幅が可変である。この場合、辺５０３は実線で表現され、可変の辺５０４は点線で表現される。拡縮アイコン５０５は、それに隣接する辺５０４が可変であることを示す、オプションのインジケータである。図５（Ｂ）では、コンテナ５０１は幅・高さ両方が可変である。図５（Ｃ）で、コンテナ５０１も、幅・高さ両方が可変である。また辺の操作を行うためにハンドル５０２もユーザインターフェース上に表示される。
【００７５】
＜ドキュメントテンプレートのデータの例＞
図２３は、ドキュメントテンプレートのデータ（テンプレートデータと呼ぶ。）１３１の一例を示す。図２３において、テンプレートデータ１３１は、メモリ１３６あるいはハードディスク１４０に格納されている。テンプレートデータには、以下の要素が含まれる。
【００７６】
（１）全体サイズ２３０２：テンプレート全体のページのサイズを示す。サイズは、たとえば、縦および横の長さ、または定型用紙サイズなどで示される。
【００７７】
（２）コンテナ情報２３０３：テンプレートに配置されるコンテナ毎に、そのコンテナを特定するための識別情報やコンテナの基準の位置（位置情報）、縦横それぞれの辺の長さ（サイズ情報）、コンテナを構成する辺や点の属性（属性情報）、コンテナに関連づけられるコンテンツの情報等を示す。位置情報およびサイズ情報は、図４のユーザインターフェースを介する指定によってテンプレート作成時に定義されたものである。位置情報は、コンテナの作成時にユーザにより設定された、コンテナの基準の位置である。位置が可変のコンテナであれば、コンテナに流し込まれるコンテンツのサイズ（画像サイズ、テキスト量）に応じて大きさが変更され、各コンテナの大きさにより動的に位置が変更されることになる。位置が固定されているコンテナであれば、固定された位置情報を持つ。たとえばコンテナの対角点の位置を特定できる情報を持つことで、位置とサイズとが特定できる。もちろん、全点についてテンプレート上における位置を持ってもよいし、ひとつの点についてはテンプレート上における位置の情報を持ち、他の点については相対的な位置の情報を持つようにしてもよい。すなわち、コンテナの一つの点とコンテナのサイズによって定義することもできる。また、固定されている点についてはテンプレート上における位置で定義し、可変の点については相対的な位置で定義しても良い。
【００７８】
属性情報は、図３および図５を参照して説明した、コンテナの辺や辺、軸またはそれらの交点等の属性を示す。ひとつのコンテナは、たとえば位置とサイズとにより、上辺、下辺、左辺、右辺、水平軸、垂直軸、各角点、中心点、幅、高さが定まる。それら各要素について、可変であるか、固定されているかが属性情報により定義される。図４のユーザインターフェースによりドキュメントテンプレートを作成した場合、コンテナの辺や点や軸を選択した状態で、パレット３１１内に表示されるメニュー「固定する」「可変とする」などから、オペレータが所望の項目を選択することで、選択された点や辺に対応して、コンテナ情報２３０３に「固定」「可変」いずれかの属性が書き込まれる。コンテナ作成直後の既定値はたとえばすべて「可変」としておく。なおこの例では、ひとつの辺や軸について「固定」であるとは、辺や軸の長さや長手方向の位置ではなく、長手方向に直交する方向についての位置が固定されていることを意味している。また、点や辺の属性を設定することで、自動的にその他の点や辺の属性が定まる場合には、その属性も書き込む。たとえば角点を「固定」と指定した場合、それを挟む辺も「固定」とされる。これは逆も同様である。またたとえば、中心点の位置を「固定」と指定すると、中心点の属性に「固定」と書き込まれると共に、水平軸及び垂直軸の属性も「固定」と書き込まれる。この場合、幅や高さは可変のままであれば、幅および高さの属性は「可変」のまま維持される。
【００７９】
関連づけられるコンテンツに関する情報（コンテンツ関連情報）には、たとえば、それがテキストコンテナであるかイメージコンテナであるかの種別を示す情報や、そのコンテナに挿入されるデータソースの識別子、たとえばデータベース名、レコード名、フィールド名等の一部又は全部、コンテンツを抽出するための条件式などの関連付け情報が含まれる。また、テキストコンテナの場合には、フォントに関する情報、たとえばフォント種類やサイズ、色、斜体や太字、下線等の文字修飾情報等もコンテンツ関連情報に含まれる。コンテナ情報２３０３は、ドキュメントテンプレートに設けられたコンテナの数だけ保持される。
【００８０】
（３）リンク情報２３０４：リンクとはコンテナ間の関連付けるオブジェクトでありコンテナ制約のひとつである。リンク情報は特に、リンクで結ばれた２つのコンテナ間の距離を一定（固定リンク）や可変範囲（可変リンク）とする旨の情報である。リンク情報としては、たとえば、水平方向及び垂直方向それぞれについて、２つのコンテナの識別子、およびそれらコンテナの対向する辺の間にリンクが設定されたことを示す情報や、リンクに沿った方向についてのコンテナ間の距離などを含む。リンク情報は定義されたリンク毎に保持される。リンク情報の形態としては、水平方向及び垂直方向それぞれについて、各コンテナの辺の位置を保持し、その辺の間にリンクが設定された旨を示す情報を保持してもよい。
【００８１】
（４）固定情報２３０５：可変部分以外の固定部分を定義するための情報が含まれる。たとえば、当該テンプレートが適用されて生成される全ドキュメント（全レコード）に共通の文や画像等が定義できる。文や画像については、そのデータそのものを含まずに、位置情報を定義するだけでも良い。もちろん、テンプレート上において配置される位置を定義するための情報も含む。
【００８２】
図２４には、マルチレコード機能のために用いられるテンプレートデータ１３１'の一例を示す。このデータももちろんメモリ等に保存されている。図２４では、ドキュメントテンプレート中にフローエリアという、他のテンプレートをサブテンプレートとして流し込める領域が定義される。１つのフローエリアには、マルチレコードに対応した数のサブテンプレートが流し込まれることになる。図２４においては、テンプレートデータ１３１'には、フローエリア情報２４０１が含まれる。フローエリア情報は、テンプレートに含まれるフローエリアの数だけテンプレートデータに保持されている。フローエリア情報２４０１には、以下の要素が含まれる。
【００８３】
（５）全体の位置やサイズ、フロータイプ等を示すフローエリアの属性情報２４０２：位置やサイズは図２３で説明した通りである。フロータイプは、フローエリアにサブテンプレートを流し込むパターンを定義する符号である。フローエリアに流し込むサブテンプレートの数はマルチレコードのキーカラムにより決定され、可変であるため、フローエリアに流し込むサブテンプレート数により、フローエリア内のサブテンプレートのレイアウトを定義する情報がフロータイプである。
【００８４】
（６）サブテンプレート情報２４０３：サブテンプレート情報２４０３には、サブテンプレートに配置されるコンテンツと、そのサブテンプレートにしたがってレイアウトされたコンテンツ（これを本明細書ではレイアウト済みコンテンツと呼ぶことにする。）が流し込まれるフローエリアとの対応付けを示す配置情報が含まれる。サブテンプレート情報２４０３は、たとえば、フローエリアに挿入されるテンプレートを識別するための情報である。その情報には、たとえばテンプレートデータのファイル（テンプレートファイル）の名称などを含む。また、レイアウト済みコンテンツを配置するための配置条件や、どのような順序でレイアウト済みコンテンツを挿入するかを指定するフロータイプも含まれていてもよい。配置条件としては、サブテンプレートによるレイアウト対象となるデータベースの検索条件（検索式）などが保持される。また、フロータイプとしては、Ｚ型、Ｎ型、Ｖ型など、予め用意した選択肢の内から指定させ、指定されたフロータイプを示す識別子が保持される。あるいは、データベースのレコードに配置情報フィールドを設け、その値と一致する配置条件の値に対応するフローエリアに、そのレイアウト済みコンテンツを挿入するなどしても良い。
【００８５】
さらに本実施形態に特徴的な情報として、フローエリアに挿入されるサブテンプレートを特定するための条件情報２４０３ａが含まれる。たとえば、サブテンプレートに関連づけられたデータベースのレコードのうちの特定のフィールドの値に応じて相異なるサブテンプレートを対応させる条件情報２４０３ａを、サブテンプレート情報として持つことができる。これにより、当該フィールドの値に応じたサブテンプレートがそのレコードのために使用される。
【００８６】
（７）マルチレコード情報２４０４：フローエリアに関連づけられるデータベース名および各レコードにおけるフィールド名等の識別子が含まれる。指定されたフィールド名について同一の値を有するレコードが指定されたデータベースからフェッチ（読み込まれ）されて、ひとつのフローエリアにレイアウトされる。対象となるレコードがフローエリアのサイズに比して相当多い場合もあり得る。そのような場合にはフローエリアは複数のページにわたるよう拡張されて、それらレコードがレイアウトされる。
【００８７】
＜リンクの設定方法＞
図６はリンクの設定方法のＵＩ例を示している。まず、リンクを設定するためには、リンクを設定するためのコンテナ（最低２つ）を作成する。２つのコンテナを作成してリンクを設定する場合の例を示している。次に、前述したリンクツールを選択した状態にする。図６では、コンテナを作成し、リンクツールが選択されていた状態から、リンクを設定する動作を示している。図６（Ａ）−（Ｃ）を順に説明していく。
【００８８】
図６（Ａ）の０６０１と０６０２は、前述した図３の４０７と４０８と同じであり、固定されている辺を意味する。０６０３はマウスポインタを意味している。まず、リンクを設定する片方のコンテナをクリックして選択する。次に図６（Ｂ）で示されるように、もう片方のコンテナまでマウスポインタを移動して、クリックする。図６（Ｂ）の０６０４は、図６（Ａ）でクリックをした位置と移動したマウスポインタを結んだ線を示しており、どの位置にリンクが設定されるのかをユーザに示すＵＩである。図６（Ｂ）で２度目のクリックが終わった後、設定した場所に０６０５で示されるリンクＵＩが表示され、コンテナは図６（Ｃ）の状態になる。０６０６は、点線で示されている辺であり、前述した通り可変の辺を示している。このようなデザインでは、左のコンテナ０６０１は右方向に可変のサイズをとれる。また右のコンテナ０６０２は左方向に可変のサイズをとれる。そのあいだをリンクで接続したことにより、左右のコンテナはその間の距離を保ったまま、相互にサイズを可変に調整するように動作する。
【００８９】
この処理を図２３のデータ処理の観点から説明すると以下のようになる。たとえば、コンテナを作成することにより、コンテナ情報３３０３が定義される。そして、レイアウト編集アプリケーション１２１は、選択された２つのコンテナ間にリンクが設定された旨を、リンク情報として記憶する。そしてリンクが設定された２つのコンテナの対向する辺の属性を必要に応じて変更する。たとえば、対向する辺の少なくとも一方が可変であれば、辺の属性を変更する必要はない。しかし、双方が固定であれば、リンクを設定する意義が失われるために、少なくとも一方を可変とする。図６の例では、両方を可変に変更している。もちろん、辺の属性が変更された場合には、レイアウト編集アプリケーション１２１は、変更された属性についてコンテナ情報３３０３に含まれる属性が変更された辺についてその属性情報を書き換える。
【００９０】
なお、上記記載では「対向する」との表現を用いているが、線どうしが見かけ上対向する場合のほか、線自体は対向していなくとも（すなわち２つの線の長手方向の投影が重複しなくとも）、線の延長線が対向する関係にあれば、その延長線の間でリンクを設定することができる。本明細書ではこのように延長線が対向する場合も含めて、リンクで関連づけられたコンテナに関しては、辺が「対向する」と表現することにする。すなわち、たとえばテンプレートの対角に沿って配置された小コンテナ間にもリンクを設定できる。
【００９１】
以上のように、リンクで関連づけられたコンテナの対向する辺の一方が可変で他方が固定であれば、コンテンツサイズに応じて可変の辺は移動する可能性がある。そして、その可変の辺の移動量に応じて、固定辺の側のコンテナは、コンテナ自体が平行移動する（アンカーがない場合）。リンクで定義されたコンテナ間の距離（リンクに沿った方向についての距離）は維持される。双方の辺が可変であれば、コンテンツのサイズに応じて量コンテナのサイズが可変となるが、コンテナ間の距離はこの場合も維持される。
【００９２】
＜プレビューモード（レイアウト計算）＞
図７（Ａ）はプレビューモードにおけるレイアウト計算のフローを示している。レイアウト計算は、ドキュメントテンプレートのコンテナに実データが挿入された場合に、コンテンツのデータサイズ等に応じてコンテナサイズやコンテナ配置を再計算する処理である。図７（Ａ）では、プレビューモードが指定された場合を例としているために、テンプレートにコンテンツを挿入して生成されたドキュメントは、ディスプレイ１４４に表示される。しかし、印刷モードが指定された場合には、プレビュー表示に変えて、ドキュメントは印刷出力される。なお、本願におけるフローチャートの各処理は情報処理装置（ホストコンピュータ）内のプロセッサ１３５によって実行されることとなる。
【００９３】
図７において、まずレイアウト編集アプリケーション１２１は、プレビューモードが選択されたことを認識する（ステップ０７０１）。本実施形態の自動レイアウトシステムによる動作モードには、コンテナを作成してそのコンテナ間に関連付けを行い、レイアウトを定義したドキュメントテンプレートを作成するレイアウト設定モードと、作成したレイアウト（テンプレート）にレコードを挿入して、実際にレコードが挿入された後のレイアウト結果をプレビューするプレビューモードとが含まれる。
【００９４】
このプレビューモードにおいて、実際のレコードが挿入されてレイアウトが計算される。プレビューモードは表示上でのレイアウト計算である。実際に印刷する場合においてもレコードを挿入してレイアウトを計算するが、その際の計算方法もプレビューモードと同じである。
【００９５】
プレビューモードになったら、レイアウト編集アプリケーション１２１は、プレビューするレコードが選択されたことを認識する（ステップ０７０２）。レコードの選択はオペレータに指定されたレコードを選択するものとしても良いし、指定されたデータベースから順次レコードを選択しても良い。レコードの選択が行われると、レイアウト編集アプリケーション１２１は、そのレコードをテンプレートに従ってレイアウトするために計算を行い（ステップ０７０３）、フローエリアがテンプレートに含まれていれば、フローエリアについてサブテンプレートに従ってデータを配置する（ステップＳ０７０４）。レイアウト編集アプリケーション１２１は、ステップ０７０３，Ｓ０７０４の計算結果に従ってレコードをレイアウトし、それを表示し（ステップ０７０５）、他のレコードについてもプレビューを行うかどうかを判断する（ステップ０７０６）。この判断はオペレータの指示に基づいても良いし、予め指定された範囲についてのプレビューが終了したか判断するものでもよい。ステップ０７０６で、レイアウト編集アプリケーション１２１は、他のレコードについてプレビューを行う必要がないと判断した場合は、プレビューモードを終了する（ステップ０７０７）。
【００９６】
一方、他のレコードについてプレビューを行うのであれば、レイアウト編集アプリケーション１２１は、他のレコードを選択して再度レイアウト計算を行い、レコードをレイアウトしてそのプレビューを行う（ステップ０７０８）。プレビューモードでなく印刷時においては、印刷対象のレコード全てについて順にレイアウトの計算を行う。したがって、ステップ０７０１、０７０７は存在しない。またステップ０７０６では、印刷対象の全てのレコードについて印刷が終了したか否かが判断される。
【００９７】
（レイアウト計算手順）
図７（Ｂ）は、図７（Ａ）のステップ０７０３におけるレイアウト計算の詳細を示したフロー図である。また、図８はそのときのＵＩ表示例を示した図である。なお図７（Ｂ）に限らず、本実施形態で説明するフローチャートは、図１Ａ、図１Ｂあるいは図２のコンピュータにより実行される。
【００９８】
まず、レイアウト編集アプリケーション１２１は、レイアウトを計算するコンテナの集合を求める（ステップ０７１０）。レイアウト計算は、リンクにより関連付けられたコンテナを一つの集合として行われる。例えば図３２を参照すると、ページ上に４つのコンテナがレイアウトされており、各コンテナに関連付けが設定されている。この場合、コンテナＡとコンテナＢ、そしてコンテナＣとコンテナＤがリンクによって関連付けされている。したがって、コンテナＡおよびコンテナＢが集合１、コンテナＣおよびコンテナＤが集合２となる。すなわち、図２３に示すテンプレートデータのリンク情報２３０４を参照し、リンクにより関連づけられたコンテナ群を、ひとつのコンテナ集合と判定できる。
【００９９】
次に、ステップ０７１０で求めたコンテナの集合から、レイアウト編集アプリケーション１２１は、レイアウトを計算するために一つコンテナの集合を選択する（ステップ０７１１）。これは、たとえばテンプレートデータのリンク情報中における出現順などに従えばよい。そして、レイアウト編集アプリケーション１２１は、選択したコンテナの集合について、レイアウトの計算を行う。ここでは、レイアウトされるコンテナのサイズが、実際のコンテンツのサイズとできる限り差が少なくなるように、レイアウトの最適化を行う（ステップ０７１２）。
【０１００】
レイアウトの最適化は、動的にサイズを変化することが可能なように関連付けられたコンテナにおいて、それぞれに挿入されるコンテンツのサイズとそのコンテンツが挿入されるコンテナサイズとができるだけ同じサイズとなるように行われる。コンテナサイズが固定されている場合には、コンテンツの方が変倍されてコンテナに収められるか、あるいはコンテンツの一部がコンテナに収められる。コンテナ集合に３つ以上のコンテナが含まれる場合にも、各コンテンツのサイズに応じたコンテナサイズ（すなわち各可変の辺の長さ）を計算し、その中点からリンク情報で定義される距離の位置を、辺の位置として決定する。リンクされた辺が固定辺であるコンテナについては、その位置を、関連づけられたコンテナの辺の移動に応じて移動させる。
【０１０１】
以上のようにして、リンクで関連づけられたコンテナを１組として、サイズが可変のコンテナについてはそのサイズを、位置が可変のコンテナについてはその位置を決定する。
【０１０２】
上記要領でレイアウの最適化計算を行い、その計算結果がルールに違反していた場合、レイアウト編集アプリケーション１２１は、再度ルールを違反しないように計算をする（ステップ０７１３）。ここでルールとは、テンプレート作成時にユーザによって設定される制限であり、コンテナのサイズと位置、リンクの長さなどである。制限は、テンプレートデータ内のコンテナ情報に含まれる辺や点等の属性情報とリンク情報とにより定義されている。特、属性情報において「固定」の値を有する項目とリンク情報がレイアウト上の制限となる。そこで、ステップ０７１２のレイアウト計算を終了した後、「固定」という属性を持つ計算後の各コンテナの辺や点の位置、サイズ等の項目について、テンプレートデータ中のコンテナ情報と比較し、値が相違している項目があれば制約違反と判定される。また、リンクについても、リンク情報に含まれるリンク長さ（コンテナ間の距離）と、ステップ０７１２のレイアウト計算終了後のリンクが設定されたコンテナ間の距離とが相違していれば、制約違反と判定される。
【０１０３】
ルールに違反しないようにレイアウトが計算されたら、そのコンテナ集合のレイアウトは完成される。そして、レイアウト編集アプリケーション１２１は、ステップ０７１１〜ステップ０７１３のステップをページ上のすべてのコンテナの集合について施し、ページ全体のレイアウトを計算する（ステップ０７１４）。
【０１０４】
なお、テンプレートデータにフローエリア情報が含まれている場合には、ステップ７０４で、レイアウト計算においてフローエリア内のサブテンプレートのレイアウトを行う必要がある。この処理は、後述する図１０，図１４，図１６Ａ，１６Ｂ等で説明する。これらの図はプレビューモードではなくテンプレート作成モードの処理であるが、テンプレート作成モードにおいてもそのプレビュー表示を行っており、プレビュー表示の処理については同様だからである。
【０１０５】
図８（Ａ）〜（Ｃ）はレイアウト計算時のＵＩ例である。図８（Ａ）は、あるレコードが挿入されレイアウトが決定されている状態を表している。０８０１と０８０２は固定された辺、０８０３は可変の辺、０８０４と０８０５は可変の辺の変化方向を示している矢印、０８０６はリンクをそれぞれ示している。この状態において、レコードを変更し、異なったサイズのコンテンツを挿入する。図８（Ｂ）は図８（Ａ）の状態に新しいコンテンツのサイズを重ねて示している。０８０７はそれぞれのコンテナに挿入されるコンテンツのサイズを表している。そして、レイアウト計算が行われる。図８（Ｃ）はレイアウト計算された結果を示している。計算後の各コンテナのサイズは、実際挿入されるコンテンツのサイズと同等に差異があるように計算され、且つ前述したルールを違反しないように計算される。図８（Ｃ）で示されるように、図８（Ｂ）で示した挿入されるコンテンツサイズ０８０７と計算後のコンテンツサイズ０８０８は、双方において同等な差異がある。
【０１０６】
しかし、単純に同等の差異をもってコンテナサイズを変更するだけでは、図８のような横方向のみのレイアウト計算の場合は問題ないが、図３３のように縦方向および横方向を考慮したレイアウト計算を行わなければならない場合、対応できなくなる可能性がある。横方向と縦方向の２次元的なレイアウトを扱う図３３の場合、図７（Ｂ）のレイアウト計算方法を用いて、まず横方向に調整を行い、後に縦方向に調整を行う。すなわち、コンテナ３３０１と３３０２の間で、上述した手順で設定値Ｄに収まるようレイアウト調整を行い、その後、コンテナ３３０２と３３０３の間で設定Ｇに収まるようレイアウト調整を行えばよい。しかし、横方向に調整を行い、後に縦方向に調整を行うという調整方法では、ユーザが所望とする基本レイアウトからずれたレイアウト結果になることが想定される。
【０１０７】
そのため、各コンテナについて、基本パターン（縦横比）からなるべくずれないように、基本パターンの幅とレイアウト調整後の幅の差の２乗と、基本パターンの高さとレイアウト調整後の高さの差の２乗との和を求め、これをすべてのコンテナについて算出する。そして、レイアウト編集アプリケーション１２１は、各コンテナの２乗の和の合計値が最小となるように、それぞれのコンテナの幅と高さを算出してレイアウト調整を行っても良い。
【０１０８】
この最小２乗法を用いてレイアウト調整を行うことにより、ユーザが当初設定した基本レイアウトから大きく外れることがなく、全体としてバランスのとれた最終レイアウトを決定することができる。なお、コンテナ間には後述する可変リンクが設定されているため、流し込まれるコンテンツデータのサイズに応じて後述するようにリンクサイズは変更する。本願記載のレイアウト編集アプリケーションはこのようなレイアウト調整ユニットを備えることにより、割り当てられたデータサイズに応じて複数の部分表示領域（コンテナ）の配置位置を調整することが可能となる。
＜マルチレコード（マルチデータ）機能＞
マルチレコードについて概要を説明する。通常のドキュメントテンプレートでは、１レコードが１ドキュメントに対応しているが、サブテンプレートに対応するマルチレコードは、基準となる項目が変化するブレイク（区切り）が発生するまでのレコードが流し込まれるものであるため、１ドキュメント内に複数のレコードが入ることになる。よって、通常のドキュメントテンプレートに対応するバリアブルデータのデータベースと、サブテンプレートに対応するバリアブルデータのマルチレコードのデータベースとは異なるデータベースとすることが望ましい。
【０１０９】
図９は、マルチレコードとそのレイアウト方法の概要の一例を示した図である。０９０１はドキュメント、０９０２はページ、０９０３はサブテンプレート、０９０４はデータベースを示している。０９０４で示すデータベースを見てみると、Ｎｏ１〜７のデータが表示されている。１レコード１ドキュメントのバリアブルプリントでは、７つレコードがあるので、この場合７ドキュメントが作成される。しかし、多レコード１ドキュメントのマルチレコードをサポートするバリアブルプリントでは、次のような処理を行う。まずマルチレコードを指定するカラムをユーザが任意に指定する。指定はたとえばテンプレート作成時になされる。この指定されたフィールドを特定するための情報は、図２４のマルチレコード情報２４０４の一部として保存される。この例ではフィールド名：Ｎａｍｅが指定されたものとする。すると、その指定されたフィールドの値が同じレコードは、１ドキュメントにレイアウトされるレコードであると判定されて、これも別途指定されたサブテンプレート（図２４のサブテンプレート情報に保存される。）を用いてレイアウトされ、１つのフローエリアに流しこまれる。図９の例では、Ｎｏ１〜４のレコードはフィールドＮａｍｅの値が「Ｔｏｍ」であるため、ひとつのフローエリアに流しこまれ、ひとつのドキュメント上にレイアウトされる。Ｎｏ５〜７のレコードは、フィールドＮａｍｅの値が「Ｎａｎｃｙ」であるため、「Ｔｏｍ」と同じテンプレートを用いて、しかし異なるドキュメント上にレイアウトされる。すなわち、いったん「Ｔｏｍ」のドキュメントを完結させ、「Ｎａｎｃｙ」のドキュメントを作成する。このように指定カラムのデータが変更されることに応じて、新しいドキュメントが作成されることとなる。
【０１１０】
具体的には、たとえばテンプレートデータにおける設定に従って「Ｔｏｍ」のドキュメントにフッタ等を付加（不図示）してから改ページする。これにより「Ｔｏｍ」のドキュメントは完結する。次にそれまでと同じテンプレートデータを用いて、「Ｎａｎｃｙ」のドキュメントのヘッダ等を新たなページに付加する（不図示）。そしてテンプレートに定義されたフローエリアに、これもサブテンプレート情報として設定されたサブテンプレートを用いて、ＮＡＭＥフィールドの値が「Ｔｏｍ」のレコードについてレイアウトしてフローエリアに流しこむ。これが通常のマルチレコードである。
【０１１１】
ただし本実施形態では、ＮａｎｃｙとＴｏｍとでは、同じテンプレートデータを用いるが、個々のレコードについて同じサブテンプレートを用いるとは限らない。別途指定した条件に応じたサブテンプレートを用いることができるためである。
【０１１２】
＜テンプレート作成モード処理の全体フロー＞
図１０、１１は本発明に係るレイアウト編集システムによるテンプレート作成モードの処理フローとその説明ＵＩを示している。図１０のフローの各ステップを図１１のＵＩ図と合わせながら説明していく。レイアウト編集アプリケーション１２１が実行され、新たなテンプレートの作成の指示をユーザが入力することで、図１１の画面（ただし矩形１１０４，１１０６，１１０５は除く。）が表示される。図１０の手順は、その状態からユーザの指示に応じて遂行されるレイアウト編集アプリケーションの手順である。
【０１１３】
まず、レイアウト編集アプリケーション１２１が、図１１のアイコン１１０３が押下されたことを認識することにより、フローエリア作成モードへと遷移し（Ｓ１００１）、、ページマージンのエリア１１０２において、ユーザのマウスのドラッグによる矩形をフローエリアとして描画する（Ｓ１００２）。レイアウト編集アプリケーション１２１は、描画された矩形の位置およびサイズを、フローエリア１１０６の位置及びサイズとしてテンプレートデータの一部としてメモリユニット１３６に保存する（Ｓ１００３）。コンテナ１１０４や１１０５は、フローエリア１１０６外に定義されるテキストコンテナやイメージコンテナである。これらのコンテナは、フローエリア内にコンテンツを流しこむ処理とは関係がないが、たとえばヘッダ、フッタとして設けておくことができる。これらコンテナもまた、入力されたその位置及びサイズがテンプレートデータの一部としてメモリユニット１３６に保存される。フローエリア１１０６は、それらのコンテナとは色や線種などの矩形ＵＩを異ならせることにより、ユーザに視覚的に認識しやすいようにする。
【０１１４】
次に、レイアウト編集アプリケーション１２１は、作成されたフローエリアにマルチレコードフィールドを関連づける（Ｓ１００４）。これは、たとえばフローエリアに関連づけられるデータベース名および各レコードにおけるフィールド名等の識別子を入力する処理である。操作上は、たとえばフローエリアをクリックするなどして対象のフローエリアを特定し、そこで一定の操作の流れに従ってこれら必要な情報を入力させる。その情報が図２４に示すテンプレートデータのマルチレコード情報としてメモリユニット１３６に保存される。これはステップＳ１００６，Ｓ１００７のプロパティと同時に入力することもできる。
【０１１５】
次に、レイアウト編集アプリケーション１２１は、作成されたフローエリアに各種設定を施すかどうかを判断する（Ｓ１００５）。プロパティを設定するのであれば、レイアウト編集アプリケーション１２１が、フローエリアでマウスポインタをクリックされたことを認識することなどにより、プロパティダイアログを表示する（Ｓ１００６）。そして、レイアウト編集アプリケーションは、表示されたプロパティダイアログを用いて設定された内容を認識して、設定する（Ｓ１００７）。プロパティダイアログおよび設定方法については、後で詳細に記述する。なお、設定された各種情報はメモリユニット１３６に保持されることとなる。フローエリアの作成および設定が終了したら、レイアウト編集アプリケーション１２１は、レイアウトをプレビューするかどうかを確認し（Ｓ１００８）、プレビューするのであれば、プレビューモードへ遷移して、レイアウト計算を行う（Ｓ１００９）。このレイアウト計算は図７Ｂで示したフローと同じ処理を行う。
【０１１６】
次に、レイアウト編集アプリケーション１２１は、設定されているフローエリアのレイアウト計算を行う（Ｓ１０１０）。この処理については後で図１７を参照して詳細に記述する。最後にレイアウト結果を表示する（Ｓ１０１１）。ステップＳ１００９，Ｓ１０１０，Ｓ１０１１は、図７ＡのステップＳ０７０３，Ｓ０７０４，Ｓ０７０５に相当する。
【０１１７】
（フローエリアのプロパティ設定）
図１２はフローエリアの各種設定（プロパティ設定）を行う設定ダイアログの例を示している。これが、図１０のフローチャート中のステップ１００６で表示され、その内容をＳ１００７にて反映させるダイアログのＵＩ例となる。なお、文中のサブテンプレートおよび条件式についてはフローチャートの後で説明する。
【０１１８】
まず、ユーザがラジオボタン１２０２によってまずフローエリアに関連付けるものがサブテンプレートであるか、それとも条件式であるかを選択する。その後、サブテンプレートの関連づけが選択されている場合には、リストボックス１２０３からフローエリアで使用するサブテンプレートをユーザが指定する。あるいは条件式の関連づけが選択されている場合には、リストボックス１２０４からフローエリアで使用する条件式をユーザが指定する。サブテンプレートおよび条件式は、編集中のドキュメントテンプレート内に、あるいはテンプレート外であっても所定の場所に、それぞれの特有なＵＩ手段によって別途作成できる。また、条件式は後述する図１５のＵＩにより作成することができる。しかし他の手法としては別のファイルに保存され、この設定ダイアログからはファイルを指定することによって選択指定できるものとしてもかまわない。本実施形態では、ドキュメントテンプレート内のフローエリアに対してそれぞれ複数のサブテンプレートおよび条件式を作成できるが、リストボックスから選択するという特性上からも、それぞれが固有の名前を持ち識別できるように設計されるべきである。その他に、本設定ダイアログからは、サブテンプレートをフローエリアに流しこむ際のフローの方向（すなわちコンテンツを並べる方向）を選択欄１２０５から選択する。コンテンツの間隔は、縦は設定欄１２０６、横は設定欄１２０７で設定することが可能である。
【０１１９】
以上の設定を確定するには、ＯＫボタン１２０８を押下する。ＯＫボタンが押されると、そのときの設定が図２４のフローエリア情報２４０１としてメモリユニット１３６に保存される。たとえば、着目フローエリアがサブテンプレートと関連づけられたのかそれとも条件式と関連づけられたかを示すフラグ情報、そのフラグ情報に応じてサブテンプレート名あるいは条件式名（条件式ファイルの名称）、フロー方向、間隔という情報が、サブテンプレート情報２４０３および属性情報２４０２として保存される。また、キャンセルボタン１２０９を押下すると指定された各種設定はすべてキャンセルされ、保存されない。
【０１２０】
（サブテンプレートのレイアウト例）
前述したサブテンプレートについて、概要を説明する。図１３はサブテンプレートのレイアウト例（つまりサブテンプレートを用いてデータをレイアウトした例という意味。以下同じ。）を示している。サブテンプレートは、イメージコンテナ、テキストコンテナを任意数配置して、そのコンテナにレコードのどのデータ（フィールド）を割り当てるかを設定した状態で、テンプレートとして保存してあるデータを指す。同じレイアウトを一つのドキュメントで数多く使う場合に便利である。サブテンプレート内に配置されるコンテナは、前記イメージコンテナ、テキストコンテナと同様であり、各コンテナ間にはリンクを設定することも可能である。したがって、サブテンプレート内に配置されたコンテナに対して、図７Ｂに記載のレイアウト計算方法を適用することにより、レイアウトサイズを最適に変化させることが可能である。
【０１２１】
図１３はサブテンプレートのレイアウト例を示している。１３０２と１３０５はイメージコンテナ、１３０３と１３０６はテキストコンテナ、１３０７はリンクを示している。
【０１２２】
図１３では、サブテンプレート１３０１と１３０２に配置された各コンテナに流し込まれるイメージ、テキストのコンテンツサイズが異なるため、レコードごとにそれぞれ最適なレイアウトを計算してレイアウトを変更している。そのため、同じサブテンプレートを用いているにもかかわらず、サブテンプレート１３０１と１３０２ではコンテナ（部分表示領域）の位置およびサイズが異なるレイアウトとなる。なお、サブテンプレート内におけるレイアウト方法は上述した図７（Ｂ）の処理を用いて、レイアウト調整を行うこととする。
【０１２３】
（サブテンプレート条件式）
サブテンプレート条件式は、ひとつのフローエリアに対して複数種類のサブテンプレートを選択的に割り当てることができる。なお、条件式はデータベースから条件に一致するコンテンツを抽出するための式でもあるため、本願では抽出条件ともいい、該条件式（抽出条件）が設定されたフローエリアを有するテンプレートが作成されることとなる。また、フローエリアには、サブテンプレートあるいは条件式のいずれかひとつを関連付けることができる。もし、フローエリアに対してサブテンプレートを関連付けた場合、取得されたレコードは関連付けられたサブテンプレート内に流し込まれることとなる。なお、サブテンプレートを関連付ける際に条件式を設定し、該条件式に適合するレコードのみをフローエリアに関連付けられたサブテンプレートに流し込むようにしても構わない。
【０１２４】
また、条件式には条件適合時に適用されるサブテンプレートの識別情報を含む。図１５は条件式を設定するＵＩ例であり、フローエリアに設定された条件式に適合するレコードが、該条件式と関連付けられているサブテンプレートと関連付けられて、コンテナに流し込まれることとなる。そして、レコードが流し込まれたサブテンプレートがフローエリアに配置されることとなる。
【０１２５】
この入力領域は、条件式に名前を付けるテキストボックス１５０２と、もっとも基本的な条件判定を構成する要素であるＩＦ文１５０３とＥＬＳＥ文１５０４のペアを最低限有している。ＩＦ文の入力領域においては、条件の判定対象となるフィールドの選択を行うリストボックス１５０５と、判定の論理式を設定するリストボックス１５０６、判定に用いられる値を入力するテキストボックス１５０７、条件判定が正だったときに動作を決定する、該レコードを挿入するためのサブテンプレートを決定するＴＨＥＮ＿ＵＳＥ処理文１５０８、また、同じく条件判定結果が不正だったときに該レコードを挿入するためのサブテンプレートを決定するＥＬＳＥ＿ＵＳＥ処理文１５０４からなっている。判定の論理式１５０６には、「ＥＱＵＡＬ（等しい）」、「ＮＯＴ＿ＥＱＵＡＬ（等しくない）」、「ＬＥＳＳ＿ＴＨＡＮ（小さい）」、「ＬＡＲＧＥＲ＿ＴＨＡＮ（大きい）」、「ＳＴＡＲＴ＿ＷＩＴＨ（で始まる）」、「ＥＮＤ＿ＷＩＴＨ（で終わる）」などさまざまな条件が用意される。
【０１２６】
さらに、複雑な条件式を設定するためには、ＩＦ文中に複合条件を設定するためにＡＮＤ／ＯＲ接続文コンボボックス１５０９を有する。このコンボボックスでＡＮＤまたはＯＲの複合条件を選択すると、ＩＦ文中に条件行が１行追加される。ＡＮＤの場合、複数の条件がすべて正であるときのみ、ＯＲの場合いずれかの条件が正であるときにＩＦ文判定が真であると判定される。また、さらに複雑な条件分岐を設定するためには、ＥＬＳＥ＿ＩＦ文追加ボタン１５１０を有する。ボタン１５１０を押下すると、前述ＩＦ文とＥＬＳＥ文の間に、あらたにＥＬＳＥ＿ＩＦ文が追加挿入される。ＥＬＳＥ＿ＩＦ文の内容と動作は、ＩＦ文における内容と同じである。ＩＦ文が不正のときにひとつ下のＥＬＳＥ＿ＩＦ文を判定し、さらに不正のときにもうひとつ下のＥＬＳＥ＿ＩＦ文を判定し、これを続けて最後にＥＬＳＥ文を判定する、という順に処理を行う。１５１１は選択されているＥＬＳＥ＿ＩＦ文を削除する削除ボタンである。ＥＬＳＥ＿ＩＦ文が多くなった場合、スクロールバー１５１２を使って条件のリストを表示することが可能である。いずれかのＩＦ文あるいはＥＬＳＥ＿ＩＦ文で真と判定された場合、そのＵＳＥ処理文が実行される。ＵＳＥ処理文にはサブテンプレート名が入力（選択）される。このように、条件式を通して、さまざまな値を取るレコードのそれぞれに、条件に合ったサブテンプレートを自動的に選択することができ、ひとつの条件式においてさまざまなレイアウトを実現することが可能になる。この条件式をフローエリアに関連付けることによって、ひとつのフローエリアにおいて、さまざまなレイアウトを持った複数種類のサブテンプレートをフローエリア内に配置することが可能になる。
【０１２７】
ユーザは条件を入力すると、最後にＯＫボタン１５１４を押す。ＯＫボタン１５１４の押下により、ＵＩで設定されたサブテンプレート条件を示す情報が、サブテンプレート情報２４０３の一部としてメモリユニット１３６に保存される。このサブテンプレート条件式は、たとえば、図１５のＵＩに記述された（選択された）テキストをそのまま保存したテキストファイルなど、条件と条件が満たされた場合のサブテンプレートを特定できる情報であれば良い。図１５の例では、「IF field01 EQUAL value01 AND field02 EQUAL vlue02 THEN USE subtemplate01 ELSEE IF field01 EQUAL value03 AND field02 EQUAL vlue04 THEN USE subtemplate02 ELSE USE subtemplate03」をサブテンプレート条件式の示す情報として保存する。このまま保存しても、簡単な文法で記述されており、しかも図１５のようなＵＩから入力されるので文法的な誤りなどが発生する余地がない。そのために、簡単なプログラムでその条件の記述をパースして適合するサブテンプレートを決定することができる。
【０１２８】
このように条件式にはデータベースからレイアウトするためのコンテンツデータを抽出するための条件と、該条件に該当した場合に使用するサブテンプレートを関連付けて保持している。よって、抽出されたコンテンツデータは、どのサブテンプレートに配置すべきかが関連付け情報としてメモリユニット１３６に保持される。また、上述したように複数の条件式を設定することが可能であるため、抽出されたコンテンツデータの各々は、それぞれ関連付けられたサブテンプレートがあるため、各コンテンツデータが配置された複数種類のサブテンプレートがフローエリアにレイアウトされることとなる。
【０１２９】
＜フローエリアのレイアウト方法＞
図１７は、レイアウト編集アプリケーションプログラム１２１による、フローエリア内のレイアウト計算のフローを示している。図１７の手順は、図１０のステップＳ１０１０や、図７ＡのステップＳ０７０４で実行される。なおここでは、フローエリアが一つ設定されているときの説明をする。複数のフローエリアが設定されているテンプレートに関しては、Ｓ１７０１〜Ｓ１７１５の手順をフローエリア毎に繰り返せばよい。
【０１３０】
まず、レイアウト編集アプリケーションプログラム１２１は、レイアウトするためのデータを、フローエリアに関連付けられているデータベースから取得し（Ｓ１７０１）、レイアウトするレコードの数をｎに代入する（Ｓ１７０２）。詳細にはレイアウト編集アプリケーションを構成するモジュールの１つであるユーザインタフェースがレイアウトするためのレコードを含むデータベースと通信することにより、取得すべきレコード数を認識することができる。
レイアウトするレコードの数が０であった場合には、レイアウトの処理は行う必要がないので、処理を行わず終了する（１７０３）。次に、レイアウト編集アプリケーション１２１は、１つめのレコードからチェックをするためにレコードのチェック用の変数ｋに１を代入する（Ｓ１７０４）。また、レイアウトされるサブテンプレートの数を代入する変数Ｎｕｍに０を代入する（Ｓ１７０５）。そして、レイアウト編集アプリケーション１２１は、ｋ番目のレコードのデータをデータベースから読み出す（Ｓ１７０６）。なお、読み出されたレコードのコンテンツデータは一時的にメモリユニット１３６に保持される。
【０１３１】
次にレイアウト編集アプリケーション１２１は、着目フローエリアに関するフローエリア情報２４０１を参照して、サブテンプレートが関連付けられているか、それとも条件式が関連付けられているかを判定する（Ｓ１７０７）。条件式が関連付けられている場合、レイアウト編集アプリケーション１２１は、後述する図１６Ａのフローチャートに基づき、ｋ番目のレコードをサブテンプレートに従ってレイアウトする（Ｓ１７０８）。図１６Ａの手順では、フローエリアにサブテンプレートが関連付けられている場合はそのサブテンプレート情報を読み出し、条件式が関連付けられている場合はステップ１７０８で条件式を評価し、その結果得られたサブテンプレートを読み出して、ｋ番目のレコードついて、読み出したサブテンプレートに従ってレイアウトを行う。一方、フローエリアに条件式が関連づけられていないと判定された場合には、図１４のフローチャートに基づき、そのフローエリアに関連づけられたサブテンプレートに従ってｋ番目のレコードをレイアウトする（Ｓ１７０９）。ステップＳ１７０８、Ｓ１７０９でサブテンプレートに従ってレイアウトされたデータはフローエリアに流しこまれるまでメモリユニット１３６に保存される。保存されるのは、レイアウト計算の結果得られた、コンテンツを流しこんだ後の各コンテナの相対的な位置関係とサイズおよびコンテナの内容である。たとえば、サブテンプレート上で適当な座標原点を決め、その座標系で各コンテナの位置とサイズとが示されたコンテナの位置及びサイズ情報が保存される。あわせて、コンテナ内に収めるためにコンテンツについても、同じ座標系で位置とその位置に配置されるデータを示す情報とが保存される。これらをレイアウト済みサブテンプレート情報と呼ぶことにする。
【０１３２】
サブテンプレートのレイアウトが終了したら、レイアウト編集アプリケーション１２１は、変数Ｎｕｍを１増やし（Ｓ１７１０）、次のデータに処理を進めるため、変数ｋを１増やす（Ｓ１７１１）。そして、レイアウト編集アプリケーション１２１は、レコードするデータ数ｎとｋを比較する（Ｓ１７１２）。もし、ｋがｎ未満であるなら、ステップＳ１７０６へ進み、そのｋ番目のデータについて、処理を繰り返す。ｋがｎ以上であるなら、サブテンプレートのレイアウトは終了し、フローエリアにレイアウトされたサブテンプレートをレイアウトする処理へと進む。
【０１３３】
フローエリアにサブテンプレートをレイアウトするために、レイアウト編集アプリケーション１２１は、フローエリア情報２４０１からフローエリアのサイズを取得し（Ｓ１７１３）、レイアウトするサブテンプレートのサイズを取得する（Ｓ１７１４）。詳細には後述する図１６のフローチャートによりコンテンツデータを配置すべきサブテンプレートが特定され、さらにサブテンプレート内におけるレイアウトの最適化処理の実行結果がメモリユニット１３６に保持されているため、レイアウトするサブテンプレートのサイズを取得することが可能となる。なお、本実施形態では、サブテンプレートの外枠のサイズは、サブテンプレート内のコンテナのサイズによって決定する。すなわち、サブテンプレート内での自由なレイアウト処理によって、サブテンプレートのレイアウト後の大きさは、レコードの内容に依存して変化する。そして、サブテンプレートに流し込まれたレコードによるレイアウト結果は上述した通りメモリユニット１３６に保持されているため、レイアウト編集アプリケーション１２１は、レイアウトすべきサブテンプレートのサイズを取得することが可能となる。なお、ユーザによってはサブテンプレートの外枠サイズは一定であることを望む場合も考えられるため、所定の処理によりサブテンプレートの外枠サイズを固定にするか可変にするか切り替えられるようにしても構わない。
【０１３４】
レイアウト編集アプリケーションは、フローエリア情報２４０１に設定されているフロー方向とフロー間隔を適用しながらコンテンツデータがレイアウトされたレイアウト済みのサブテンプレートをフローエリア内に配置する（Ｓ１７１５）。なお、フロー方向とはサブテンプレートの配置方法であり、フロー間隔とはサブテンプレート間の間隔を指す。ここで、フローエリアに配置されるのは、ステップＳ１７０８及びステップＳ１７０９で保存されたレイアウト済みサブテンプレート情報である。すなわち、具体的には、ステップＳ１７１５では、レイアウト済みサブテンプレート内の相対的な座標系で定義されたコンテナの位置及びサイズと、コンテンツの位置及び内容とを、フローエリアの座標系に変換する。このとき、フローエリアに納まらないレイアウト済みテンプレートがあれば、サブテンプレートのサイズについて縮小変換を行う必要がある。なお、サブテンプレートの縮小変換を行いたくない場合は、後述するページ繰り返し機能により対応することも可能である。
【０１３５】
（サブテンプレートのレイアウト（条件式なし））
ステップＳ１７０９におけるサブテンプレートこのレイアウト処理のフローは図１４に示す通りである。図１４において、まずレイアウト編集アプリケーションは、データベースからレイアウトするためのデータを取得し、（Ｓ１４０１）。サブテンプレート内の各コンテナにレイアウトするコンテンツデータのサイズを取得する（Ｓ１４０２）。詳細には、上述したようにレイアウト編集アプリケーション１２１を構成するモジュールの１つであうユーザインタフェースがデータベースとの関連付け処理を行うことにより、データベースのデータを参照することが可能となり、その際に該データを解釈することによりサイズ等を取得できる。なお、ステップＳ１４０１とＳ１４０２は同時でも良い。Ｓ１４０２の処理は、レイアウト編集アプリケーション１２１が、Ｓ１４０１により取得したデータの情報を解析することによりコンテンツデータのサイズを取得することが可能となる。なお、取得されたコンテンツデータのサイズはメモリユニット１３６に保持されることとなる。
【０１３６】
レイアウト編集アプリケーションは、Ｓ１４０２により取得したデータサイズに基づいて、各コンテナについてレイアウト計算を行い（Ｓ１４０３）、レイアウトを最適化する（Ｓ１４０４）。最適化の方法は前述した通り図７Ａの処理を用いて実行される。
【０１３７】
レイアウト編集アプリケーション１２１は、Ｓ１４０４により最適化されたレイアウトを決定し（Ｓ１４０５）、レイアウトするデータを流し込み（Ｓ１４０６）、表示する（Ｓ１４０７）。なお、Ｓ１４０５により決定されたレイアウトは一時的にメモリユニットに保持されることとなる。また、Ｓ１４０７の表示はドキュメントが完成したときにまとめて行うのであれば、ステップＳ１４０７は不要である。
【０１３８】
（サブテンプレートのレイアウト（条件式あり））
図１６（Ａ）、図１６（Ｂ）は、図１７のステップＳ１７０８において、フローエリアに条件式が設定されている場合に、データベースレコードから条件判定を行い、レコードを挿入するためのサブテンプレートを選択する処理のフローチャートである。
【０１３９】
図１６（Ａ）においては、レイアウト編集アプリケーション１２１はまず、データベースからレイアウトするためのデータを取得する（Ｓ１６０１）。
【０１４０】
次に、レイアウト編集アプリケーション１２１は、データをレイアウトするサブテンプレートを決定する（Ｓ１６０２）。なお、現在対象としているレコードのコンテンツデータがフローエリアに設定されている条件と合致しない場合は、該対象レコードをレイアウトすることなく次のレコードを対象とする。つまり、条件式に合致するコンテンツデータを有するレコードがレイアウトの対象レコードとして取り扱われる。なお、この詳細については図１６（Ｂ）で説明する。
【０１４１】
次に、レイアウト編集アプリケーション１２１は、各コンテナにレイアウトするデータのサイズを渡す（Ｓ１６０３）。詳細には、レイアウト編集アプリケーションがＳ１６０１により取得されたデータを解析することにより、レイアウトすべきデータのサイズを認識でき、該データのサイズと各コンテナを関連付けることによりＳ１６０３の処理は実現される。
【０１４２】
そして、レイアウト編集アプリケーション１２１は、Ｓ１６０３により渡されたデータサイズに基づいて、各コンテナにおいてレイアウト計算し（Ｓ１６０４）、レイアウトを最適化する（Ｓ１６０５）。最適化の方法は前述した通り、コンテンツデータのサイズに応じて調整されるものである。
【０１４３】
レイアウト編集アプリケーション１２１は、最適化されたレイアウトを決定し（Ｓ１６０６）、レイアウトするデータを流し込み（Ｓ１６０７）、フローエリアにレイアウトして表示する（Ｓ１６０８）。なお、表示はドキュメントが完成したときにまとめて行うのであれば、ステップＳ１６０８は不要である。
【０１４４】
図１６（Ｂ）は、図１６（Ａ）中のサブテンプレートを決定する処理Ｓ１６０２の詳細を記述したフローチャートである。
【０１４５】
レイアウト編集アプリケーション１２１は、着目フローエリアのフローエリア情報２４０１に基づいてサブテンプレート条件式ファイルを読み、条件式の最初のＩＦ文を取り出し（Ｓ１６１１）、ステップＳ１６０１で受け取ったレコードからＩＦ文の判定対象としているフィールドの値を取り出す（Ｓ１６１２）。なお、データベースから取得した各レコードのフィールドの値は、データベースと通信することにより取得しても構わないし、各レコードのフィールドの値をメモリユニット１３６に保持することにより、レイアウト編集アプリケーションがメモリユニット１３６を参照して、フィールドの値を取り出すようにしても構わない。
【０１４６】
レイアウト編集アプリケーション１２１は、Ｓ１６１２により取り出した各フィールドの値がＳ１６１１により取り出した条件に合致するかどうかを判定する（Ｓ１６１３）。すなわち、条件式はメモリユニット１３６に保持されているため、レイアウト編集アプリケーション１２１がメモリユニットを参照することにより具体的なフィールド値で評価することが可能となり、Ｓ１６１３に記載の判定処理を行える。  
レイアウト編集アプリケーション１２１が、フローエリアに設定されている条件式と判定対象として取り出したフィールドの値が合致すると判定した場合、すなわち評価の結果が真であった場合、その条件に該当するＵＳＥ処理を選択し、そこに記述されたサブテンプレート名をメモリユニット１３６（サブテンプレート情報２４０３）に保存する（Ｓ１６１４）。この処理により現在対象としており、条件式と合致すると判定されたレコードが有するコンテンツデータを配置するためのサブテンプレートが関連付けられて保持される。なお、この関連付けられた情報も上述の関連付け情報の１つとしてメモリユニットに保持される。
【０１４７】
レイアウト編集アプリケーション１２１は、Ｓ１６１３により合致しないと判定した場合、別のＩＦ文があるかどうかを判定する（Ｓ１６１５）。あれば同様にＩＦ文の判定を続けるため、Ｓ１６１１の処理へ入る。最後にどのＩＦ文にも合致しなかったレコードは、ＥＬＳＥ文のＵＳＥ処理を選択し、該当するサブテンプレート名を保存する（Ｓ１６１６）。
【０１４８】
なお、図１６（Ｂ）の処理では、Ｓ１６１６があることにより、条件に適合しないレコードもサブテンプレートに流し込まれることとなる。しかし、ＥＬＳＥ文に使用すべきサブテンプレートが指定されていない場合、条件に適合しないレコードはサブテンプレートに流し込まないようにしても構わない。つまり、ＥＬＳＥの場合に使用すべきサブテンプレートを指定しないことにより、サブテンプレートに流し込まれるレコードをフローエリアに設定された条件式に適合するものに絞り込むことが可能となる。
【０１４９】
以上の処理により、複数種類のサブテンプレートを使用する条件式が設定されている場合、フローエリアには複数種類のレイアウト済みサブテンプレートが配置されることとなる。さらに条件式によっては取得した全レコードをサブテンプレートに流し込むのか、または条件式に適合したレコードのみをサブテンプレートに流し込むのかを切り替えることができる。
【０１５０】
図１８（Ａ）は、フローエリア内にサブテンプレートがレイアウトされた例を示している。図１８（Ａ）で、１８０１はページマージン、１８０２と１８０３は固定のコンテナ、１８０４はフローエリア、１８０５はサブテンプレートを示している。また１８０６は横フロー間隔であり、１８０７は縦フロー間隔を現している。フローエリアに４つのサブテンプレートがレイアウトされており、フローエリアの左上を起点として、前記フローエリアの設定ダイアログで設定された適切なフロー間隔を空けてそれぞれが配置されている。
【０１５１】
フローエリアにおいて使用される各サブテンプレートは、条件式の結果得られたもので、そのサブテンプレート内の詳細なレイアウトデザインは流し込まれるレコードに含まれるコンテンツデータのサイズが異なるため、レイアウト結果もまちまちである。
【０１５２】
図１８（Ｂ）は、そのような条件式に基づいて得られたさまざまなサブテンプレートによって、フローエリア内のフローが行われている様子を示す。１８０４はフローエリアであり、その中に１８０５で表されていたサブテンプレートの詳細レイアウトが記述されている。このように、フローエリアのサイズは、いくつのサブテンプレートがレイアウトされても固定である。もしフローエリアのサイズをはみ出るようなサブテンプレートのレイアウトサイズがあった場合、フローエリアからはみ出る部分はクリッピングされて表示されない。最後に、レイアウト結果を表示して終了する（Ｓ１７１６）。
【０１５３】
なお、サブテンプレートがフローエリアからはみ出ると判定された場合、フローエリアに収まるようにサブテンプレートを縮小することも考えられる。よって、サブテンプレートがフローエリアをはみ出すと判定された場合、クリッピング処理をするか、縮小処理をするかを指定するためのダイアログが表示されるようにしても構わない。また、図１８の（Ｂ）には条件式より４種類のレイアウト済みのサブテンプレートが配置されている様子を表している。
【０１５４】
以上の手順によりフローエリアに配置されるレコードの所望のフィールドの値に応じて、当該レコードの配置のために所望のサブテンプレートを指定することができる。このため、文書におけるオブジェクトのレイアウトの自由度が高くなり、より高品質の文書を作成することができる。
【０１５５】
また、フローエリアに対して設定される条件式により、全レコードを流し込むのか条件式に適合したレコードのみを流し込むのかを設定することが可能となり、ユーザが所望とするレイアウトを簡易に作成することが可能となる。
【０１５６】
図２５に具体例を示す。図２５（Ａ）に示すフローエリアが定義されたテンプレート２５０２ａにおいて、そのフローエリアには条件式２５０１が関連づけられ、サブテンプレート情報２４０３として保存されている。この条件式２５０１により、フィールドデータＡが１であれば、そのレコードにはサブテンプレート２５０３が、フィールドデータＡが２であれば、そのレコードにはサブテンプレート２５０４が、それ以外の場合にはそのレコードにはサブテンプレート２５０４が使用されることとなる。レイアウト対象のデータベースには、レコード２５０６，２５０７が含まれている。
【０１５７】
ここで図２５（Ｂ）に示すように最初にレコード２５０６をフェッチする。この場合、図１７、図１６の手順にしたがって、このレコードについてまず条件式「フィールドデータＡ＝１」が評価され、真でないので次に「フィールドデータＡ＝２」が評価される。結局この条件も真でないので、その場合のＵＳＥ文によりサブテンプレート２５０５を用いてレコード２５０６はレイアウトされる。これがレイアウト例２５０２ｂである。ただし、図１７の手順では、サブテンプレートをフローエリアに流しこむのはすべてのレコードについてレイアウトしてからなので、図２５（Ｂ）のようなプレビュー表示は行われない。
【０１５８】
次にレコード２５０７がフェッチされる。この場合には条件式「フィールドデータＡ＝１」が真であるので、その場合のＵＳＥ文によりサブテンプレート２５０３を用いてレコード２５０７はレイアウトされる。
【０１５９】
以上より、レコード２５０６および２５０７の判定処理が終了し、流し込むべきサブテンプレートが決定されたため、実際にレコードに含まれる各コンテンツデータがサブテンプレート内の関連付けられた各コンテナにおいてレイアウト調整されることによりレイアウト２５０２ｃが得られることとなる。このように、レコード毎に相異なるサブテンプレートをユーザが設定した条件式に基づいて使用できる。
【０１６０】
［第２実施形態］
従来、フローエリアは１ページの範囲内に限られ、１ページの範囲内にサブテンプレートを収める処理を行うことによって、はがきなど紙面の限られたドキュメントに対応したレイアウト結果を実現することを目的としていた。そのため、多数のページにわたってサブテンプレートをレイアウトすることは考慮されていない。しかし、顧客ごとにカスタマイズされたドキュメントを作るというニーズの中からは、ページ数を限定せず、顧客の興味の範囲に応じて、自由なページ数の加減のあるドキュメントを作成するという場面が存在する。
【０１６１】
本発明の第２実施形態では、フローエリア内にサブテンプレートをレイアウトした結果、サブテンプレートが領域外にオーバーフローする際、フローエリアを有する新しいページを自動的に生成して、そこへ溢れたサブテンプレートを連続してレイアウトする方法を含んだ自動レイアウトシステムについて説明する。なお、このような機能を繰り返しページ機能という。
【０１６２】
この方法の利点は、ひとつのフローエリアを定義しておけば、そのフローエリアに関連づけられたデータベースのレコードはすべてそのフローエリアの定義に従ってレイアウト処理でき、ひとつの文書としてまとめることができることである。なお第１実施形態と共通する部分（図面やその説明）については記載を省略する。
【０１６３】
＜複数ページの中の繰り返しページ＞
図１９は、複数のページを持つドキュメントに対して、テンプレート作成モードにおいて、フローエリアを挿入する際に呼び出す設定ダイアログのＵＩ例である。ラジオボタン１９０２からフローエリアのＯＮ／ＯＦＦを選択し、ＯＮの場合に、テキストボックス１９０３において、フローエリアを配置するページ番号を設定する。ここで、開始ページは１以上であり、終了ページはそのドキュメントの最大ページ以下になるように、ＵＩによって入力は制限される。
【０１６４】
さらにテキストボックス１９０４において、配置されたフローエリアの中から、繰り返しインスタンスを生成してサブテンプレートをフローしていく繰り返しページ範囲を設定する。繰り返しページについては後述する。ここで繰り返しページの開始ページは、フローエリアの開始ページ以上であり、終了ページはフローエリアの終了ページ以下であるように、ＵＩによって入力を制限される。また少なくとも１ページは必ず繰り返しページとなるように制限される。これは、ドキュメントの先頭部分と末尾部分には、それぞれ繰返しになじまないヘッダやフッタが含まれることがあるためである。
【０１６５】
すなわちフローエリアの開始ページから、繰返しページの設定における開始ページの前のページまでが、繰り返されないページである。また、繰返しページの設定における終了ページの後のページから、フローエリアの終了ページまでが繰り返されないページである。
【０１６６】
設定ダイアログでＯＫを押下した場合、設定したページ範囲にしたがってフローエリアが各ページに挿入され、これらの情報は、複数のページをひとまとめにした複数ページにわたるテンプレート情報としてメモリユニット１３６に保存される。
【０１６７】
ひとまとめにするために、たとえばグループの識別情報を、テンプレート情報に持たせることで、ひとまとまりとして扱うことができる。また、設定したラジオボタン１９０２を示すフローエリア繰返しフラグや、各種ページの設定は、ページごとにフローエリア情報２４０１の一部としてメモリユニット１３６に保存される。ただし、フローエリアの位置をのぞけば他の属性情報やサブテンプレート情報、マルチレコード情報は各ページについて同一である。そこで、フローエリアの位置以外の情報については、同一グループに属するテンプレートについては、たとえば先頭ページについて設定された情報を参照する。
【０１６８】
＜フローエリアの位置制御＞
複数のページにわたって配置されたフローエリアは、それぞれのページでそれぞれの位置と大きさを占めることができる。図２０は、各ページにおいてフローエリアの位置と大きさを調整するためのＵＩ例を示している。２００１はマージンエリア、２００４のフローエリア自体は前述のように、線種や色によって通常のコンテナとは異なる表現でわかりやすく表示されるが、図２０のように、フローエリアはレイアウト編集領域内において、図形描画ソフトウェアで公知かつ一般的な、サイズ変更ハンドル２００３によってサイズを変更することが可能である。フローエリアにおいては、その存在可能領域をマージンエリア内に限定することが適当である。なお、フローエリアサイズが変更された場合、変更後のサイズがフローエリアの情報としてメモリユニット１３６に保持される。
【０１６９】
＜繰り返しページ＞
図２１は、１ドキュメント中の複数のページにわたってフローエリアを配置されている様子と、そのフローエリアに実際のデータを挿入したときにレイアウト済みページの生成される様子の概念図である。
【０１７０】
図２１（Ａ）の２１０２は繰り返しページである。２１０１と２１０３は繰り返しページではないが、フローエリアの存在するページである。２１０４はフローエリアをあらわしている。すなわち、図２１（Ａ）のテンプレートは、図１９に示す例に従って構成されている。また２１０５と２１０６は通常のコンテナをあらわしている。これらの通常コンテナはフローエリアとは関係を持たない。通常のコンテナには、そこに関連づけられたコンテンツが収められ、マルチレコード処理の対象とはならない。
【０１７１】
フローエリア２１０４は複数ページにまたがってはいるが、連続したひとつのエリアとしてレイアウト処理アプリケーションに扱われる。すなわち、フローエリアの位置およびサイズを除き、その他のフローエリア情報は共通に参照される。すなわち、フローエリアを繰り返す指定が行われた場合、ユーザは、指定したページに従って複数ページのテンプレートを定義する必要がある。このとき、フローエリアの位置以外の属性は、すべて共通とする。
【０１７２】
この様に構成することで、実際のデータを挿入したときには、この図では２１０１〜２１０３の３ページに跨るフローエリア全体を使ってデータベースのレコードをすべて配置していくことになる。
【０１７３】
図２１（Ｂ）に、図２１（Ａ）のように設定されたフローエリアに対して実際のデータを挿入し、レイアウト済みドキュメントが得られた状態を示す。２１０７は１種類のサブテンプレートをあらわしている。ただし、簡単のため実際にフローされるサブテンプレートやコンテナの細部はごく省略して表記している。図２１（Ｂ）では、繰り返しページに指定された図２１（Ａ）での２つ目のページ２１０２が、レコードの数に応じて自動的に生成され繰り返されていることが示されている。つまり、図２１では２１個のレコードをフローエリアに流すことになっていたが、図２１（Ａ）に記載のページ２１０１〜ページ２１０３のフローエリアのみでは、２１個のレコードをレイアウトしたサブテンプレートを収めることができないため、全レコードがフローエリアに配置されるまで繰り返しページに指定された２１０２が自動的に生成されることとなる。
【０１７４】
なお、本実施例では予め繰り返しページを指定する場合について記述したが、自動的に繰り返しページが指定されるようにしても良い。その場合、一例としてフローエリアの面積が一番大きいページを繰り返しページとすることが考えられる。これは、サブテンプレートが一番多く配置されるページ（つまり、一番大きいフローエリアを有するページ）を繰り返しページに指定することにより、無駄なページが繰り返し生成されることを防ぐことが可能となるためである。
【０１７５】
このように複数のページにまたがってフローエリアが存在する場合、ページの性格によって、どのページを繰り返しページにするかを設定できるとドキュメントの表現力向上に効果がある。図２１の例でいえば、１ページ目のフローエリアは例えば顧客名を通常コンテナ部に記載して、顧客へのあいさつ文を載せることが考えられる。そのあとからマルチレコードによるレコードデータをフローエリアに表示し、繰り返しページで多数のレコードデータを処理した後、３ページ目のフローエリアで、販売担当者名をいれ、結びのあいさつ文を載せることが考えられる。このように、複数のページにおいて、同じようなレコードデータを多数配置するドキュメントの形態をとりつつも、ページによってその内容に多様性を持たせることが可能になるのである。
【０１７６】
＜レイアウト処理のフロー＞
図２２は、本発明の実施形態２における、レイアウト済みコンテンツをフローエリアに流しこむ際のフローチャートである。図２２の処理は、第１実施形態における図１７のステップＳ１７１５として実行される。このフローチャートでは、サブテンプレートを複数のページからなるフローエリアに配置する方法を記述している。
【０１７７】
まず、レイアウト編集アプリケーション１２１は、フローエリア内に配置するサブテンプレート数を取得し、ｎに代入する（Ｓ２００１）。この数は、図１７のステップＳ１７１２で確定した値ｋもしくはｎである。もしｎが０だった場合には（Ｓ２００２）、フローエリアにレイアウトする必要はないので、処理を行わず終了する（Ｓ２００３）。ここまでの処理の詳細については上述してあるため省略する。
【０１７８】
次にレイアウト編集アプリケーション１２１は、変数ｋを１に初期化する（Ｓ２２０４）。ドキュメントの先頭に、繰り返しページではないフローエリアの存在するページがあるかどうかの情報を取得し、あれば、文書の先頭において繰返しでないページに相当するテンプレート情報をテンプレートデータから読み出す。レイアウト編集アプリケーション１２１は、その繰り返しページでない開始ページをｓ、終了ページすなわち繰り返しページの直前のページをｅに代入する（Ｓ２２０５）。この情報は、図１９のＵＩによるユーザ入力によりメモリユニット１３６に保存されたフローエリア情報から読み出される。
【０１７９】
次に、レイアウト編集アプリケーション１２１は、ページｓ〜ｅに、読み出したテンプレートのフローエリア情報にしたがって、先頭から順に着目ページ内（ページｓ〜ｅ）に収まるだけのサブテンプレートを順にフローしていき(Ｓ２２０６)、フローが終わった時点で、ページｓ〜ｅに収まったサブテンプレートの数を求めてｔとする（Ｓ２２０７）。この時点でレイアウト編集アプリケーション１２１は、ｋにｔを代入し（Ｓ２２０８）、ｋとｎとを比較する（Ｓ２２０９）。なお、ｋの値はメモリユニット１３６に一時的に保持される。もしｋがｎ未満であるならば全てのサブテンプレートがフローエリアに配置されていないこととなるため、ステップＳ２２１０に進む。もしｋがｎに達していたら、すべてのサブテンプレートをフローし終えたことになるので処理を終了する。
【０１８０】
レイアウト編集アプリケーション１２１は、まず現在のレイアウト済みページ数ｐをメモリユニット１３６に一時的に記憶する（Ｓ２２１０）。次に、レイアウト編集アプリケーション１２１は、文書の末尾において繰返しでない部分に相当するテンプレート情報をテンプレートデータから読み出す。ドキュメントの後尾から繰り返しページでないフローエリアの存在するページ番号（繰り返しページ範囲に指定された直後のページから最終ページ）を取得し、開始ページをｓ、終了ページをｅに代入する（Ｓ２２１１）。これらの情報も、図１９のＵＩによるユーザ入力によりメモリユニット１３６に保存されたフローエリア情報から読み出される。
【０１８１】
レイアウト編集アプリケーション１２１は、ページｓ〜ｅに、読み出したテンプレートのフローエリア情報にしたがって先頭から順に収まるだけのサブテンプレートを順にフローしていき（Ｓ２２１２）、そのフロー処理が終了したら、ページｓ〜ｅに収まったサブテンプレートの数を取得しｔとする（Ｓ２２１３）。その次に、レイアウト編集アプリケーション１２１は、ｋ＋ｔとｎとを比較する（Ｓ２２１４）。ｋの値については上述した通りメモリユニット１３６に一時的に保持されているため、レイアウト編集アプリケーション１２１は、ｋの値を認識することができる。ｋ＋ｔがｎ未満であったらステップＳ２２１５に進む。ｋ＋ｔがｎに達していたら、繰返しページを用いずにすべてのサブテンプレートをフローし終えたことになるので処理を終了する。
【０１８２】
Ｓ２２１４までの処理を終えても図２２に記載のフローチャートの処理が終了しない場合、先頭の繰り返しページでないページと後尾の繰り返しページでないページとを合わせてもレイアウトすべきレコード（レイアウト済みのサブテンプレート）がすべて収まらないと判断される。
【０１８３】
そこで、レイアウト編集アプリケーション１２１は、ステップＳ２２１２においてフローしたｐより後ろのレイアウト済みページのインスタンス（レイアウトしたデータ）を破棄する（Ｓ２２１５）。つまり、繰り返しページに対してＳ２２１２においてフローしたｐより後（繰り返しページ範囲に指定された直後のページから最終ページ）のレイアウト済みインスタンスを流し込むためにＳ２２１５の処理が行われることとなる。
【０１８４】
レイアウト編集アプリケーション１２１は、繰返しページ部分に相当するテンプレート情報をメモリユニット１３６から読み出す。そしてドキュメント内の繰り返しフローエリアのページ番号を取得し、開始ページをｓ、終了ページをｅとする（Ｓ２２１６）。これらの情報もメモリユニット１３６に保持されているフローエリア情報２４０１から得る。
【０１８５】
レイアウト編集アプリケーション１２１は、繰り返しページｓ〜ｅのフローエリアに対して収まるだけのサブテンプレート（レイアウト済みインスタンス）をフローする（Ｓ２２１７）。レイアウト編集アプリケーション１２１は、繰り返しページｓ〜ｅに収まったサブテンプレートの数を取得してｔに代入し（Ｓ２２１８）、ｋにｔを加えて再度ｋに代入する（Ｓ２２１９）。ここで、ｋとｎを比較する（Ｓ２２２０）。Ｓ２２２０においてレイアウト編集アプリケーションがＮｏと判定した場合、つまりＳ２２０２で取得した全サブテンプレートを流し込めると判定された場合、図２２におけるフローチャートの処理を終了する。
【０１８６】
しかし、Ｓ２２２０でＹｅｓと判定された場合、再度Ｓ２２１０へと進む。Ｓ２２１０の処理に入った後、Ｓ２２１１からＳ２２１３までの処理を行い、Ｓ２２１４により再度Ｙｅｓと判定された場合、Ｓ２２０１で取得した全サブテンプレート（レイアウト済みインスタンス）を先頭の繰り返しページでないページおよび１つめの繰り返しページおよび後尾の繰り返しページでないページにあるフローエリアを用いても収めることができないこととなる。よって、再度Ｓ２２１５へと進み繰り返しフローエリアを含むページが生成されることとなる。以上の処理をＳ２２２０でＮｏと判定されるまで繰り返すことにより、繰り返しページが全サブテンプレートを流し込めると判断されるまで自動的に生成され続ける。なお、この生成しょりは所定のページを複製することにより生成するものであっても構わない。
【０１８７】
ここで、以上の処理を詳細に説明するために図２１を用いて具体的に説明する。まずＳ２２０１により取得されたサブテンプレート（レイアウト済みインスタンス）から、ページ２１０１のフローエリアに収まるだけのサブテンプレートを流し込む。ここまでがＳ２２０１からＳ２２０８である。
【０１８８】
続いて、取得した全サブテプレートが流し込まれていないと判定された場合（Ｓ２２０９）、残りのサブテンプレートをページ２１０３のフローエリアに流し込む。ここまでがＳ２２１０からＳ２２１３である。
【０１８９】
そして、ページ２１０１および２１０３のフローエリアを用いてもＳ２１０１で取得した全サブテンプレートを流し込むことができないと判定された場合（Ｓ２２１４）、ページ２１０３に流し込んだサブテンプレートを削除して、該サブテンプレートを繰り返しページであるページ２１０２のフローエリアに流し込む。ここまでの処理がＳ２２１５からＳ２２１９である。以上の処理により、Ｓ２１０１で取得されたサブテンプレートが順次ページ２１０１および２１０２のフローエリアに流し込まれることとなる。
【０１９０】
ここでＳ２１０１において取得した全サブテンプレートが収まったか否かを判定し（Ｓ２２２０）、収まりきらないと判定した場合、ページ２１０３のフローエリアへ収まりきらなかったサブテンプレートを再び流し込む。ここまでの処理によっても全サブテンプレートが流し込まれないと判定された場合（Ｓ２２１４−Ｙｅｓ）、再びＳ２２１５へと進み、繰り返しページであるページ２１０２が生成され、該生成されたページ２１０２のフローエリアにサブテンプレートが流し込まれることとなる。以上の処理を繰り返すことにより、図２１（Ｂ）に記載されているように、全サブテンプレートが収まるまで繰り返しページである２１０２のみが繰り返して複製（生成）されることとなる。
【０１９１】
なお、繰り返しページとして複数ページを指定した場合、取得するサブテンプレート数によっては、空白ページが生じてしまうことが考えられる。例えば繰り返しページとして３つのページ群を指定した場合、取得したサブテンプレートを収めることができないことにより、繰り返しページ群が生成されることとなるが、この際に生成されるのは３つのページ群が生成されることとなる。しかし、取得されたサブテンプレート数によっては新たに生成された繰り返しページ群の２ページ目までで収まってしまい、繰り返しページに指定された３ページ目が空白になることが想定される。この場合、空白ページはユーザの設定により自動的に削除されることとなる。
【０１９２】
このように、本実施形態においては、フローエリアにテンプレートが納まらない場合には、自動的に新しいページを生成して、１ページのフローエリアに入りきらないサブテンプレートを連続してフローさせることにより、ページ制限のないドキュメントを作成することを目的とする。なお、生成される新しいページはユーザによって予め指定された繰り返しページであるためユーザの意図を反映したページを構成することが可能となるだけでなく、上述したように自動的に繰り返しページが設定されるようにすることにより、ユーザの操作性を向上することが可能となる。
【０１９３】
また、繰り返しページ直前までのページおよび繰り返しページを用いることにより、全てのレイアウト済みサブテンプレートを配置できた場合（Ｓ２２２０−Ｙｅｓの場合）、図２２のフローチャートは終了することとなるが、フッタページが指定されており、フッタページに出力すべきコンテンツデータがある場合には、フッタページを加えた上で処理を終了する。
【０１９４】
また、本実施形態では、複数ページにわたってひとつの連続したフローエリアを定義することができる点に注目して記述しており、特に複数のフローエリアを１ドキュメント中に配置することについては言及していない。しかし、もちろん複数のフローエリアをそれぞれ複数ページにわたって配置することは可能であることはいうまでもない。
【０１９５】
本発明によれば、データベースから抽出したレコードデータの内容(値)に応じて異なったサブテンプレートを選択して、選択されたサブテンプレートに対してレコードを挿入する。そして、その挿入処理をレコードごとに繰り返すことによって、多種のサブテンプレートとレコードの結びついた部分レイアウトが得られる。そのレイアウト済みサブテンプレートを、フローエリアに順にフローさせることで、従来の流し込みでは実現できない、複雑なレイアウト切り替えを繰り返すフローレイアウトを実現することができる。
【０１９６】
また、多数のレコードをフローした結果としてサブテンプレートが１つのフローエリアからあふれてしまう場合、自動的にレイアウトエリア（フローエリア）を含むページを追加生成して、自由度の高いページ数をもつドキュメントを作成することが可能になる。これは、カタログなどの、項目数があらかじめ定まらない、ある程度類似しているが詳細なレイアウト構造が異なるような部分レイアウトを、羅列して表現するようなドキュメントを作成する際に非常に有効な効果となる。
【０１９７】
［第３実施形態］
本実施形態では、第１実施形態及び第２実施形態をさらに発展させたものであり、単にフローエリアを複数ページに拡張するのみならず、サブテンプレート間やフローエリアとコンテナとの間などで、区切ることができるレイアウト編集アプリケーションプログラムを説明する。そのために、第２実施形態を下敷きとして、それと共通するする部分、および第１実施形態と共通する部分については説明は省略し、相違する部分について説明する
＜サブテンプレート条件式＞
条件式は、ひとつのフローエリアに対して複数のサブテンプレートを割り当てるための仕組みである。フローエリアには、サブテンプレートあるいは条件式のいずれかひとつを関連付けることができる。図２６は、条件式を設定するＵＩ例の図である。これは第１実施形態と同様である。ただし、本実施形態では、サブテンプレート情報として保存される条件式に、さらにサブテンプレートと同じ条件で区切り情報を含めて入力することができる。
【０１９８】
図２６は、データベースからひとつのレコードを受け取って処理を行う、ひとつの条件式を設定するためのＵＩ例である。この入力領域は、条件式に名前を付けるテキストボックス２６０２と、もっとも基本的な条件判定を構成する要素であるＩＦ文２６０３とＥＬＳＥ文２６０４のペアを最低限有している。
【０１９９】
ＩＦ文の入力領域においては、条件の判定対象となるフィールドの選択を行うリストボックス２６０５と、判定の論理式を設定するリストボックス２６０６、判定に用いられる値を入力するテキストボックス２６０７、条件判定が正だったときに動作を決定する、該レコードを挿入するためのサブテンプレートを決定するＴＨＥＮ＿ＵＳＥ処理文２６０８。さらに、サブテンプレートが変更されるときに付帯するＢｒｅａｋ処理（文書区切り処理）を選択するＷＩＴＨ処理文２６０９、同じく条件判定結果が不正だったときに該レコードを挿入するためのサブテンプレートを決定するＥＬＳＥ＿ＵＳＥ処理文２６０４からなっている。
【０２００】
判定の論理式２６０６には、ＥＱＵＡＬ（等しい）、ＮＯＴ ＥＱＵＡＬ（等しくない）、ＬＥＳＳ＿ＴＨＡＮ（小さい）、ＬＡＲＧＥＲ＿ＴＨＡＮ（大きい）、ＳＴＡＲＴ＿ＷＩＴＨ（で始まる）、ＥＮＤ＿ＷＩＴＨ（で終わる）などさまざまな条件が用意される。また、論理式２６０６で判定される判定値２６０７に"ＦｉｅｌｄＮＮ"という具合に、Ｆｉｅｌｄ値を指定した場合には、２６０５に入力されたＦｉｅｌｄ値と２６０７に入力されたＦｉｅｌｄ値同士を判定し、例えば、マルチレコードのようにレコードのカテゴリが変更された時点で、新規のドキュメントを生成するマルチレコード印刷が可能となる。
【０２０１】
さらに判定の論理式として「ｃｈａｎｇｅ（変化）」も設定可能である。判定の論理式「ｃｈａｎｇｅ」とは、あるフィールド値のデータ値が変更される度に後述するＢｒｅａｋ処理を設定する場合に有効である。判定式「ｃｈａｎｇｅ」を設定することによる有効点について一例を挙げて具体的に説明する。
【０２０２】
例えば、膨大な量のレコード情報を用いて、改ドキュメントを伴うレイアウト処理を実行することを想定する。この際、ユーザが設定する条件式の例としては「IF field01 EQUAL value01 with DocumentBreak」および「IF field01 EQUAL value02 WITH DocumentBreak」および「IF field01 EQUAL value03 WITH DocumentBreak」といった設定処理を「field01」に想定されるデータ数分だけ繰り返さなければならない。すなわち想定されるデータ数が多いほど、条件式が増加してしまい煩雑になってしまう。ここで上述した「ｃｈａｎｇｅ」を用いることにより条件式は１つで済む。つまり「IF field01 change value with DocumentBreak」と設定することによりフィールド値１のデータが変更される度に改ドキュメントが実行されるため、想定されるデータ数分だけ条件式を設定する必要はなくなり、ユーザの操作性を向上させることができる。
【０２０３】
さらに、ＷＩＴＨ処理文には、これまでのレコードレイアウト処理を中断し、フッタページを印刷した後、新しくヘッダページから新しいレコードを印刷するＤｏｃＢｒｅａｋ（改ドキュメント）。また、これまでのレコードフローを中断し、新しいページを生成後、新しいレコードフローを始めるＰａｇｅＢｒｅａｋ（改ページ）。さらには、次のフローエリアから新しくレコードフローを開始するＬｉｎｅＢｒｅａｋ（改行）、Ｂｒｅａｋ処理せず、フローを継続するＮｏｎｅＢｒｅａｋ（継続）の４種類のＢｒｅａｋ処理が用意される。
【０２０４】
さらに、複雑な条件式を設定するためには、ＩＦ文中に複合条件を設定するためにＡＮＤ／ＯＲ接続文コンボボックス２６１０を有する。このコンボボックスでＡＮＤまたはＯＲの複合条件を選択すると、ＩＦ文中に条件行が１行追加される。ＡＮＤの場合、複数の条件がすべて正であるときのみ、ＯＲの場合いずれかの条件が正であるときにＩＦ文判定が真であると判定される。
【０２０５】
また、さらに複雑な条件分岐を設定するためには、ＥＬＳＥ＿ＩＦ文追加ボタン２６１１を有する。２６１１を押下すると、前述ＩＦ文とＥＬＳＥ文の間に、あらたにＥＬＳＥ＿ＩＦ文が追加挿入される。ＥＬＳＥ＿ＩＦ文の内容と動作は、ＩＦ文における内容と同じである。ＩＦ文が不正のときにひとつ下のＥＬＳＥ＿ＩＦ文を判定し、さらに不正のときにもうひとつ下のＥＬＳＥ＿ＩＦ文を判定し、これを続けて最後にＥＬＳＥ文を判定する、という順に処理を行う。２６１２は選択されているＥＬＳＥ＿ＩＦ文を削除する削除ボタンである。ＥＬＳＥ＿ＩＦ文が多くなった場合、スクロールバー２６１３を使って条件のリストを表示することが可能である。
【０２０６】
いずれかのＩＦ文あるいはＥＬＳＥ＿ＩＦ文で真と判定された場合、関連するＵＳＥ処理文、ＷＩＴＨ処理文が実行される。このように、条件式を通して、さまざまな値を取るレコードのそれぞれに、条件に合ったサブテンプレートを自動的に選択することができ、また、選択されたサブテンプレートに付帯するＢｒｅａｋ処理を併用することで、ひとつの条件式においてさまざまなレイアウトを実現することが可能になる。
【０２０７】
この条件式をフローエリアに関連付けることによって、ひとつのフローエリアにおいて、さまざまなレイアウトを持った複数種類のサブテンプレートをエリア内にフローすることが可能になる。
【０２０８】
ユーザは図２６のＵＩから条件を入力すると、最後にＯＫボタン２６１５を押す。ＯＫボタン２６１５の押下により、ＵＩで設定されたサブテンプレート条件を示す情報（サブテンプレート条件式）が、サブテンプレート情報２４０３の一部としてメモリユニット１３６に保存される。このサブテンプレート条件式は、たとえば、図２６のＵＩに記述された（選択された）テキストをそのまま保存したテキストファイルなど、条件と条件が満たされた場合のサブテンプレートを特定できる情報であれば良い。図２６の例では、「IF field01 EQUAL value01 AND field02 EQUAL vlue02 THEN USE subtemplate01 WITH PageBreak ELSEE IF field01 EQUAL value03 AND field02 EQUAL vlue04 THEN USE subtemplate02 WITH PageBreak ELSE USE subtemplate03 WITH PageBreak」をサブテンプレート条件式を示す情報として保存する。このまま保存しても、簡単な文法で記述されており、しかも図２６のようなＵＩから入力されるので文法的な誤りなどが発生する余地がない。そのために、簡単なプログラムでその条件の記述をパースして適合するサブテンプレートを決定することができる。
【０２０９】
＜レイアウト処理＞
図２７Ａは、フローエリアに対して条件式（抽出条件およびブレーク処理）が設定されているテンプレートにおいて、条件判定を行い、条件式に応じたレイアウト処理を実行するためのフローチャートである。図２７Ａは、第１実施形態の図７ＡのステップＳ７０３，Ｓ０７０４や、図１０のステップＳ１００９，Ｓ１０１０を合わせた処理となっている。
【０２１０】
なおここでは、テンプレートは、ヘッダページ、フローエリアを含む繰返しページ、フッタページで構成された例で説明する。図２７Ａにおいては、まず、レイアウト編集アプリケーション１２１は、レイアウトするデータをデータベースから取得して（Ｓ２７０１）、レコードの終了かどうか判定する（Ｓ２７０２）。レイアウト編集アプリケーション１２１は、現在どのレコードを対象としているかを一時的に保持しながら処理を行うため、Ｓ２７０２の判定が可能となる。レイアウト編集アプリケーション１２１は、Ｓ２７０２によりレコードの終了を判定した場合、Ｓ２７１３へ進みフッタページのレイアウト処理を実行して、図２７Ａのフローチャートの処理を終了する。なお、Ｓ２７０１により取得したレイアウトするレコードの数が０であった場合は、レイアウト処理を実行することはできないため、Ｓ２７１３によるフッタページのレイアウト処理を実行することなく本フローチャートの処理を終了する。
【０２１１】
次に、レイアウト編集アプリケーション１２１は、最初のレコードかどうか判定する（Ｓ２７０３）。最初のレコードであれば、レイアウト編集アプリケーション１２１は、ヘッダページのレイアウト処理を実行する（Ｓ２７０４）。詳細には、取得したレコードの内、所定のコンテンツデータを用いてヘッダページを作成することを指す。その際、ヘッダページレイアウト処理は、第１実施形態の図７Ａや図１４のフローチャートで説明したサブテンプレートのレイアウトの最適化処理と同様に実現される。これは、サブテンプレートが通常のテンプレートと同じくレイアウト定義され、データベースのコンテンツを流し込む際のレイアウト最適化処理が施されることを意味する。
【０２１２】
次に、レイアウト編集アプリケーション１２１は、取得したレコードのコンテンツデータとフローエリアに設定されている条件式から、該取得したレコードのコンテンツデータを配置可能であるか否かを判断し、配置すべきレコードのコンテンツデータであると判断された場合、該条件式に基づいてサブテンプレートおよびＢｒｅａｋ処理を特定する（Ｓ２７０５）。詳細には、レイアウト編集アプリケーション１２１が、フローエリア情報としてメモリユニット１３６に保存されているサブテンプレート条件式を読み出し、その条件式と取得したレコードに含まれるコンテンツデータを認識することにより条件に適合するサブテンプレート名およびＢｒｅａｋ（区切り）処理の内容を特定できる。
【０２１３】
次に、レイアウト編集アプリケーション１２１は、特定した情報に基づいて、Ｂｒｅａｋ処理が定義されているか、さらにＢｒｅａｋ処理が発生するか否かを判定する（Ｓ２７０６）。まずＢｒｅａｋ処理が定義されているか否かの判定は、レイアウト編集アプリケーション１２１が、Ｓ２７０５によってＢｒｅａｋ処理を特定しているため、Ｂｒｅａｋ処理が設定されているかを判定可能である。
【０２１４】
また、Ｂｒｅａｋ処理が発生するか否かについては、現在対象としている１つ前のレコードのコンテンツデータを一時的に保持しておき、現在の対象レコードのコンテンツデータと比較することにより、判定を行う。具体的には、Ｂｒｅａｋ処理を実行するために指定されているフィールド値（データ項目）の値が変更されていればＢｒｅａｋ発生と判断される。
【０２１５】
Ｓ２７０６の判定の結果、「Ｂｒｅａｋの設定なし」、または「Ｂｒｅａｋの発生なし」のいずれか１つを判定した場合現在対象としているレコードのコンテンツデータをサブテンプレートに配置して、上述したようにサブテンプレート内においてレイアウト調整を行い、フローエリアに配置される。（Ｓ２７１４）。すなわちフローエリア情報において指定されている間隔を空けて、レイアウト済みサブテンプレートをフローエリアに配置する。
【０２１６】
Ｓ２７０６によりＢｒｅａｋ設定がされており、かつＢｒｅａｋ処理が発生すると判断された場合、レイアウト編集アプリケーション１２１は、ＤｏｃＢｒｅａｋ（改ドキュメント）が指定されているかどうかを判定する（Ｓ２７０７）。なお、Ｓ２７０７の判定処理は、Ｓ２７０５によってＢｒｅａｋ処理を特定することにより、どのＢｒｅａｋ処理が設定されているかを判定可能である。つまり、レイアウト編集アプリケーション１２１が、フローエリア情報を読み出すことによりＢｒｅａｋ処理が特定されることとなる。
【０２１７】
Ｓ２７０７により、ＤｏｃＢｒｅａｋ（改ドキュメント）が指定されていると判定された場合、これまでの出力結果を一旦完了するため、レイアウト編集アプリケーション１２１は、フローエリアに対するレコードの流し込みを中断し、フッタページを新規に生成して、レイアウト処理する（Ｓ２７０８）。その際、同じ処理を繰り返さないように、事前にＢｒｅａｋ設定をクリアしておく必要がある。とはいえ、フローエリア情報のサブテンプレート条件式に含まれるＢｒｅａｋ設定をクリアすると、設定自体が変更されることになるので、たとえば、着目レコードに関する改ドキュメントのブレーク処理は完了している旨のＢｒｅａｋ済みフラグを設け、これをセットする。このＢｒｅａｋ済みフラグをセットすることにより、再度Ｓ２７０５、Ｓ２７０６の処理を繰り返す必要がなくなる。
【０２１８】
したがって、レイアウト編集アプリケーション１２１は、ステップＳ２７０６においてこのＢｒｅａｋ済みフラグがセットされていないことも判定し、ブレークの設定があっても、Ｂｒｅａｋ済みフラグがセットされていれば「いいえ」と判定する。そして、レイアウト編集アプリケーション１２１はＳ２７１４へと処理を進め、現在対象としているレコードをサブテンプレートに配置して、対象ページのフローエリアにレイアウトすることとなる。このブレーク完了フラグは着目レコードのレイアウトが終えたならリセットされる。
【０２１９】
なお、Ｓ２７０８におけるフッタページレイアウト処理はヘッダページレイアウト処理と同様、第１実施形態の図７（Ａ）、図１４のフローチャートで説明したサブテンプレートのレイアウトの最適化処理と同様に実現される。
【０２２０】
その後、レイアウト編集アプリケーション１２１は、再度ヘッダページレイアウト処理（Ｓ２７０４）に戻り、新しくドキュメントを作成する処理から繰り返す。なお、Ｓ２７０８によりフッタページレイアウト処理が終了したあとに、Ｓ２７０４に戻った場合、事前にＢｒｅａｋ設定がクリア（すなわちＢｒｅａｋ済みフラグがセット）されているため、再度同じ処理を繰り返すことはなく、Ｂｒｅａｋ定義されていないと判定される（Ｓ２７０６）。したがって通常のレイアウトを実行し、レコードに格納されたコンテンツをページ上に配置する（Ｓ２７１１）。この結果、レコード処理の途中で改ドキュメントが発生し、マルチレコード印刷が実現される。
【０２２１】
上記改ドキュメントが設定されていることにより、配置すべきコンテンツデータを配置する際に、ドキュメントを改めることができるため、データ属性が変更されるごとに新しいドキュメントが生成されることとなる。
【０２２２】
次に、Ｓ２７０７の判定の結果、改ドキュメントの設定がされていないと判定された場合、レイアウト編集アプリケーション１２１は、ＰａｇｅＢｒｅａｋ（改ページ）が設定されているかどうかを判定する（Ｓ２７０９）。Ｓ２７０９の判定処理はＳ２７０７と同様であるため詳細な説明は省略する。
【０２２３】
判定の結果、ＰａｇｅＢｒｅａｋ（改ページ）が設定されている場合には、レイアウト編集アプリケーション１２１は、これまでのフローを中断し、新しくページを作成する（Ｓ２７１０）。改ページのためにフローエリアを含んだ新規ページを作成した後、レイアウト編集アプリケーション１２１は、新規ページのフローエリアに対して現在対象としているレコードのコンテンツデータのサイズを取得し、通常のレイアウトを実行し、レコードに格納されたコンテンツをページ上に配置する（Ｓ２７１４）。この結果、レイアウト済みのサブテンプレートのフローがフローエリア内で新規のフローとして再開される。
【０２２４】
これにより、データ属性が変更されるごとに新しいページが生成されるため、例えば、あるユーザに複数の商品を提案する際の、カスタマイズカタログとして、同じ商品群を１つのページに構成することが可能となる。なおＰａｇｅＢｒｅａｋについても、やはりＢｒｅａｋ済みフラグをＤｏｃＢｒｅａｋと同じ要領で用いる。なお、Ｂｒｅａｋ済みフラグには、ＤｏｃＢｒｅａｋであったのか、ＰａｇｅＢｒｅａｋであったのかといったＢｒｅａｋ属性情報を持たせることができる。
【０２２５】
Ｓ２７０９でＰａｇｅＢｒｅａｋ設定がされていないと判定された場合、レイアウト編集アプリケーション１２１は、ＬｉｎｅＢｒｅａｋ（改行）が設定されているかどうかを判定する（Ｓ２７１１）。なお、Ｓ２７１１の判定処理は、Ｓ２７０７の判定処理と同様であるため詳細な説明は省略する。
【０２２６】
判定の結果、ＬｉｎｅＢｒｅａｋ（改行）が設定されている場合、レイアウト編集アプリケーション１２１は、現在のフローエリアから次の行に当たるフローエリアの左端にレイアウト開始ポイントを移動する（Ｓ２７１２）。詳細には、レイアウト編集アプリケーションを構成するモジュールの１つであるレイアウトエンジンがコンテンツデータの配置位置を認識することが可能である。よって、レイアウトエンジンが１つ前のレコードをレイアウトしたサブテンプレート位置を認識して、一時的にメモリユニットに保持しておき、そこからサブテンプレート分改行して、左端にレイアウト開始ポイントを移動することによりＳ２７１２の処理が実現される。
【０２２７】
その後、通常のレイアウトを実行し、レコードに格納されたコンテンツをページ上のフローエリアに配置する（Ｓ２７１４）。レイアウト編集アプリケーション１２１はＳ２７１４の処理が終了した場合、対象レコードを次へ進める処理をしておき再度Ｓ２７０１へ戻り、次のレコードを取得する処理に入る。
【０２２８】
この結果、フローエリアの途中で改行が発生することになる。この場合の改行は、サブテンプレートにレイアウトされたレコードの高さ分移動することを示している。なおＬｉｎｅＢｒｅａｋについても、やはりブレーク済みフラグをＤｏｃＢｒｅａｋと同じ要領で用いる。
【０２２９】
上記改行が設定されていることにより、データ属性の異なるコンテンツデータを配置する際に、行を改めることができるため、同じデータ属性のサブテンプレートを同じ行にレイアウトすることが可能となる。
【０２３０】
以上のＢｒｅａｋ処理から、ヘッダページ、フローエリア、フッタページで構成されるドキュメントが、条件式に定義された各種のＢｒｅａｋ処理によって、自在に構成を変更できることになり、フローエリアに設定されたＢｒｅａｋ処理に従って、改ドキュメントなら新規文書を作成することにより文書を区切ってコンテンツデータを配置し、改ページならば新規ページをさく製することにより文書を区切ってコンテンツデータを配置して出力結果を得ることが可能となり、マルチレコード印刷時における多彩な出力結果を得ることができる。
【０２３１】
図２７Ｂは、図２７Ａ中のサブテンプレートを決定する処理Ｓ２７０５の詳細を記述したフローチャートである。レイアウト編集アプリケーション１２１は条件式の最初のＩＦ文を取り出し（Ｓ２７２１）、Ｓ２７０１で受け取ったレコードからＩＦ文の判定対象としているフィールドの値を取り出す（Ｓ２７２２）。なお、上述した通り条件式はフローエリア情報としてメモリユニットに保存されているため、レイアウト編集アプリケーション１２１が、メモリユニットを参照することにより、Ｓ２７２１およびＳ２７２２の処理は可能となる。
【０２３２】
続いてレイアウト編集アプリケーション１２１は、現在対象としているレコードのフィールドの値がＳ２７２１により取り出された条件式に合致するかどうかを判定する（Ｓ２７２３）。詳細には、レイアウト編集アプリケーションが現在対象としているレコードのコンテンツデータをメモリユニット１３６に一時的に保持しておき、フローエリア情報として保持されている条件式と比較することによりＳ２７２３の処理が実現される。
【０２３３】
レイアウト編集アプリケーションはＳ２１２１により取り出された条件式と判定対象としているフィールド値が合致すると判定した場合、その条件文のＵＳＥ処理を選択し、サブテンプレートを決定する（Ｓ２７２５）。なお、使用するサブテンプレートが決定した場合、レイアウト編集アプリケーションは現在対象としているレコードと使用するサブテンプレートを対応付けて、メモリユニット１３６に保持する。
【０２３４】
Ｓ２７２３により合致しないと判定された場合、レイアウト編集アプリケーション１２１は、別の条件式があるかどうかを判定する（Ｓ２７２４）。なお、Ｓ２７２４の判定処理もＳ２７２３の処理と同様である。Ｓ２７２４によりレイアウト編集アプリケーションが、別の条件式があれば同様に該別の条件式を用いてＳ２７２３の判定を実行する。
【０２３５】
レイアウト編集アプリケーション１２１は、現在対象としているレコードのコンテンツデータがどの条件式にも合致しないと判定した場合、ＥＬＳＥ文のＵＳＥ処理を選択し、サブテンプレートを決定する（Ｓ２７２６）。なお、ＥＬＳＥ文に関してはユーザにより設定されない場合もありえるため、ＥＬＳＥ文の条件式が無ければＳ２７２６の処理は省略されることとなる。
【０２３６】
最後に、レイアウト編集アプリケーション１２１は、ＷＩＴＨ文で定義されているＢｒｅａｋ処理を取得して、メモリユニット１３６に保持する（Ｓ２７２７）。
【０２３７】
＜サブテンプレート＞
次に図２７ＡのステップＳ２７１４におけるサブテンプレートのレイアウト処理について、レイアウト処理フローを図２８を参照して説明する。
まず、レイアウト編集アプリケーション１２１は、各コンテナにレイアウトするためのデータのサイズを取得する（Ｓ２８０１）。そして、Ｓ２８０１により取得したデータサイズに基づいて、レイアウト編集アプリケーション１２１は、各コンテナにおいてレイアウト計算を行い（Ｓ２８０２）、レイアウトを最適化する（Ｓ２８０３）。なおレイアウトの計算処理およびレイアウト最適化の方法は第１実施形態で説明した通りである。
【０２３８】
レイアウト編集アプリケーション１２１は上記処理により最適化されたレイアウトを決定し（Ｓ２８０４）、レイアウトするデータを流し込む（Ｓ２８０５）。この処理も第１実施形態で説明したとおりである。
【０２３９】
次に、フローエリアにサブテンプレートをレイアウトするために、レイアウト編集アプリケーション１２１は、フローエリアのサイズを取得し（Ｓ２８０６）、レイアウトするサブテンプレートのサイズを取得する（Ｓ２８０７）。上述した通り、フローエリアのサイズおよびサブテンプレートのサイズはメモリユニット１３６に保持されているため、サイズ取得可能である。なお、本実施形態では、サブテンプレートの外枠のサイズは、上述した通りサブテンプレート内のコンテナに流し込まれるレコードの内容によって決定する可変サイズであっても、流し込まれるレコードに依存しない固定サイズであっても構わない。
【０２４０】
レイアウト編集アプリケーション１２１は、フローエリア内に、設定されているフロー方向とフロー間隔を適用しながらサブテンプレートを配置する（Ｓ２８０８）。最後に、レイアウト結果を表示して終了する（Ｓ２８０９）。最後の表示処理は、図２８を呼び出すプログラムで行われるために、なくともよい。
【０２４１】
なお、ステップＳ２８０１〜Ｓ２８０５は、図１４のステップＳ１４０２〜Ｓ１４０６と同様であるし、ステップＳ２８０６〜Ｓ２８０９は、図１７のステップＳ１７１３〜Ｓ１７１６と同様である。
【０２４２】
（フローエリアのＢｒｅａｋ例）
図２７の処理を図２９および図３５を用いて具体的に説明する。図２９は、ＤｏｃＢｒｅａｋ（改ドキュメント）処理により、複数のドキュメントが生成された例を示している。
【０２４３】
図２９の２９０１はサブテンプレートを流し込むために設定されたフローエリアであり、フローエリアにはサブテンプレート２９０２）、サブテンプレート２９０３、サブテンプレート２９０４のいずれかを用いるための条件式が設定されている。条件式には、レコードの宛先フィールド（データＡ）が「１」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート２９０２" ＷＩＴＨ "ＤｏｃＢｒｅａｋ"を実行することが設定されている。さらに、レコードの宛先フィールド（データＡ）が「２」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート２９０３" ＷＩＴＨ "ＤｏｃＢｒｅａｋ"を実行することが設定されている。レコードの宛先フィールドが「３」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート２９０４" ＷＩＴＨ "ＤｏｃＢｒｅａｋ"を実行することが設定されている。
【０２４４】
つまり、データＡの項目が変更することに応じて、改ドキュメントが実行されることとなる。
【０２４５】
ここで図２７Ａと図２９を用いて処理の流れを具体的に説明する。レイアウト編集アプリケーション１２１は、データ２９００にある「レコード１」を取得する。ここでレコード１は最初のレコードであるため、関連付け情報に従ってレコード１に含まれるデータＡの「１」がヘッダページのコンテナにレイアウトされることとなる。ここまでの処理が図２７のＳ２７０１〜Ｓ２７０４に該当する。
【０２４６】
レイアウト編集アプリケーション１２１は、レコード１の「データＡ＝１」であることを認識すると共に、メモリユニット１３６の条件式を参照して「レコードの宛先フィールド（データＡ）が「１」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート１" ＷＩＴＨ "ＤｏｃＢｒｅａｋ"」を認識する。以上より、レコード１に関してはサブテンプレート１を使用することが特定されると共に、改ドキュメントが設定されていることも認識する。
【０２４７】
しかしながら、レコード１においては前レコードとの比較により所定のフィールド値が変更することにより発生するＢｒｅａｋ処理が生じないため、レコード１のコンテンツデータをサブテンプレートへ流し込むＳ２７１４の処理へ進むこととなる。この処理が図２７ＡのＳ２７０６に該当する。なお、レコード１のコンテンツデータは上述したように一時的にメモリユニット１３６に保持されることとなる。
【０２４８】
続いてレイアウト編集アプリケーション１２１はＳ２７１４の後、Ｓ２７０１へ戻り、次のレコード２を対象レコードとして処理を進める。レコード２はレコードの終了ではなく、さらに最初のレコードでもないためＳ２７０５へと進む。ここでレイアウト編集アプリケーションはレコード２のコンテンツデータ「データＡ＝２」と条件式「レコードの宛先フィールド（データＡ）が「２」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート２" ＷＩＴＨ "ＤｏｃＢｒｅａｋ"」により、レコード２で使用されるサブテンプレートはサブテンプレート２であると特定すると共に、改ドキュメントが設定されていることも認識する。
【０２４９】
さらに、レイアウト編集アプリケーション１２１は、一時的に保持しているレコード１のコンテンツデータとレコード２のコンテンツデータを比較すると、レコード１では「データＡ＝１」であったのに対し、レコード２では「データＡ＝２」に変化していることが認識できる。これにより、レコード２を流し込む際にＢｒｅａｋ処理が発生することとなる。
【０２５０】
以上から、レイアウト編集アプリケーションはＳ２７０６の処理において、「Ｂｒｅａｋ処理設定あり」および「Ｂｒｅａｋ処理発生」を認識するため、Ｓ２７０７へと処理を進める。ここでレコード２に該当する条件式には「改ドキュメント」が設定されているため、レイアウト編集アプリケーションはレコード１用のフッタページ２９０７を作成する。なお、ここで使用されるコンテンツデータはレコード１に含まれるコンテンツデータである。さらに、レイアウト編集アプリケーション１２１は、上述したＢｒｅａｋ済みフラグを設定する。
【０２５１】
ここまでの処理により図２９に記載したドキュメント（ａ）を構成する２９０５および２９０６および２９０７が生成される。続いてレイアウト編集アプリケーション１２１は、Ｓ２７０４に処理を進め、レコード２用のヘッダページ２９０８を作製する。なお、上述したＢｒｅａｋ済みフラグが設定されているため、Ｓ２７０５の処理は省略され、さらにＳ２７０６では「いいえ」と判定される。これにより、レコード２のコンテンツデータはサブテンプレート２に配置され、新規文書であるドキュメント（ｂ）のページ２９０９のフローエリアに対してレイアウトされることとなる。
【０２５２】
続いてレコード３、レコード４についても同様の処理を行うと、レコード３および４に関しては「データＡ＝２」であり、レコード２のデータＡと同じためＢｒｅａｋ処理は発生しない。よって、レイアウト編集アプリケーション１２１は、Ｓ２７１４へと処理を進めレコード３および４のコンテンツデータはドキュメント（ｂ）のフローエリアへとレイアウトされることとなる。なお、通常であればレコード４のコンテンツデータもドキュメント（ｂ）のページ２９０９のフローエリアへレイアウトされるべきであるが、流し込まれるコンテンツデータが多く、１つのフローエリアに納めることができなかったため、繰り返しページ機能により新たにページ２９１０が生成されている。
【０２５３】
このように、サブテンプレートが変更されることに応じてドキュメントを変更することが可能となる。
【０２５４】
続いて、図２７および図３５を用いてにＰａｇｅＢｒｅａｋ（改ページ）の具体例を示す。例えばデータ３５００に含まれるレコードを流し込む場合を想定する。
【０２５５】
３５０１はサブテンプレートを流し込むために設定されたフローエリアであり、フローエリアにはサブテンプレート３５０２、サブテンプレート３５０３、サブテンプレート３５０４のいずれかを用いるための条件式が設定されている。条件式の１つ目は、データＡが変化（ｃｈａｎｇｅ）すれば、ＷＩＴＨ"ＤｏｃＢｒｅａｋ"が設定されている。つまり、データＡが変化することに応じて改ドキュメントが実行されることとなる。そして条件式の２つ目には、データＢが「Ｘ」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート３５０２" ＷＩＴＨ "ＰａｇｅＢｒｅａｋ"を実行することが設定されている。さらに、データＢが「Ｙ」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート３５０３" ＷＩＴＨ "ＰａｇｅＢｒｅａｋ"を実行することが設定されている。データＢが「Ｚ」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート３５０４" ＷＩＴＨ "ＰａｇｅＢｒｅａｋ"を実行することが設定されている。つまり、データＢのデータ値が変更することに応じて、改ページが実行される。
【０２５６】
ここで図２７Ａと図３５を用いて処理の流れを具体的に説明する。レイアウト編集アプリケーション１２１は、データ３５００にある「レコード１」を取得する。ここでレコード１は最初のレコードであるため、関連付け情報に従ってレコード１に含まれるデータＡの「１」がヘッダページのコンテナにレイアウトされる。
【０２５７】
レイアウト編集アプリケーション１２１は、レコード１の「データＡ＝１」および「データＢ＝Ｘ」であることを認識すると共に、メモリユニット１３６の条件式を参照して「データＢが「Ｘ」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート３５０２" ＷＩＴＨ "ＰａｇｅＢｒｅａｋ"」を認識する。以上より、レコード１に関してはサブテンプレート３５０２を使用することが特定されると共に、改ページが設定されていることも認識する。しかしながら、レコード１においてはＢｒｅａｋ処理が生じないため、レコード１のコンテンツデータをサブテンプレート３５０２へ流し込むＳ２７１４の処理へ進む。なお、レコード１のコンテンツデータは上述したように一時的にメモリユニット１３６に保持されることとなる。
【０２５８】
続いてレイアウト編集アプリケーション１２１はＳ２７１４の後、Ｓ２７０１へ戻り、次のレコード２を対象レコードとして処理を進める。レコード２はレコードの終了ではなく、さらに最初のレコードでもないためＳ２７０５へと進む。ここでレイアウト編集アプリケーション１２１は、レコード２の「データＢ＝Ｙ」および条件式「データＢが「Ｙ」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート３５０３" ＷＩＴＨ "ＰａｇｅＢｒｅａｋ"」を認識することにより、レコード２において使用するサブテンプレートを３５０３と特定すると共に、改ページが設定されていることも認識する。
【０２５９】
さらに、レイアウト編集アプリケーション１２１は、一時的に保持しているレコード１のコンテンツデータとレコード２のコンテンツデータを比較すると、レコード１は「データＡ＝１」であったのに対し、レコード２も「データＡ＝１」であるため改ドキュメントは発生しない。しかしながら、レコード１の「データＢ＝Ｘ」であったのに対し、レコード２の「データＢ＝Ｙ」であるため、Ｂｒｅａｋ処理（改ページ処理）が発生する。つまり、レイアウト編集アプリケーション１２１は、Ｓ２７０６において「Ｂｒｅａｋ設定あり」および「Ｂｒｅａｋ処理発生」と認識するため、Ｓ２７０７へと進みレコード２に対して実行すべきＢｒｅａｋ処理を特定する。
【０２６０】
上述した通り、レコード２に適用される条件式は「データＢが「Ｙ」であれば、ＴＨＥＮ ＵＳＥ "サブテンプレート３５０３" ＷＩＴＨ "ＰａｇｅＢｒｅａｋ"」であるため、改ページが実行されると特定できる。よってレイアウト編集アプリケーション１２１は、Ｓ２７０９により「Ｙｅｓ」と判定し、新規ページ３５０７を生成する。
【０２６１】
レイアウト編集アプリケーションはレコード２のコンテンツデータをサブテンプレート３５０３に配置して、Ｓ２７１０において新たに生成されたページ３５０７のフローエリアにレイアウトする。
【０２６２】
また、レコード３および４は「データＡ＝１」であり、「データＢ＝Ｙ」であるため改ドキュメントおよび改ページは実行されない。よって、レイアウト編集アプリケーション１２１は、ページ３５０７のフローエリアにレコード３および４のコンテンツデータをレイアウトする。なお、通常であればレコード４のコンテンツデータものページ３５０７のフローエリアへレイアウトされるべきであるが、流し込まれるコンテンツデータが多く、１つのフローエリアに納めることができなかったため、繰り返しページ機能により新たにページ３５０８が生成されている。
【０２６３】
さらに、レコード５に関しても上述の処理を実行する。レコード５のコンテンツデータは「データＡ＝１」であり、「データＢ＝Ｚ」であるため、改ドキュメントは実行されないが、改ページ処理が実行される。
【０２６４】
よって、レイアウト編集アプリケーション１２１は、レコード５のコンテンツデータを配置するために、サブテンプレート３５０４にレコード５のコンテンツデータを配置して、改ページ処理により新たに生成されたページ３５０９のフローエリアにレイアウトすることとなる。
【０２６５】
続いてレイアウト編集アプリケーション１２１は、レコード７を対象レコードとして処理を進める。レコード７のコンテンツデータは「データＡ＝２」であるため、レコード１〜６のデータＡとは異なるデータ値となっている。よって、条件式１である「データＡが「ｃｈａｎｇｅ」ＷＩＴＨ"ＤｏｃＢｒｅａｋ"」が適用され、改ドキュメントであると特定される。すなわちレイアウト編集アプリケーションは、レコード７において「Ｂｒｅａｋ処理の設定あり」および「Ｂｒｅａｋ処理が発生」と判定するため、Ｓ２７０７へと処理を進める。
【０２６６】
さらに、レイアウト編集アプリケーション１２１は、設定されているＢｒｅａｋ処理が改ドキュメントであるため、フッタページ３５１０を生成して、上述したＢｒｅａｋ完了フラグを設定する。
【０２６７】
これにより、レイアウト編集アプリケーションは、レコード１〜６を用いてページ３５０５〜ページ３５１０から構成される１つの文書を生成し、レコード７から新規文書の作成処理にはいる。Ｂｒｅａｋ処理として改行が設定されていた場合、上述したものと同様の処理が行われることとなる。
【０２６８】
なお、フローエリアをブレークにより分割した場合、分割された各フローエリアについては同一の属性情報を持つものとして、レイアウト等の処理が行われる。
【０２６９】
［第４実施形態］
本発明の第４実施形態は、テンプレートに定義された条件式をオーバーライド（上書き）できる外部条件式ファイルとして利用する場合の処理を示している。テンプレートには、条件式が図３０で示すようなＸＭＬ準拠の形式で記述されており、テンプレートの定義自体もＸＭＬ準拠のタグ形式となっている。ここでは、テンプレート自体のフォーマットは関係ないので説明は割愛する。
【０２７０】
図３０は、外部条件式ファイルとなる条件式ファイルのフォーマットを示している。図２６の条件式設定ＵＩの設定内容を保存する際の形式と同じであり、ＵＩ画面に表示された内容をそのままタグ形式に当てはめたものとなり、＜ＣＯＮＤＩＴＩＯＮＡＬ＞タグ、＜ＩＦ＞タグ、＜ＥＬＳＥＩＦ＞タグ、＜ＥＬＳＥ＞タグで構成される。また、＜ＩＦ＞タグには、判断式を記述する＜ＦＩＥＬＤ＞タグ、判断結果を記述する＜ＵＳＥ＞タグが含まれる。＜ＵＳＥ＞タグには、ＷＩＴＨ識別子にＢｒｅａｋ種別が記述される。＜ＣＯＮＤＩＴＩＯＮＡＬ＞タグには、条件式を識別するための名称が記述される。＜ＩＦ＞タグの＜ＦＩＥＬＤ＞タグには、Ｆｉｅｌｄ名、判断文、判定値の組が定義され、複数の判断文がある場合には、ＡＮＤ識別子、ＯＲ識別子で繋ぐことができる。＜ＥＬＳＥＩＦ＞タグは、＜ＩＦ＞タグと同様に記述され、＜ＩＦ＞タグの分岐先となる。最後に、＜ＥＬＳＥ＞タグは、どの判断文にも一致しない場合の分岐先であり、＜ＵＳＥ＞タグのみ記述される。
【０２７１】
図３１は、外部条件式ファイルをオーバーライド（上書き）する処理を記述したフローチャートである。図３１の処理は、第３実施形態の図２７Ａの先頭において行われる。
【０２７２】
レイアウト編集アプリケーションを構成するモジュールの１つであるレイアウトエンジン２２５は、入力パラメータで指定されたテンプレートをメモリ１３６に読み込む（Ｓ３１０１）。ＸＭＬ準拠のファイルフォーマットであるため、レイアウトエンジン２２５は、テンプレートファイルをパースしてＸＭＬのオブジェクトツリーに展開する（Ｓ３１０２）。次に、レイアウト編集アプリケーション１２１は、入力パラメータに外部条件式ファイルがあるかどうか判定する（Ｓ３１０３）。この判定は、たとえば外部条件式ファイルについては特定の拡張子や名称を与えておくことで実現できる。判定の結果外部条件式がある場合に、レイアウト編集アプリケーション１２１は、条件式ファイルをメモリ１３６に読み込む（Ｓ３１０４）。次に、条件式をパースして条件式オブジェクトツリーに展開する（Ｓ３１０５）。次に、レイアウト編集アプリケーション１２１は、ステップＳ３１０１で読み込んだテンプレートに記述された条件式オブジェクトツリーを、外部参照で読み込んだ条件式オブジェクトツリーで書き換える（１９０６）。ＸＭＬ準拠であるため、オブジェクト単位の入れ換え処理は既知の技術で可能となる。その後、図Ｓ２７Ａで説明したＢｒｅａｋ処理を実行（Ｓ３１０７）することで、テンプレートに設定された条件式を印刷時に動的に変更することができるため、流し込むバリアブルデータに応じて、サブテンプレートの変更条件を変更することができるため、より多彩なバリアブルプリントが実現できる。
【０２７３】
なお、条件式オブジェクトツリーの評価は、たとえばツリー構造にしたがってスタックマシンにより演算子を実行することで実現できる。また、上記手順においては、条件式をパースする前にＸＭＬ形式のまま条件式の上書きを行ってからパースしても良い。
【０２７４】
このように構成することで、条件式をたとえばテキストエディタなどで編集して設定することが可能となる。
【０２７５】
以上のように、本発明に係る各実施形態のレイアウト編集システムによれば、データベースから抽出したレコードデータの内容(フィールド値)に応じて異なったサブテンプレートを選択して、選択されたサブテンプレートに対してレコードを挿入する。そして、その挿入処理をレコードごとに繰り返すことによって、多種のサブテンプレートとレコードの結びついた部分レイアウトが得られる。その多種の部分レイアウトを、レイアウトエリアに順にフローさせることで、従来の流し込みでは実現できない、複雑なレイアウト切り替えを繰り返すフローレイアウトを実現することができる。
【０２７６】
また、その多種の部分レイアウトを製本時の章に見立て、改ページＢｒｅａｋ処理によってページ制御することで小冊子のようなドキュメントを生成することが可能となる。また、ヘッダあるいはフッタを構成するテンプレートで改ドキュメントＢｒｅａｋ処理した場合には、顧客毎のドキュメントを１つのテンプレートとマルチレコードで同時に生成することが可能となる。
【０２７７】
これは、カスタマイズカタログの様に、顧客毎にアピールする商品カテゴリが違うようなドキュメントを一度に生成するオンデマンド印刷で非常に有効となる。
【０２７８】
なお、本発明は、複数の機器（例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置など）に適用してもよい。また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体（または記録媒体）を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはCPUやMPU）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体およびプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０２７９】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【図面の簡単な説明】
【０２８０】
【図１Ａ】本発明の実施形態に係るコンピュータシステム構成図
【図１Ｂ】本発明の実施形態に係るコンピュータシステム構成図
【図２】本発明の実施形態に係るコンピュータモジュールの概略図
【図３】本発明の実施形態に係るメニューバー、ツールバー、ワークエリア、フローティングパレットを含む典型的なアプリケーションのメインウインドウとコンテナ間のリンクを持つ典型的なコンテナの一例を示す図
【図４】本発明の実施形態に係るインターフェイスの一例によるコンテナの表現の１６パターンの一例を示す図
【図５】本発明の実施形態に係る典型的なコンテナルールの一例を示す図
【図６】本発明の実施形態に係るリンクを作成するＵＩの一例を示す図
【図７Ａ】本発明の実施形態に係るレイアウト計算のフローの一例を示す図
【図７Ｂ】本発明の実施形態に係るレイアウト計算のフローの一例を示す図
【図８】本発明の実施形態に係る図７のフローに対応するＵＩの一例を示す図
【図９】本発明の実施形態に係るマルチレコードの概要図
【図１０】第１実施形態における全体フローの一例を示す図
【図１１】第１実施形態における図１０のＵＩの一例を示す図
【図１２】第１実施形態におけるフローエリアの設定ダイアログのＵＩの一例を示す図
【図１３】第１実施形態におけるサブテンプレートのレイアウトの一例を示す図
【図１４】第１実施形態におけるサブテンプレートのレイアウトフローの一例を示す図
【図１５】第１実施形態における条件式の設定ＵＩの一例を示す図
【図１６Ａ】第１実施形態における条件式を判定するフローの一例を示す図
【図１６Ｂ】第１実施形態における条件式を判定するフローの一例を示す図
【図１７】第１実施形態におけるフローエリア内レイアウト計算フローの一例を示す図
【図１８】第１実施形態におけるサブテンプレートのレイアウトの一例を示す図
【図１９】複数ページにわたるフローエリアを設定するＵＩの一例を示す図
【図２０】フローエリアの位置とサイズを変更するＵＩの一例を示す図
【図２１】繰り返しのあるフローエリアとそれにデータを挿入したときの概念図
【図２２】複数ページにわたるフローエリアにサブテンプレートをレイアウトするフローの一例を示す図
【図２３】テンプレートデータの構成の一例を示す図
【図２４】マルチレコードのテンプレートデータの構成の一例を示す図
【図２５】第１実施形態のレイアウト編集システムの動作を説明する概略図
【図２６】第３実施形態における条件式の設定ＵＩ例を示す図
【図２７Ａ】第３実施形態におけるレイアウト処理フローの図
【図２７Ｂ】第３実施形態におけるテンプレート決定処理のフロー図
【図２８】第３実施形態におけるサブテンプレートのレイアウトフロー図
【図２９】第３実施形態におけるＢｒｅａｋ処理の例を示す図
【図３０】第４実施形態における外部参照できる条件式のフォーマットを示す図
【図３１】第４実施形態における外部条件式の読み込み処理フロー図
【図３２】レイアウト計算時におけるコンテナの集合について説明した図
【図３３】レイアウト最適化処理を説明するための図
【図３４】バリアブルプリントの一例を示した図
【図３５】第３実施形態におけるＢｒｅａｋ処理の例を示す図
【図１Ａ】
2006243805.tif 000003
【図１Ｂ】
2006243805.tif 000004
【図２】
2006243805.tif 000005
【図３】
2006243805.tif 000006
【図４】
2006243805.tif 000007
【図５】
2006243805.tif 000008
【図６】
2006243805.tif 000009
【図７Ａ】
2006243805.tif 000010
【図７Ｂ】
2006243805.tif 000011
【図８】
2006243805.tif 000012
【図９】
2006243805.tif 000013
【図１０】
2006243805.tif 000014
【図１１】
2006243805.tif 000015
【図１２】
2006243805.tif 000016
【図１３】
2006243805.tif 000017
【図１４】
2006243805.tif 000018
【図１５】
2006243805.tif 000019
【図１６Ａ】
2006243805.tif 000020
【図１６Ｂ】
2006243805.tif 000021
【図１７】
2006243805.tif 000022
【図１８】
2006243805.tif 000023
【図１９】
2006243805.tif 000024
【図２０】
2006243805.tif 000025
【図２１】
2006243805.tif 000026
【図２２】
2006243805.tif 000027
【図２３】
2006243805.tif 000028
【図２４】
2006243805.tif 000029
【図２５】
2006243805.tif 000030
【図２６】
2006243805.tif 000031
【図２７Ａ】
2006243805.tif 000032
【図２７Ｂ】
2006243805.tif 000033
【図２８】
2006243805.tif 000034
【図２９】
2006243805.tif 000035
【図３０】
2006243805.tif 000036
【図３１】
2006243805.tif 000037
【図３２】
2006243805.tif 000038
【図３３】
2006243805.tif 000039
【図３４】
2006243805.tif 000040
【図３５】
2006243805.tif 000041