(57)【要約】      （修正有）【課題】ページ上の画像に対するコメントが長過ぎる場合に読みやすく再配置する。【解決手段】文字領域に配置されるべき文字列が、編集により文字領域から溢れる場合に、溢れた状態で仮組版する（Ｓ５０４）。仮組版の後、ページ調節処理を実行する（Ｓ５０５）。すなわち、文字領域から溢れる文字列を隣接ページの文字領域の空き部分に配置できるかどうかを判断する。文字領域から溢れる文字列を隣接ページの文字領域の空き部分に配置できる場合に、溢れる文字列を前記隣接ページの文字領域の空き部分にマージする。マージできない場合には、隣接ページとの間に文字領域のみの空ページを挿入し、その空ページの文字領域に、溢れる文字列を配置する。【選択図】図５
2014109823.tif 000002
【特許請求の範囲】
【請求項１】
１ページ内に画像領域と文字領域を配置する本を編集し、前記文字領域に配置する文字列を管理する文字列処理装置であって、
前記文字領域に配置されるべき文字列が、前記文字領域から溢れるかどうかを判断する手段と、
前記文字領域に配置されるべき文字列が前記文字領域から溢れる場合に、溢れた状態で仮組版する仮組版手段と、
前記文字領域から溢れる文字列を隣接ページの文字領域の空き部分に配置できるかどうかを判断する手段と、
前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分に配置できる場合に、前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分にマージする手段と、
前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分に配置できない場合に、前記隣接ページとの間に文字領域のみの空ページを挿入し、前記空ページの文字領域に前記文字領域から溢れる文字列を配置する手段
とを有することを特徴とする文字列処理装置。
【請求項２】
更に、前記空ページの文字領域に、前記文字領域から溢れる文字列を配置できない場合に、エラーをユーザに通知する手段を具備することを特徴とする請求項１に記載の文字列処理装置。
【請求項３】
前記隣接ページが、見開きで、前記文字列が溢れる文字領域を含むページと同時に開かれるページであることを特徴とする請求項１又は２に記載の文字列処理装置。
【請求項４】
同じ見開きの隣接ページの文字領域に溢れる文字列を配置できる場合には、前記同じ見開きの隣接ページに前記溢れる文字列をマージし、
同じ見開きの隣接ページの文字領域に溢れる文字列を配置できない場合には、隣接する見開きに空ページを生成し、前記空ページの文字領域に、前記溢れる文字列を配置する
ことを特徴とする請求項１、２又は３に記載の文字列処理装置。
【請求項５】
１ページ内に画像領域と文字領域を配置する本を編集し、前記文字領域に配置する文字列を管理する文字列処理方法であって、
前記文字領域に配置されるべき文字列が、前記文字領域から溢れるかどうかを判断するステップと、
前記文字領域に配置されるべき文字列が前記文字領域から溢れる場合に、溢れた状態で仮組版する仮組版ステップと、
前記文字領域から溢れる文字列を隣接ページの文字領域の空き部分に配置できるかどうかを判断するステップと、
前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分に配置できる場合に、前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分にマージするステップと、
前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分に配置できない場合に、前記隣接ページとの間に文字領域のみの空ページを挿入し、前記空ページの文字領域に前記文字領域から溢れる文字列を配置するステップ
とを有することを特徴とする文字列処理方法。
【請求項６】
１ページ内に画像領域と文字領域を配置する本を編集し、前記文字領域に配置する文字列を管理する文字列処理プログラムであって、情報処理装置を、
前記文字領域に配置されるべき文字列が、前記文字領域から溢れるかどうかを判断する手段と、
前記文字領域に配置されるべき文字列が前記文字領域から溢れる場合に、溢れた状態で仮組版する仮組版手段と、
前記文字領域から溢れる文字列を隣接ページの文字領域の空き部分に配置できるかどうかを判断する手段と、
前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分に配置できる場合に、前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分にマージする手段と、
前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分に配置できない場合に、前記隣接ページとの間に文字領域のみの空ページを挿入し、前記空ページの文字領域に前記文字領域から溢れる文字列を配置する手段
として機能させることを特徴とする文字列処理プログラム。
【請求項７】
請求項６に記載の文字列処理プログラムを情報処理装置が読み出し可能に記録する記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列処理装置、方法及びプログラム並びに記録媒体に関し、より具体的には、所定の表示域に文字列を配置する文字列処理装置、方法及びプログラム並びに、当該文字処理プログラムを記憶する記録媒体に関する。
【背景技術】
【０００２】
従来、パーソナルコンピュータ（ＰＣ）上で１ページに画像と文字領域を紐付けてレイアウトする製本アプリケーションソフトウエア（以下、「製本アプリ」と略す）では、文字領域のサイズに上限があり、従って、入力文字数には上限がある。
【０００３】
上限を超える文字数が入力された場合の対応として、特許文献１には、フォントサイズを小さくする、文字領域を拡張する又はレイアウトを変更して文字溢れを防止することが記載されている。
【０００４】
また、特許文献２には、文字領域内に配置できない文字データをユーザが編集できるようにし、また、別の領域に移動させることが記載されている。
【０００５】
Ｅｘｃｅｌ（登録商標）などの表計算アプリでは、複数の文字領域（セル）を結合することで、文字領域を広げて文字数の上限を増やすことができる（非特許文献１）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−４１９４４号公報
【特許文献２】特開２０００−１０５７６２号公報
【非特許文献】
【０００７】
【非特許文献１】Ｅｘｃｅｌサポート／Ｅｘｃｅｌ  「セルを結合する、結合したセルを分割する」、ｈｔｔｐ：／／ｏｆｆｉｃｅ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｊａ-ｊｐ／ｅｘｃｅｌ-ｈｅｌｐ／ＨＰ０１０３４２６８６．ａｓｐｘ？ＣＴＴ＝１
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に記載された従来技術では、ページごとに文字のフォントサイズやレイアウトが違う状態となるので、製本としての見栄え・デザイン性が損なわれてしまう。
【０００９】
特許文献２に記載された従来技術では、文字列の調節のための編集作業は可能であるものの、編集しても文字数が領域の上限文字数に入りきらない場合には対応できない。
【００１０】
表計算アプリで複数のセルを結合する方法では、結合する他のセルの内容（文字列）が削除されてしまう。製本アプリの観点から見れば、ユーザが他の画像に対して入れたコメントが削除されてしまうということである。
【００１１】
また、同様な文字列を編集可能なアプリケーションでは結合の際に文字列を連結するものもあるが、単純な文字列の連結であるためお互いの文字列の独立性が崩れてしまい、文字領域を元の状態に戻すことができない。
【００１２】
本発明は、このような不都合を解消する文字列処理装置、方法及びプログラム並びに記録媒体を提示することを目的とする。
【課題を解決するための手段】
【００１３】
本発明に係る文字列処理装置は、１ページ内に画像領域と文字領域を配置する本を編集し、前記文字領域に配置する文字列を管理する文字列処理装置であって、前記文字領域に配置されるべき文字列が、前記文字領域から溢れるかどうかを判断する手段と、前記文字領域に配置されるべき文字列が前記文字領域から溢れる場合に、溢れた状態で仮組版する仮組版手段と、前記文字領域から溢れる文字列を隣接ページの文字領域の空き部分に配置できるかどうかを判断する手段と、前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分に配置できる場合に、前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分にマージする手段と、前記文字領域から溢れる文字列を前記隣接ページの文字領域の空き部分に配置できない場合に、前記隣接ページとの間に文字領域のみの空ページを挿入し、前記空ページの文字領域に前記文字領域から溢れる文字列を配置する手段とを有することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、文字領域が文字溢れを起こした際に、文字フォントサイズの変更の必要がないため、製本時の見栄え・デザイン性が保たれ、製本物の商品性が高まる。文字溢れが発生した際には、溢れる文字列を次の文字領域に配置するので、元のコンテンツ情報を変更せずに仮組版したデータ上で調節できる。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施例を組み込んだ情報処理装置の概略構成ブロック図である。
【図２】本実施例の操作画面例である。
【図３】コンテンツ管理テーブルの一例である。
【図４】画像ＩＤ管理テーブルの一例である。
【図５】見開きページ表示処理の動作フローチャートである。
【図６】文字入力画面例である。
【図７】仮組版処理の動作フローチャートである。
【図８】ページ組版情報管理テーブルの一例である。
【図９】ページ情報初期化処理の動作フローチャートである。
【図１０】仮組版処理の動作フローチャートである。
【図１１】Ｅｘｔｅｎｔ情報生成処理の動作フローチャートである。
【図１２】Ｅｘｔｅｎｔ組版情報管理テーブルの一例である。
【図１３】Ｅｘｔｅｎｔ情報初期化処理の動作フローチャートである。
【図１４】Ｅｘｔｅｎｔ領域分割処理の動作フローチャートである。
【図１５】Ｅｘｔｅｎｔ仮組版処理の動作フローチャートである。
【図１６】行仮組版処理の動作フローチャートである。
【図１７】行情報初期化処理の動作フローチャートである。
【図１８】行組版情報管理テーブルの一例である。
【図１９】文字組版情報管理テーブルの一例である。
【図２０Ａ】ページ調節処理の動作フローチャートである。
【図２０Ｂ】図２０Ａに続くページ調節処理の動作フローチャートである。
【図２１】Ｅｘｔｅｎｔ組版情報分割処理の動作フローチャートである。
【図２２】Ｅｘｔｅｎｔマージ処理の動作フローチャートである。
【図２３】行移動処理の動作フローチャートである。
【図２４Ａ】ページ調節処理の第２の動作フローチャートである。
【図２４Ｂ】図２４Ａに続くページ調節処理の第２の動作フローチャートである。
【図２４Ｃ】図２４Ａに続くページ調節処理の第２の動作フローチャートである。
【図２５Ａ】ページ調節処理の第３の動作フローチャートである。
【図２５Ｂ】図２５Ａに続くページ調節処理の第３の動作フローチャートである。
【図２５Ｃ】図２５Ａに続くページ調節処理の第３の動作フローチャートである。
【図２６】見開きページ表示処理の動作フローチャートである。
【図２７】ページ表示処理の動作フローチャートである。
【図２８】Ｅｘｔｅｎｔ表示処理の動作フローチャートである。
【図２９】仮組版処理において文字溢れ状態でページ仮組版を終了する状態の説明例である。
【図３０】Ｅｘｔｅｎｔ初期状態の説明図である。
【図３１】初期状態Ｅｘｔｅｎｔを画像領域の高さで分割した状態の説明図である。
【図３２】文字溢れを起こした行情報を新しいＥｘｔｅｎｔに移動させる処理の説明図である。
【図３３】Ｅｘｔｅｎｔ間に表示するコンテンツ境界線の一例を示す説明図である。
【図３４Ａ】Ｅｘｔｅｎｔマージ処理の説明図である。
【図３４Ｂ】Ｅｘｔｅｎｔマージ処理の説明図である。
【図３４Ｃ】Ｅｘｔｅｎｔマージ処理の説明図である。
【図３４Ｄ】Ｅｘｔｅｎｔマージ処理の説明図である。
【図３４Ｅ】Ｅｘｔｅｎｔマージ処理の説明図である。
【図３５】ページの空き容量の高さ計算処理の動作フローチャートである。
【図３６】文字溢れの表示例を示す図である。
【図３７】文字溢れの別の表示例を示す図である。
【図３８】文字溢れの更に別の表示例を示す図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照して、本発明の実施例を詳細に説明する。
【実施例１】
【００１７】
図１は、本発明に係る文字列処理プログラムの一実施例を組み込んだ情報処理装置の概略構成ブロック図を示す。図１に示す情報処理装置１００は、液晶表示装置（ＬＣＤ）１０１、ＶＲＡＭ１０２、ＢＭＵ１０３、キーボード１０４、ＰＤ１０５、ＣＰＵ１０６、ＲＯＭ１０７、ＲＡＭ１０８及びＨＤＤ１０９を有する。情報処理装置１００は更に、外部装置とのインターフェースとして、メモリカードＩ／Ｆ１１０及びネットワークＩ／Ｆ１１１を有する。
【００１８】
ＬＣＤ１０１は、例えば編集中の文書、図形、画像その他の編集情報、アイコン、メッセージ、及びメニューその他のユーザインタフェース情報を表示する。
【００１９】
ＶＲＡＭ１０２には、ＬＣＤ１０１で表示する画像データが格納される。ＶＲＡＭ１０２に格納された画像データは、所定の規定に従ってＬＣＤ１０１に転送され、これにより、対応する画像がＬＣＤ１０１の画面上に表示される。
【００２０】
ＢＭＵ（ビットムーブユニット）１０３は、メモリ間（例えば、ＶＲＡＭ１０２と他のメモリとの間）のデータ転送、及び、メモリと各Ｉ／Ｏデバイス（例えば、ネットワークＩ／Ｆ２１１）との間のデータ転送を制御する機能要素である。
【００２１】
キーボード１０４は、文書等を入力するための各種キーを有する。
【００２２】
ＰＤ（ポインティングデバイス）１０５は、例えば、ＬＣＤ１０１に表示されるアイコン、メニューその他のコンテンツを指示し、またはオブジェクトのドラッグドロップために使用される操作手段である。
【００２３】
ＣＰＵ１０６は、ＲＯＭ１０７、ＨＤＤ１０９又はメモリカードＩ／Ｆ１１０に接続するメモリカードに格納された制御プログラムに基づいて、各デバイスを制御する。ＲＯＭ１０７は、ＣＰＵ１０６の動作のための各種制御プログラム及びデータを記憶する。ＲＡＭ１０８は、ＣＰＵ１０６のワーク領域、エラー処理時のデータの退避領域及び制御プログラムのロード領域等として機能し、使用される。
【００２４】
ＨＤＤ１０９は、情報処理装置内で実行される各制御プログラム、コンテンツ及び各種データを格納する。
【００２５】
メモリカードＩ／Ｆ１１０は、外部記憶装置としてのメモリカードに対するアクセスを制御する。
【００２６】
ネットワークＩ／Ｆ１１１は、他の情報処理装置又はプリンタ等とネットワークを介して通信する。
【００２７】
ＣＰＵバス１１２は、アドレスバス、データバス及びコントロールバスを含む。
【００２８】
ＣＰＵ１０６上で動作する制御プログラムは、ＲＯＭ１０７、ＨＤＤ１０９又はメモリカードからＣＰＵ１０６に供給される。また、ネットワークＩ／Ｆ１１１を介してネットワーク経由で他の情報処理装置等からＣＰＵ１０６に供給するようにしてもよい。
【００２９】
図２は、製本アプリに適用した場合のユーザ操作画面例である。画面２００上に本の形の画像で見開きのページ２０１，２０２が表示されている。図２に示す例では、画像とその画像に対する横書きでのコメントを扱う製本アプリへの適用を、左綴じ（本の右側が開く状態）で示している。右綴じの場合には、本実施例の左右を逆転させれば同じ効果を得られるものであり、綴じ方は本発明を限定しない。
【００３０】
ページ２０１，２０２には、それぞれ画像データを表示する領域２０３，２０５と文字データを表示する領域２０４，２０６が表示又は設定されている。理解を容易にするため、１ページ内に１つの画像領域と１つの文字領域をセットとして持つレイアウトと、１ページ内に文字領域しか持たないレイアウトで説明するが、これらのレイアウト例は本発明を限定しない。
【００３１】
矢印２０７は表示中の見開きページを１つ戻すための機能を有し、矢印２０８は表示中の見開きページを１つ進めるための機能を有している。戻すページが無くなった場合、ＣＰＵ１０６は、矢印２０７を押下できないようにする。進めるページが無くなった場合、ＣＰＵ１０６は、矢印２０８を押下できないようにする。
【００３２】
レイアウト表示領域２０９には、切り替え可能なレイアウトの一覧が表示されている。適用したいレイアウトをＰＤ１０５でページ２０１，２０２にドラッグ＆ドロップすることで、そのページのレイアウトを切り替えることができる。レイアウトの切り替え方法として、その他の方法を採用しても良い。
【００３３】
候補画像表示領域２１０には、ユーザが選択可能な画像の一覧が表示されている。図２には、画像Ａ、Ｂ，Ｃ，Ｄ，Ｅ，Ｆが例示されている。適用したい画像をＰＤ１０５でページ２０１，２０２にドラッグ＆ドロップすることで、そのページの画像を切り替えることができる。画像の切り替え方法として、その他の方法を採用しても良い。選択対象の画像が候補画像表示領域２１０に入りきらない場合には、候補画像表示領域２１０内を上下にスクロールするスクロールバー２１１が表示される。
【００３４】
保存ボタン２１２は、編集中の製本データを一時的に保存するためのボタンである。ボタン２１２の押下により、ユーザの編集中の製本データが、ＨＤＤ１０９などに保存される。ユーザは、保存した製本データを再編集できる。
【００３５】
プレビューボタン２１３は、編集中の製本データの完成具合をプレビューするためのボタンである。ＣＰＵ１０６は、ボタン２１３の押下に対して、別のプレビュー用ウインドウを開き、当該プレビュー用ウインドウで電子書籍のように本をめくりながら出来上がりを確認できる。プレビューの画面自体は、本発明とは関係ないので、詳細な説明を省略する。
【００３６】
編集終了ボタン２１４は、編集を終了し、実際の製本の印刷注文フローなどに遷移するためのボタンである。編集終了ボタン２１４を押下すると、ＣＰＵ１０６は、編集中のデータを保存し、その保存されたデータを元に印刷用データを生成する。印刷注文のための画面では、注文部数、注文者情報、配送先情報及び支払い情報などを入力する。
【００３７】
図３及び図４は、図２に示す画面例を実現するためのＤＢ構造とデータ例を示す。コンテンツ管理テーブル３００ａは、各ページのレイアウトを管理するためのテーブルであり、論理ページ番号３０１をキーとして画像ＩＤ３０２とテキスト情報３０３のデータを持つ。テーブル３００ｂは、コンテンツ管理テーブル３００ａの具体的なデータ例である。
【００３８】
論理ページ番号３０１は、先頭ページから各ページに内部的に振られたページ番号である。画像ＩＤ３０２は、レイアウトの画像領域に適用された画像に割り振られたＩＤであり、後述する画像ＩＤ管理テーブル４００ａで管理されている。本実施例ではページ内に１組の画像領域・文字領域を持つレイアウトとページ内に文字領域しか持たないレイアウトしか利用しないとしているので、文字領域しか持たないレイアウトは、画像ＩＤをＮＵＬＬとすることで識別可能である。
【００３９】
テキスト情報３０３は、レイアウトの文字領域に入力される文字列データである。レイアウトデータと文字列データをこのコンテンツ管理テーブル３００ａにて１対１で管理し、後述する見開き画面に表示する際の情報としての組版データとは切り離して管理する。これにより、本実施例ではレイアウト間の文字データの独立性を保つことができる。
【００４０】
図４に示す画像ＩＤ管理テーブル４００ａは、画像データに関する各情報を管理するテーブルである。画像ＩＤ管理テーブル４００ａは、画像ＩＤ４０１をキーとして、オリジナル画像ファイルパス４０２と、画面表示用画像ファイルパス４０３と、サムネイル画像ファイルパス４０４を持つ。テーブル４００ｂは、画像ＩＤ管理テーブル４００ａの具体的なデータ例である。
【００４１】
オリジナル画像ファイルパス４０２は、ユーザがアップロードしたオリジナルの画像データへのファイルパスを示し、この画像データが製本時に使用される。
【００４２】
画面表示用画像ファイルパス４０３は、製本アプリのページ２０１，２０２（図２）に表示するための表示用画像データのファイルパスを示す。製本アプリでオリジナル画像を直接表示してしまうとデータが大きく、描画に時間がかかってしまい、また、画面表示の目的ではオリジナル画像の解像度を必要としない。そこで、本実施例では、ユーザがオリジナル画像を製本アプリに登録する際に解像度を落とした表示用画像を生成し、この表示用画像を見開き画面の表示時に利用する。
【００４３】
サムネイル用画像ファイルパス４０４は、製本アプリの候補画像表示領域２１０に表示するためのサムネイル画像のファイルパスを示す。候補画像表示領域２１０への表示にはさらに解像度が必要ないので、表示用画像よりもさらに小さなサイズのサムネイル画像を表示用画像の生成と同時に作成している。
【００４４】
図５は、文字領域２０４，２０６の文字列を編集した際に、編集した文字データを見開きページに表示するための処理動作例を示すフローチャートである。
【００４５】
ステップＳ５０１で、ＣＰＵ１０６は、文字列を編集するためのアクションを起こす。具体的には、ユーザの、文字領域２０４，２０６をＰＤ１０５でクリックする操作に応じて、ＣＰＵ１０６は、文字列の編集用に、図６に示すテキスト入力画面６００をＬＣＤ１０１に表示する。
【００４６】
ステップＳ５０２で、ユーザは、テキスト入力画面６００にテキストを入力する。テキスト入力画面６００は、ユーザが文字領域に文字を入力するための画面例である。この画面６００は、図２の文字領域２０４，２０６をユーザがＰＤ１０５でクリックすることで，ＣＰＵ１０６が、別ウインドウとして表示する。
【００４７】
テキスト入力画面６００は、文字列を入力する文字列入力領域６０１を有し、文字列入力領域６０１の右側には文字列入力領域６０１内に入力された文字列をスクロールするためのスクロールバー６０２が付加されている。テキスト入力画面６００はまた、文字列入力をキャンセルするためのキャンセルボタン６０３と、文字列の入力を確定するＯＫボタン６０４を持つ。
【００４８】
文字列入力領域６０１は、領域２０４，２０６に表示すべき文字列を入力するためのフィールドである。入力した文字列がフィールドの縦幅を超えてしまった場合には、スクロールバー６０２が表示され、スクロールバー６０２の操作により所望の入力文字列を表示させることができる。
【００４９】
ユーザがキャンセルボタン６０３を押下すると、ＣＰＵ１０６は、この編集処理を終了し、開いていたウインドウを閉じる。この場合、元のテキストデータに対して編集した内容は反映（更新）されない。
【００５０】
ユーザがＯＫボタン６０４を押下すると、ＣＰＵ１０６は、この編集処理を終了し、開いていたウインドウを閉じる。この場合、元のテキストデータに対して編集した内容が、反映（更新）される。
【００５１】
ステップＳ５０３で、ＣＰＵ１０６は、ステップＳ５０２でテキストデータが更新されたかどうか、即ち、ＯＫボタン６０４が押されたかどうかを判断する。ＯＫボタン６０４が押されていて、テキストデータの更新がない場合、この編集処理の前の状態を再表示する。従って、この場合、ＣＰＵ１０６は、ステップＳ５０４，Ｓ５０５，Ｓ５０６の作業を迂回して、見開きページ表示処理（Ｓ５０７）に進む。
【００５２】
ステップＳ５０４で、ＣＰＵ１０６は、更新されたテキストデータを用いて仮組版の処理を行う。ここでは、文字領域に対して文字溢れが生じた場合、文字溢れをした状態で全ページの仮組版処理を行う。これにより、仮組版で全論理ページの文字の溢れ具合を全体的に把握できる。仮組版処理の詳細は、図７、図９乃至図１１、図１３乃至図１７に示すフローチャートと、図８、図１２、図１８及び図１９に示すＤＢ構造を参照して、後述する。
【００５３】
ステップＳ５０５で、ＣＰＵ１０６は、仮組版された各論理ページに対してページ調節処理を行う。このページ調節処理が本実施例の特徴的な処理であり、各論理ページにおいて文字領域に対して文字データが溢れた場合の調節処理を含む。詳細は、図２０Ａ乃至図２５Ｃ及び図３５に示すフローチャートと、図２９乃至図３４Ｅ、図３６、図３７及び図３８を参照して、後述する。
【００５４】
ステップＳ５０６で、ＣＰＵ１０６は、ステップＳ５０５でのページ調節処理が成功したか否かを判断する。
【００５５】
ステップＳ５０６でページ調節処理が成功し、各論理ページ間での文字溢れの調節が終了した場合、ステップＳ５０７で、ＣＰＵ１０６は、見開きページ２００に結果を表示する。この処理の詳細は、図２６乃至図２８に示すフローチャートを参照して、後述する。
【００５６】
ステップＳ５０６でページ調節処理が失敗したと判断した場合、ステップＳ５０８で、ＣＰＵ１０６は、ユーザにエラー画面を表示してユーザに通知し、ユーザを再度テキスト入力画面へ導く。
【００５７】
ステップＳ５０１からＳ５０８の処理を経て、ユーザは、製本アプリでテキスト入力した文字列の製本状態をＬＣＤ１０１上で確認できる。
【００５８】
図７は、仮組版処理（Ｓ５０４）の詳細なフローチャートを示す。図８は、ページ組版情報（物理ページ情報）を管理するページ組版情報管理テーブルの構成例を示す。
【００５９】
ステップＳ７０１で、ＣＰＵ１０６は、各ページの処理を行うためのループの回数を制御するループ変数ｎＰａｇｅに１を代入する。
【００６０】
ステップＳ７０２で、ＣＰＵ１０６は、図８に示すページ組版情報管理テーブル８００のｎＰａｇｅページ目の組版情報が存在するか否かを判断する。存在する場合、ＣＰＵ１０６は、新規に組版情報を作成せずに、ステップＳ７０４に進み、現状のデータを再利用する。
【００６１】
ページ組版情報管理テーブル８００は、論理ページ番号８０１、組版済みかどうかを示す組版済みフラグ８０２、実ページ番号８０３、及び、組版開始時のテキスト先頭オフセット８０４を持つ。ページ組版情報管理テーブル８００は更に、他ページから溢れてきた文字列をマージした際の表示順序フラグ８０５、ページ内Ｅｘｔｅｎｔ数８０６、及び、ページ内Ｅｘｔｅｎｔ組版情報リスト８０７を持つ。
【００６２】
論理ページ番号８０１は、ページ情報がどの論理ページのものかを示す。
【００６３】
組版済みフラグ８０２は、そのページの組版状態を示す。具体的には、０は未組版な状態、１は組版済みの状態、２は仮組版済みの状態をそれぞれ示す。
【００６４】
実ページ番号８０３は、ページ調節処理で実際に配置される実ページ番号を示す。
【００６５】
組版開始時のテキスト先頭オフセット８０４は、ページ内でのテキスト描画開始位置を示す。
【００６６】
マージ時の表示順序フラグ８０５は、別ページの文字溢れをマージした際に、自身のページが管理する文字列とどの順序で表示するかを示す。具体的には、１は自身のページの文字列を優先（＝上部）して表示し、２は別ページの文字溢れをマージした文字列を優先して表示することをそれぞれ示す。
【００６７】
ページ内Ｅｘｔｅｎｔ数８０６は、自身のページが持つＥｘｔｅｎｔの数を示す。
【００６８】
ページ内Ｅｘｔｅｎｔ組版情報リスト８０７は、組版されたＥｘｔｅｎｔ情報をリスト形式で保持する。
【００６９】
ステップＳ７０２で組版情報が存在しない場合、すなわち、テーブル８００内の論理ページ番号８０１にｎＰａｇｅ目のデータが存在しない場合、ＣＰＵ１０６は、ステップＳ７０３に進む。ステップＳ７０３で、ＣＰＵ１０６は、ページ組版情報管理テーブルにｎＰａｇｅ目のデータを作成する。ステップＳ７０２で組版情報が存在する場合、ＣＰＵ１０６は、ステップＳ７０３を迂回してステップＳ７０４に進む。
【００７０】
ステップＳ７０４で、ＣＰＵ１０６は、論理ページ番号８０１がｎＰａｇｅ目になるデータの組版情報を初期化する。組版情報の初期化は、図９に示すフローチャートを参照して、後述する。
【００７１】
ステップＳ７０５で、ＣＰＵ１０６は、初期化が終了したｎＰａｇｅ目のデータに仮組版処理を行う。仮組版処理は、図１０に示すフローチャートを用いて後述する。
【００７２】
ステップ７０６で、ＣＰＵ１０６は、次のｎＰａｇｅ＋１ページ目の論理ページがあるか否かを判断し、存在しない場合には最後のページまで仮組版が終了したとして図７に示す処理を終了する。
【００７３】
ステップ７０７で、ＣＰＵ１０６は、ループ変数ｎＰａｇｅをインクリメントし、ステップＳ７０２〜Ｓ７０５で各ページの仮組版処理を繰り返す。
【００７４】
図９は、組版情報初期化処理（Ｓ７０４）の詳細なフローチャートを示す。
【００７５】
ステップＳ９０１で、ＣＰＵ１０６は、図７に示す処理でのループ変数ｎＰａｇｅの値を論理ページ番号８０１に代入する。
【００７６】
ステップＳ９０２で、ＣＰＵ１０６は、該当ページの組版済みフラグ８０２を０（未組版）に設定する。
【００７７】
ステップＳ９０３で、ＣＰＵ１０６は、該当ページの実ページ番号８０３を０に設定する。
【００７８】
ステップＳ９０４で、ＣＰＵ１０６は、該当ページのテキスト先頭オフセット８０４を１に設定する。
【００７９】
ステップＳ９０５で、ＣＰＵ１０６は、該当ページのエクステント数８０６を０に設定する。
【００８０】
ステップＳ９０６で、ＣＰＵ１０６は、該当ページのエクステントリスト８０７にすでにデータが存在するかを確認する。データが存在する場合（Ｓ９０６）、ステップＳ９０７で、ＣＰＵ１０６は、そのデータを削除し、ステップＳ９０８に進む。データが存在しない場合（Ｓ９０６）、ＣＰＵ１０６は、ステップＳ９０７を迂回し、ステップＳ９０８に進む。
【００８１】
ステップＳ９０８で、ＣＰＵ１０６は、エクステントリスト８０７にＮＵＬＬを設定する。
【００８２】
以上の処理により、ｎＰａｇｅ目のページ情報が初期化される。
【００８３】
図１０は、ｎＰａｇｅ目の仮組版処理（Ｓ７０５）の詳細なフローチャートを示す。
【００８４】
ステップＳ１００１で、ＣＰＵ１０６は、コンテンツ管理テーブル３００からｎＰａｇｅ目のコンテンツ情報を取得する。
【００８５】
ステップＳ１００２で、ＣＰＵ１０６は、Ｅｘｔｅｎｔ情報を生成する。このＥｘｔｅｎｔ情報生成処理の詳細を、図１１に示すフローチャートと図１２に示すＤＢ構造を参照して、説明する。
【００８６】
図１２は、Ｅｘｔｅｎｔ組版情報管理テーブル１２００の構成例を示す。Ｅｘｔｅｎｔ組版情報管理テーブル１２００は、Ｅｘｔｅｎｔの組版情報を管理するテーブルである。Ｅｘｔｅｎｔ組版情報管理テーブル１２００は、ページ内Ｅｘｔｅｎｔ番号１２０１、上左端座標１２０２、Ｅｘｔｅｎｔサイズ１２０３、Ｅｘｔｅｎｔ縦方向位置１２０４、及び配置する論理ページ番号１２０５を持つ。テーブル１２００は更に、画像フラグ１２０６、画像ＩＤ１２０７、テキスト先頭オフセット１２０８、組版終了フラグ１２０９、Ｅｘｔｅｎｔ内行数１２１０、Ｅｘｔｅｎｔ内組版情報リスト１２１１、及び仮組版行高総和１２１２を持つ。
【００８７】
ページ内Ｅｘｔｅｎｔ番号１２０１は、ページ内でのＥｘｔｅｎｔの通番（ＩＤ）を示す。
【００８８】
上左端座標１２０２は、ページ内での表示開始位置のＸ・Ｙ座標を示す。
【００８９】
Ｅｘｔｅｎｔサイズ１２０３は、表示するＥｘｔｅｎｔのＸ・Ｙ方向のサイズ（縦・横）を示す。
【００９０】
Ｅｘｔｅｎｔ縦方向位置１２０４は、Ｅｘｔｅｎｔの内容の縦方向の表示位置を示す。本実施例では、１を上寄せとし、２を下寄せとする。
【００９１】
配置する論理ページ番号１２０５は、Ｅｘｔｅｎｔを配置する論理ページ番号を示し、この論理ページ番号により、コンテンツ管理テーブル３００との関係性を管理する。
【００９２】
画像フラグ１２０６及び配置する画像ＩＤ１２０７は、Ｅｘｔｅｎｔが画像領域であった場合に利用される。画像フラグ１２０６は画像であるかどうかを示し、本実施例では、画像のＥｘｔｅｎｔに対し１を割り当て、２を文字のＥｘｔｅｎｔに対し２を割り当てる。配置する画像ＩＤ１２０７は、配置する画像の画像ＩＤを示し、コンテンツ管理テーブル３００及び画像ＩＤ管理テーブル４００とのリンク又は関係性を示す。
【００９３】
テキスト先頭オフセット１２０８、組版終了フラグ１２０９、Ｅｘｔｅｎｔ内行数１２１０、Ｅｘｔｅｎｔ内組版情報リスト１２１１及び仮組版行高総和１２１２は、Ｅｘｔｅｎｔが文字領域であった場合に利用される。テキスト先頭オフセット１２０８は、文字を書き出すまでのオフセットを示す。組版終了フラグ１２０９は、Ｅｘｔｅｎｔ内の組版の状態を表すフラグである。本実施例では、組版終了フラグ１２０９として、０が未組版の状態を、１が全ての文字がＥｘｔｅｎｔ内に組版できた状態を、２が組版したが文字溢れが発生している状態をそれぞれ示す。Ｅｘｔｅｎｔ内行数１２１０は、組版した結果の行数を示す。Ｅｘｔｅｎｔ内組版情報リスト１２１１は、組版された各行情報のリストを示す。仮組版行高総和１２１２は、仮組版をした時の行高の総和を示しており、これがＥｘｔｅｎｔの表示できる領域の高さをオーバーしていた場合には、文字溢れが発生しているということになる。
【００９４】
図１１は、Ｅｘｔｅｎｔ情報生成処理（Ｓ１００２）の動作フローチャートである。
【００９５】
ステップＳ１１０１で、ＣＰＵ１０６は、Ｅｘｔｅｎｔ組版情報管理テーブル１２００のレコードを作成する。
【００９６】
ステップＳ１１０２で、ＣＰＵ１０６は、ページ内Ｅｘｔｅｎｔ番号１２０１に１を代入する。
【００９７】
ステップＳ１１０３で、ＣＰＵ１０６は、上左端座標１２０２とＥｘｔｅｎｔサイズ１２０３を初期化する。ここでの初期化は、システムで設定されている初期値を代入することであり、図３０に示すようなＥｘｔｅｎｔ領域を初期状態とする。ページ３０００の中に、初期値として１つのＥｘｔｅｎｔ領域３００１を設け、上左端座標１２０２をＥｘｔｅｎｔ３００１上の位置３００２とし、サイズ１２０３をＥｘｔｅｎｔ３００１の縦３００３と横３００４とする。
【００９８】
ステップＳ１１０４で、ＣＰＵ１０６は、該当ページのテキスト先頭オフセットをＥｘｔｅｎｔのオフセットに代入する。
【００９９】
ステップＳ１１０５で、ＣＰＵ１０６は、図１３に示すフローチャートに従ってＥｘｔｅｎｔの各要素を初期化する。
【０１００】
ステップＳ１３０１で、ＣＰＵ１０６は、Ｅｘｔｅｎｔ縦方向位置１２０４に「１：上寄せ」を代入する。
【０１０１】
ステップＳ１３０２で、ＣＰＵ１０６は、配置する論理ページ番号１２０５に組版している論理ページ番号を代入する。
【０１０２】
ステップＳ１３０３で、ＣＰＵ１０６は、Ｅｘｔｅｎｔが画像領域であるかどうかを示す画像フラグ１２０６に「０：テキスト」を代入する。
【０１０３】
ステップＳ１３０４で、ＣＰＵ１０６は、配置する画像ＩＤ１２０７にＮＵＬＬを代入する。
【０１０４】
ステップＳ１３０５で、ＣＰＵ１０６は、組版終了フラグ１２０９に「０：未組版」を代入する。
【０１０５】
ステップＳ１３０６で、ＣＰＵ１０６は、Ｅｘｔｅｎｔ内行数１２１０に０を代入する。
【０１０６】
ステップＳ１３０７で、ＣＰＵ１０６は、仮組版行高総和１２１２に０を代入する。
【０１０７】
図１１に示すフローチャートに戻り、ステップＳ１１０６で、ＣＰＵ１０６は、ページ組版情報管理テーブル８００の該当ページのレコードを取得する。
【０１０８】
ステップＳ１１０７で、ＣＰＵ１０６は、ステップＳ１１０５で取得したデータのページ内Ｅｘｔｅｎｔ数８０６の値をインクリメントする。
【０１０９】
以上のステップＳ１１０１〜１１０７の処理で、ＣＰＵ１０６は、Ｅｘｔｅｎｔ情報を生成する。
【０１１０】
図１０に戻り、ステップＳ１００３以降を説明する。ステップＳ１００３で、ＣＰＵ１０６は、このフローチャートの処理を制御する変数ｎＥｘｔｅｎｔに１を代入する。
【０１１１】
ステップＳ１００４で、ＣＰＵ１０６は、ステップＳ１００１で取得したコンテンツ情報の画像ＩＤ３０２がＮＵＬＬであるかどうかを判断する。ＮＵＬＬである場合（Ｓ１００４）、該当ページは画像のない文字列領域だけのページであることが分かる。この場合、ＣＰＵ１０６は、ステップＳ１００５〜Ｓ１０１０の処理を省略して、ステップＳ１０１１に進む。
【０１１２】
画像ＩＤ３０２がＮＵＬＬでない場合（Ｓ１００４）、つまり、この該当ページが画像領域と文字領域で構成されている場合、ステップＳ１００５で、ＣＰＵ１０６は、画像サイズで画像領域と文字領域にＥｘｔｅｎｔを分割する。この処理の詳細は、図１４に示すフローチャートを参照して、後述する。
【０１１３】
ステップＳ１００６で、ＣＰＵ１０６は、ステップＳ１００４で分割した画像領域のＥｘｔｅｎｔ情報の画像フラグ１２０６を「１：画像を配置」に設定する。
【０１１４】
ステップＳ１００７で、ＣＰＵ１０６は、画像領域のＥｘｔｅｎｔ情報の画像ＩＤ１２０７に対して、ステップＳ１００１で取得したコンテンツ管理テーブル３００の画像ＩＤ３０２をセットする。
【０１１５】
ステップＳ１００８で、ＣＰＵ１０６は、ｎＥｘｔｅｎｔ番目のＥｘｔｅｎｔ情報（すなわち、画像領域のＥｘｔｅｎｔ情報）を該当論理ページのＥｘｔｅｎｔ情報リストの最後に追加する。
【０１１６】
ステップＳ１００９で、ＣＰＵ１０６は、変数ｎＥｘｔｅｎｔをインクリメントする。
【０１１７】
ステップＳ１０１０で、ＣＰＵ１０６は、ｎＥｘｔｅｎｔ番目のＥｘｔｅｎｔ情報を取得する。すでに画像領域の配置を終了しているので、ｎＥｘｔｅｎｔ番目のＥｘｔｅｎｔは文字領域となる。
【０１１８】
ＣＰＵ１０６は、ステップＳ１００４でＥｘｔｅｎｔが文字領域のみの場合、又はステップＳ１０１０までで画像領域のＥｘｔｅｎｔの処理が終了して文字領域の処理に移った後に、ステップＳ１０１１を実行する。ステップＳ１０１１で、ＣＰＵ１０６は、文字領域の仮組版処理を行う。この仮組版処理の詳細は、図１５を参照して後述する。
【０１１９】
ステップＳ１０１２で、ＣＰＵ１０６は、ｎＥｘｔｅｎｔ番目のＥｘｔｅｎｔ情報（即ち、文字領域のＥｘｔｅｎｔ情報）を該当論理ページのＥｘｔｅｎｔ情報リストの最後に追加する。
【０１２０】
ステップＳ１０１３で、ＣＰＵ１０６は、該当ページのページ組版情報の組版済フラグ８０２に「２：仮組済み」を設定する。ここでＥｘｔｅｎｔの文字組版で文字溢れが起こっていた場合、図２９に模式的に示すように、文字溢れ状態でページの仮組版を一度終了させることになる。そして、次のページ調節処理で文字溢れ分の調節作業を行う。
【０１２１】
図１４は、Ｅｘｔｅｎｔ領域分割処理（Ｓ１００５）の詳細なフローチャートを示す。また、図３１は、ステップＳ１００５において初期状態のＥｘｔｅｎｔに対して画像領域の高さで分割する際の一例を示す。図３１を参照して、図１４に示すフローチャートの動作を説明する。
【０１２２】
ステップＳ１４０１で、ＣＰＵ１０６は、画像領域のＥｘｔｅｎｔサイズ１２０３の高さ情報を変数ｎＯｒｉｇｉｎａｌＳｉｚｅに代入する。図３１に示す例では、元々のＥｘｔｅｎｔの高さ３１０４が、ｎＯｒｉｇｉｎａｌＳｉｚｅに代入される。
【０１２３】
ステップＳ１４０２で、ＣＰＵ１０６は、分割しようとするサイズとｎＯｒｉｇｉｎａｌＳｉｚｅを比較する。分割サイズの方が大きい場合（Ｓ１４０２）、Ｅｘｔｅｎｔの分割ができないので、ＣＰＵ１０６は、戻り値ｎＲｅｔｕｒｎに０を代入する（Ｓ１４０９）。
【０１２４】
分割サイズの方が小さい場合（Ｓ１４０２）、ステップＳ１４０３で、ＣＰＵ１０６は、分割サイズを現在のＥｘｔｅｎｔの高さに代入する。図３１に示す例では、画像領域の高さ３１０５で初期状態の高さ３１０４を上書きすることになる。
【０１２５】
ステップＳ１４０４で、ＣＰＵ１０６は、分割用のＥｘｔｅｎｔを生成し、生成された新しいＥｘｔｅｎｔをＮｅｗＥｘｔｅｎｔとする。実際には、ＣＰＵ１０６は、図１１に示すＥｘｔｅｎｔ生成処理に従って、ＮｅｗＥｘｔｅｎｔを生成する。
【０１２６】
ステップＳ１４０５で、ＣＰＵ１０６は、新しく生成したＮｅｗＥｘｔｅｎｔのページ内Ｅｘｔｅｎｔ番号をインクリメントする。図３１に示す例では、ＮｅｗＥｘｔｅｎｔは画面下の領域となり、ページ内Ｅｘｔｅｎｔ番号は２となる。
【０１２７】
ステップＳ１４０６で、ＣＰＵ１０６は、新しく生成したＮｅｗＥｘｔｅｎｔの上左端座標のＹ座標に分割サイズを加算する。図３１に示す例では、元々の上左端座標３１０２の点を、分割サイズ（＝画像領域の高さ３１０５）の距離だけ移動して、位置３１０３に移動させる。
【０１２８】
ステップＳ１４０７で、ＣＰＵ１０６は、元々のＥｘｔｅｎｔの高さ３１０４から分割サイズ（＝画像領域の高さ３１０５）を減算した結果を、新しく生成したＮｅｗＥｘｔｅｎｔの高さに代入する。図３１に示す例では、高さ３１０６が新しいＥｘｔｅｎｔの高さとなる。
【０１２９】
ステップＳ１４０８で、ＣＰＵ１０６は、戻り値ｎＲｅｔｕｒｎに１を代入する。
【０１３０】
以上により、ＣＰＵ１０６はＥｘｔｅｎｔを分割し、図１４に示すフローを呼び出した処理に戻り値ｎＲｅｔｕｒｎを返す。
【０１３１】
図１５は、Ｅｘｔｅｎｔ仮組版処理（Ｓ１０１１）の詳細なフローチャートである。
【０１３２】
ステップＳ１５０１で、ＣＰＵ１０６は、図１３に示す手順でＥｘｔｅｎｔ情報を初期化する。図１３に示す初期化処理では、位置とサイズ情報の初期化は行っておらず、テキストの配置に関する情報のみが初期化される。
【０１３３】
ステップＳ１５０２で、ＣＰＵ１０６は、行数をカウントする変数ｎＬｉｎｅに初期値１を代入する。
【０１３４】
ステップＳ１５０３で、ＣＰＵ１０６は、図１８に示す行組版情報管理テーブル１８００のレコードを作成する。行組版情報管理テーブル１８００は、Ｅｘｔｅｎｔ内行番号１８０１、行ベースライン位置１８０２、行長１８０３、論理ページ番号１８０４及び組版開始時のテキスト先頭オフセット１８０５を持つ。行組版情報管理テーブル１８００は更に、文字組版終了フラグ１８０６、行内文字数１８０７及び行内文字情報リスト１８０８を持つ。
【０１３５】
Ｅｘｔｅｎｔ内行番号１８０１は、Ｅｘｔｅｎｔ内で何行目にいるかのカウンタの情報を示す。
【０１３６】
行ベースライン位置１８０２は、該当行がＥｘｔｅｎｔ内のどの位置に配置されるかのベースライン位置を示す。
【０１３７】
行長１８０３は、該当行のＸ方向の長さを示す。
【０１３８】
配置する論理ページ番号１８０４は、該当Ｅｘｔｅｎｔが配置される論理ページ番号を示す。
【０１３９】
組版開始時のテキスト先頭オフセット１８０５は、組版処理を行う場合のデフォルトのオフセットを示す。
【０１４０】
文字組版終了フラグ１８０６は、行内の組版状況を示す。本実施例では、０は未組版を、１は全ての文字を行内に組版することを、２は組版終了せずあふれた文字があることをそれぞれ示す。
【０１４１】
行内文字数１８０７は、組版された行内の文字数を示す。
【０１４２】
行内文字情報リスト１８０８は、組版された各文字情報のリスト（= 文字列）を示す。
【０１４３】
ステップＳ１５０４で、ＣＰＵ１０６は、図１６に示すフローチャートで後述する処理に従って、行組版処理を行う。
【０１４４】
ステップＳ１５０５で、ＣＰＵ１０６は、組版された行情報をＥｘｔｅｎｔ組版情報管理テーブル１２００の行組版情報リスト１２１１に付加する。
【０１４５】
ステップＳ１５０６で、ＣＰＵ１０６は、文字組版終了フラグが１である場合、すべてのテキストが組版できたと判断してステップＳ１５０８に進む。逆に文字組版終了フラグが２である場合、ＣＰＵ１０６は、組版すべき文字が残っていると判断してステップＳ１５０７に進む。
【０１４６】
組版すべき文字が残っていると判断された場合（Ｓ１５０６）、ステップＳ１５０７で、ＣＰＵ１０６は、行数をインクリメントして、ステップＳ１５０３からＳ１５０６までの処理を繰り返す。
【０１４７】
組版すべき文字が残っていない場合（Ｓ１５０６）、全ての文字の組版が終了した段階となる。この場合、ステップＳ１５０８で、ＣＰＵ１０６は、最終行のベースライン位置１８０２をＥｘｔｅｎｔ情報の仮組版行高総和１２１２に代入する。
【０１４８】
ステップＳ１５０９で、ＣＰＵ１０６は、Ｅｘｔｅｎｔ情報の高さとステップＳ１５０８で求めた仮組版行高総和１２１２とを比較する。
【０１４９】
Ｅｘｔｅｎｔ情報の高さの方が高いか等しい場合（Ｓ１５０９）、行情報を組版していった結果、Ｅｘｔｅｎｔの高さの中に組版ができたことを意味する。そこで、この場合、Ｓ１５１０で、ＣＰＵ１０６は、Ｅｘｔｅｎｔ情報の文字組版終了フラグ１２０９に「１：すべての文字をＥｘｔｅｎｔ内容に組版」の値を代入する。
【０１５０】
Ｅｘｔｅｎｔ情報の高さの方が低い場合（Ｓ１５０９）、行情報を組版していった結果、Ｅｘｔｅｎｔの高さの中にすべてを組版できなかったことを意味する。そこで、この場合、ステップＳ１５１１で、ＣＰＵ１０６は、Ｅｘｔｅｎｔ情報の文字組版終了フラグ１２０９に「２：組版終了せずあふれた文字がある」の値を代入する。この値が代入されたＥｘｔｅｎｔを持つページが、ページ調節処理の対象となる。
【０１５１】
図１６は、行組版処理（Ｓ１５０４）の詳細なフローチャートを示す。
【０１５２】
ステップＳ１６０１で、ＣＰＵ１０６は、行情報を初期化する。この初期化処理の詳細は、図１７を参照して後述する。
【０１５３】
ステップＳ１６０２で、ＣＰＵ１０６は、組版を行うオフセット位置にある文字コードを取得する。
【０１５４】
ステップＳ１６０３で、ＣＰＵ１０６は、ステップＳ１６０２で取得した文字コードｎＣｏｄｅに対する文字幅をｎＷｏｒｄＷｉｄｔｈに代入する。
【０１５５】
ステップＳ１６０４で、ＣＰＵ１０６は、同じ行の組版済み行長１８０３とステップＳ１６０３で得たｎＷｏｒｄＷｉｄｔｈを加算した結果がＥｘｔｅｎｔの横幅を超えるかどうか判定する。
【０１５６】
加算結果がＥｘｔｅｎｔの横幅を越えない場合（Ｓ１６０４）、問題なく行内に組版できることになる。この場合、ステップＳ１６０５で、ＣＰＵ１０６は、図１９に示す文字組版情報管理テーブル１９００のレコードを作成する。文字組版情報管理テーブル１９００は、キーとなるＥｘｔｅｎｔ内のテキストオフセット１９０１、行内の文字配置相対位置１９０２、文字コード１９０３及び文字幅１９０４からなる。
【０１５７】
ステップＳ１６０６で、ＣＰＵ１０６は、現在のオフセット位置をテキストオフセット１９０１に代入する。
【０１５８】
ステップＳ１６０７で、ＣＰＵ１０６は、行長を行内の文字配置相対位置１９０２に代入する。
【０１５９】
ステップＳ１６０８で、ＣＰＵ１０６は、ステップＳ１６０２で取得した文字コードを文字コード１９０３に代入する。
【０１６０】
ステップＳ１６０９で、ＣＰＵ１０６は、ステップＳ１６０３で取得した文字幅を文字幅１９０４に代入する。
【０１６１】
ステップＳ１６１０で、ＣＰＵ１０６は、行情報の行長に現在の行長と文字幅１９０４を加算した結果を行情報の行長に代入する。
【０１６２】
ステップＳ１６１１で、ＣＰＵ１０６は、組版した文字情報を行内文字情報リスト１８０８に追加する。
【０１６３】
ステップＳ１６１２で、ＣＰＵ１０６は、対象文字を１つ先の文字へと推移させる。
【０１６４】
ステップＳ１６１３で、ＣＰＵ１０６は、対象文字が改行コードまで到達したか否かを判断する。
【０１６５】
ステップＳ１６１４で、ＣＰＵ１０６は、対象文字がＮＵＬＬかどうかを判断する。
【０１６６】
ステップＳ１６１５で、対象文字が改行コードでもＮＵＬＬでもない場合（Ｓ１６１３，Ｓ１６１４）、ステップＳ１６１５で、ＣＰＵ１０６は、続きの文字列があると判断して、オフセットを１つ進め、ステップＳ１６０２に戻る。これにより、ステップＳ１６０２〜Ｓ１６１の処理が繰り返される。
【０１６７】
文字コードがＮＵＬＬであった場合（Ｓ１６１４）、ステップＳ１６１６で、ＣＰＵ１０６は、すべての文字列の組版が終了したとして、文字組版終了フラグ１８０６に「１：すべての文字を行内に組版」の値を代入する。
【０１６８】
次の文字幅を足したらＥｘｔｅｎｔの横幅を超える場合（Ｓ１６０４）、又は、文字コードが改行コードである場合（Ｓ１６１３）、引き続き組版が必要な文字列があることになる。これらの場合、ステップＳ１６１７で、ＣＰＵ１０６は、文字組版終了フラグ１８０６に「２：組版終了せずあふれた文字がある」を代入する。
【０１６９】
図１７は、行情報初期化処理（Ｓ１６０１）の動作フローチャートを示す。
【０１７０】
ステップＳ１７０１で、ＣＰＵ１０６は、Ｅｘｔｅｎｔ内に直前行の情報があるか否かを判断する。
【０１７１】
直前行の情報が存在してＥｘｔｅｎｔ内の最初の行ではない場合（Ｓ１７０１）、ステップＳ１７０２で、ＣＰＵ１０６は、直前行の行組版管理情報テーブルの値を取得して変数ｏＰｒｅｖＬｉｎｅに保持する。
【０１７２】
ステップＳ１７０３で、ＣＰＵ１０６は、直前行の行番号１８０１をインクリメントして、これから組版する行情報のＥｘｔｅｎｔ内行番号１８０１に代入する。
【０１７３】
ステップＳ１７０４で、ＣＰＵ１０６は、直前行のベースライン位置１８０２にこれから組版するフォントサイズと行間情報を足して、これから組版する行情報の行ベースライン位置１８０２に代入する。
【０１７４】
ステップＳ１７０５で、ＣＰＵ１０６は、直前行のテキスト先頭オフセット１８０５に直前行の行内文字数１８０７を加えることで、これから組版する行情報の先頭オフセット１８０５に代入する。
【０１７５】
直前行の情報が存在せずに、Ｅｘｔｅｎｔ内の最初の行であった場合（Ｓ１７０１）、ステップＳ１７０６で、ＣＰＵ１０６は、これから組版する上業法のＥｘｔｅｎｔ内行番号１８０１に１を代入する。
【０１７６】
ステップＳ１７０７で、ＣＰＵ１０６は、同様に最初の行としてベースライン位置１８０２はフォントサイズの値を代入する。
【０１７７】
ステップＳ１７０８で、ＣＰＵ１０６は、同様に最初の行としてテキスト先頭オフセット１８０５に１を代入する。
【０１７８】
ステップＳ１７０５又はＳ１７０８の後、ステップＳ１７０９で、ＣＰＵ１０６は、行長１８０３に０を代入する。
【０１７９】
ステップＳ１７１０で、ＣＰＵ１０６は、Ｅｘｔｅｎｔの論理ページ番号を行情報の論理ページ番号１８０４に代入する。
【０１８０】
ステップＳ１７１１で、ＣＰＵ１０６は、文字組版終了フラグに「０：未組版」を代入する。
【０１８１】
ステップＳ１７１２で、ＣＰＵ１０６は、行内文字数１８０７に０を代入する。
【０１８２】
以上の処理により、行情報が初期化される。
【０１８３】
図５のステップＳ５０４で説明した仮組版処理が終了すると、仮組版で作成されたデータは、例えば、図２９に示すような状態になる。本実施例では、論理ページ毎にＥｘｔｅｎｔを溢れても、テキスト終了まで仮組版を行って、同時に文字溢れの情報を管理する。そして、ステップＳ５０５でのページ調節処理において、対象となるＥｘｔｅｎｔが明確になるような前処理を行う。
【０１８４】
仮組版で調節対象となったＥｘｔｅｎｔに対するページ調節処理を説明する。本実施例では、単純に文字溢れを起こしたＥｘｔｅｎｔを分割し、隣接ページとしての次ページの空き領域に入るかどうかを判断して、入る場合には文字溢れを起こした分を次ページに表示する。次ページに表示ができない場合には、ページ調節処理を中止し、ユーザにエラー画面を表示してユーザに通知し、テキスト入力画面６００を再表示する。
【０１８５】
次ページの空き領域に入るか否かを判断基準にする理由は、画像に対するコメントが複数ページ先になってしまうと、画像とコメントの紐付けをユーザに認識してもらうことが難しくなり、本としての完成度が下がるからである。
【０１８６】
図２０Ａ及び図２０Ｂは一体として、調節方法の動作フローチャートを示す。
【０１８７】
ステップＳ２００１で、ＣＰＵ１０６は、実ページ番号を管理する変数ｎＲｅａｌＰａｇｅに初期値１を代入する。
【０１８８】
ステップＳ２００２で、ＣＰＵ１０６は、論理ページ番号を管理する変数ｎＬｏｇｉｃａｌＰａｇｅに初期値１を代入する。
【０１８９】
ステップＳ２００３で、ＣＰＵ１０６は、ｎＬｏｇｉｃａｌＰａｇｅ目のページ組版情報テーブル情報ｏＬｏｇｉｃａｌＰａｇｅを取得する。
【０１９０】
ステップＳ２００４で、ＣＰＵ１０６は、ｏＬｏｇｉｃａｌＰａｇｅの実ページ番号に、ｎＲｅａｌＰａｇｅを代入する。
【０１９１】
ステップＳ２００５で、ＣＰＵ１０６は、ｏＬｏｇｉｃａｌＰａｇｅのページ内Ｅｘｔｅｎｔ組版情報リストを取得する。
【０１９２】
ステップＳ２００６で、ＣＰＵ１０６は、Ｅｘｔｅｎｔの処理を行うためのカウンタ変数ｎＥｘｔｅｎｔに初期値１を代入する。
【０１９３】
ステップＳ２００７で、ＣＰＵ１０６は、ｎＬｏｇｉｃａｌＰａｇｅのｎＥｘｔｅｎｔ番目のＥｘｔｅｎｔ組版情報管理テーブルの画像フラグが「１：画像を配置」であるか判断する。
【０１９４】
Ｅｘｔｅｎｔが画像であると判断された場合（Ｓ２００７）、ステップＳ２００８で、ＣＰＵ１０６は、ページ調節処理の対象外とするためにカウンタ変数ｎＥｘｔｅｎｔをインクリメントする。
【０１９５】
ステップＳ２００９で、ＣＰＵ１０６は、文字領域であるｎＥｘｔｅｎｔ番目のＥｘｔｅｎｔ情報の文字組版終了フラグが「２：組版終了せず溢れた文字がある」であるかを判断する。
【０１９６】
文字溢れが発生している場合（Ｓ２００９）、ステップＳ２０１０で、ＣＰＵ１０６は、Ｅｘｔｅｎｔを分割し、溢れた部分をＮｅｗＥｘｔｅｎｔとして新たな領域として扱う。この処理の詳細は、図２１に示すフローチャートを参照して、後述する。
【０１９７】
ステップＳ２０１１で、ＣＰＵ１０６は、ｎＬｏｇｉｃａｌＰａｇｅ＋１番目のページ組版情報があるか否かを判断する。
【０１９８】
ページ組版情報が存在しない場合（Ｓ２０１１）、つまり、最後の論理ページであった場合、ステップＳ２０１２で、ＣＰＵ１０６は、組版情報を生成する。
【０１９９】
ステップＳ２０１３で、ＣＰＵ１０６は、ステップＳ２０１２で生成したページ組版情報を初期化する。
【０２００】
ページ組版情報があった場合（Ｓ２０１１）、又は、ページ組版情報を新規作成した場合（Ｓ２０１２，Ｓ２０１３）、ステップＳ２０１４で、ＣＰＵ１０６は、該当のページ組版情報の空き領域の高さを計算する。この処理の詳細は、図３５に示すフローチャートを参照して、後述する。
【０２０１】
ステップＳ２０１５で、ＣＰＵ１０６は、空き領域の高さと分割した文字溢れ分のＥｘｔｅｎｔの仮組した行高の総和を比較する。
【０２０２】
空き領域の高さが分割した文字溢れ分のＥｘｔｅｎｔの仮組した行高の総和以上である場合（Ｓ２０１５）、分割した文字溢れ分のＥｘｔｅｎｔが次ページの空き領域に詰め込めることが可能である。そこで、この場合、ステップＳ２０１６で、ＣＰＵ１０６は、文字溢れ分のＥｘｔｅｎｔをｎＬｏｇｉｃａｌＰａｇｅ＋１ページのページ情報にマージする。この処理の詳細は、図２２に示すフローチャートを参照して、後述する。具体的には、このマージ処理によって、図３６に示す表示例３６００ａの文字領域３６０１から文字溢れした領域３６０２が次のページにマージされる。図３６は、ｎＯｒｄｅｒＦｌａｇを「２：マージしたページの文字が先」とした場合の表示例を示す。
【０２０３】
空き領域の高さが分割した文字溢れ分のＥｘｔｅｎｔの仮組した行高の総和より小さい場合（Ｓ２０１５）、ステップＳ２０１７で、ＣＰＵ１０６は、実ページがｎＲｅａｌＰａｇｅ＋１ページの組版情報を生成する。
【０２０４】
ステップＳ２０１８で、ＣＰＵ１０６は、ステップＳ２０１７で生成したページ組版情報に図１１に示すフローチャートに従ってＥｘｔｅｎｔ情報を生成する。これにより、次の実ページに全面が文字領域のＥｘｔｅｎｔであるページ情報が生成される。
【０２０５】
ステップＳ２０１９で、ＣＰＵ１０６は、ステップＳ２０１８で生成したＥｘｔｅｎｔ情報を取得する。
【０２０６】
ステップＳ２０２０で、ＣＰＵ１０６は、ステップＳ０１９で取得したＥｘｔｅｎｔの高さと、分割した文字溢れ分のＥｘｔｅｎｔの仮組した行高の総和を比較する。
【０２０７】
Ｅｘｔｅｎｔの高さが、分割した文字溢れ分のＥｘｔｅｎｔの仮組した行高の総和以上である場合（Ｓ２０２０）、文字溢れした全ての文字が次ページの全面文字領域のＥｘｔｅｎｔ内に収まることになる。この場合、ステップＳ２０２１で、ＣＰＵ１０６は、文字溢れしたＥｘｔｅｎｔをステップＳ２０１８で生成したＥｘｔｅｎｔとマージする。この処理の詳細は、図２２に示すフローチャートを参照して、後述する。
【０２０８】
ステップＳ２０２２で、ＣＰＵ１０６は、カウンタ変数ｎＲｅａｌＰａｇｅをインクリメントする。
【０２０９】
ステップＳ２０２３で、ＣＰＵ１０６は、次のＥｘｔｅｎｔ情報があるか否かを判断する。
【０２１０】
次のＥｘｔｅｎｔ情報がある場合（Ｓ２０２３）、ステップＳ２０２４で、ＣＰＵ１０６は、カウンタ変数ｎＥｘｔｅｎｔをインクリメントし、ステップＳ２００９に戻る。Ｅｘｔｅｎｔ情報が残っている限り、ＣＰＵ１０６は、ステップＳ２００９〜Ｓ２０２３の処理を繰り返す。
【０２１１】
次のＥｘｔｅｎｔ情報が無い場合（Ｓ２０２３）、ステップＳ２０２５で、ＣＰＵ１０６は、ｎＬｏｇｉｃａｌＰａｇｅ＋１番目のページ情報があるか否かを判断する。
【０２１２】
次のページ情報がある場合（Ｓ２０２５）、ステップＳ２０２６で、ＣＰＵ１０６は、カウンタ変数ｎＬｏｇｉｃａｌＰａｇｅをインクリメントする。
【０２１３】
ステップＳ２０２７で、ＣＰＵ１０６は、同様にカウンタ変数ｎＲｅａｌＰａｇｅをインクリメントし、ステップＳ２００３に戻る。
【０２１４】
次のページ情報が無い場合（Ｓ２０２５）、最後のページまでページ調節処理が問題なく終了したことになる。そこで、ステップＳ２０２８で、ＣＰＵ１０６は、戻り値として１：成功を設定する。
【０２１５】
分割した文字溢れ分のＥｘｔｅｎｔを次ページの空き領域に詰め込めることができなかった場合（Ｓ２０２０）、ページ調節処理が失敗したと判断できる。そこで、ステップＳ２０２９で、ＣＰＵ１０６は、戻り値として０：失敗を設定する。
【０２１６】
以上の処理により、問題なく調節処理が行われた場合には結果として１が返却され、ＣＰＵ１０６は、次の見開きページの表示処理へ進む。どこかで調節処理に失敗した場合には、ＣＰＵ１０６は、ユーザにエラーを提示してテキスト入力画面６００を再表示する。
【０２１７】
図２１は、文字溢れを起こした際にＥｘｔｅｎｔ情報を分割する処理動作（Ｓ２０１０）の一例を説明するフローチャートである。
【０２１８】
ステップＳ２１０１で、ＣＰＵ１０６は、行数のカウンタ変数ｎＷｏｒｋＬｉｎｅに１を代入する。
【０２１９】
ステップＳ２１０２で、ＣＰＵ１０６は、ベースラインのカウンタ変数ｎＷｏｒｋＢａｓｅｌｉｎｅを代入する。
【０２２０】
ステップＳ２１０３で、ＣＰＵ１０６は、Ｅｘｔｅｎｔの行数とカウンタ変数を比較する。
【０２２１】
Ｅｘｔｅｎｔの行数が多い場合（Ｓ２１０３）、即ち、処理対象の行が存在する場合、ステップＳ２１０４で、ＣＰＵ１０６は、ｎＷｏｒｋＬｉｎｅの行情報を取得する。
【０２２２】
ステップＳ２１０５で、ＣＰＵ１０６は、該当行の行ベースライン位置がＥｘｔｅｎｔの高さを超えているか否かを判断する。
【０２２３】
Ｅｘｔｅｎｔの高さの方が高い場合（Ｓ２１０５）、該当行まででは文字溢れが生じていないと判断できる。この場合、ステップＳ２１０６で、ＣＰＵ１０６は、カウンタ変数のｎＢａｓｅＬｉｎｅに該当行までのベースラインの位置を設定する。
【０２２４】
ステップＳ２１０７で、ＣＰＵ１０６は、カウンタ変数ｎＷｏｒｋＬｉｎｅをインクリメントして、ステップＳ２１０３に戻る。これにより、行が全て無くなるまで、又は、該当行のベースライン位置がＥｘｔｅｎｔの高さを超えるまで、ステップＳ２１０３〜Ｓ２０１５の処理が繰り返される。
【０２２５】
Ｅｘｔｅｎｔの行数がカウンタ変数より小さい場合（Ｓ２１０３）、ステップＳ２１０８で、ＣＰＵ１０６は、Ｅｘｔｅｎｔから溢れる行数が特定できた状態で、分割用のＥｘｔｅｎｔを生成する。分割するＥｘｔｅｎｔのサイズとして、ｎＷｏｒｋＢａｓｅｌｉｎｅを用いる。
【０２２６】
ステップＳ２１０９で、ＣＰＵ１０６は、分割したＥｘｔｅｎｔのページ内Ｅｘｔｅｎｔ番号をインクリメントする。
【０２２７】
ステップＳ２１１１で、ＣＰＵ１０６は、ｎＷｏｒｋＬｉｎｅ番目以降を、図２２の処理に従って分割元のＥｘｔｅｎｔから分割先のＥｘｔｅｎｔに移動させる。その結果、図３２に示す例のように、分割元の領域に関しては全ての文字をＥｘｔｅｎｔ内に組版することができ、溢れた部分が新しいＥｘｔｅｎｔ領域として独立する。新しいＥｘｔｅｎｔ領域は、仮組版された行高の総和とＥｘｔｅｎｔの高さが等しい状態になっている。
【０２２８】
ステップＳ２１１２で、ＣＰＵ１０６は、分割元のＥｘｔｅｎｔの組版終了フラグを「１：すべての文字をＥｘｔｅｎｔ内に組版」の状態とする。また、分割先Ｅｘｔｅｎｔも明示的に文字溢れの無いように作成したので、ＣＰＵ１０６は、その組版終了フラグに１を代入する。
【０２２９】
以上により、文字溢れが生じたＥｘｔｅｎｔを２つの文字溢れが生じないＥｘｔｅｎｔに分割することができる。
【０２３０】
図３５は、該当ページの空き領域の高さを計算する処理動作（Ｓ２０１４）の一例を説明するフローチャートである。
【０２３１】
ステップＳ３５０１で、ＣＰＵ１０６は、該当ページのページ組版情報を取得する。
【０２３２】
ステップＳ３５０２で、ＣＰＵ１０６は、ページの最終Ｅｘｔｅｎｔを取得する。
【０２３３】
ステップＳ３５０３で、ＣＰＵ１０６は、ステップ３５０２で取得した最終Ｅｘｔｅｎｔの仮組版した行高の総和とＥｘｔｅｎｔの高さを比較する。
【０２３４】
Ｅｘｔｅｎｔの高さの方が高い場合（Ｓ３５０３）、つまり領域に空きがあると判断される場合、ステップＳ３５０４で、ＣＰＵ１０６は、差分をとって空きの高さを計算して返却値（空き容量の高さ）とする。
【０２３５】
Ｅｘｔｅｎｔの高さの方が低い場合（Ｓ３５０３）、つまり領域に空きが無いと判断される場合、ステップＳ３５０５で、ＣＰＵ１０６は、返却値（空き容量の高さ）として０を代入する。
【０２３６】
図２２は、Ｅｘｔｅｎｔマージ処理動作（Ｓ２０１６，Ｓ２０２１）の一例を説明するフローチャートである。
【０２３７】
ステップＳ２２０１で、ＣＰＵ１０６は、マージ先のページの最終Ｅｘｔｅｎｔの情報を取得する。
【０２３８】
ステップＳ２２０２で、ＣＰＵ１０６は、ステップＳ２２０１で取得した最終Ｅｘｔｅｎｔを、その領域の仮組版された行高の総和で分割する。Ｅｘｔｅｎｔの分割処理には、図１４に示すフローチャートで説明した手法を用いる。具体的には、図３４Ａに示す例３４００ａでの最終Ｅｘｔｅｎｔ３４０１を、図３４Ｂに示す例３４００ｂのように文字が表示されている領域３４０２と文字の無い領域３４０３に分割する。
【０２３９】
ステップＳ２２０３で、ＣＰＵ１０６は、マージするＥｘｔｅｎｔを取得する。
【０２４０】
ステップＳ２２０４で、ＣＰＵ１０６は、再度、ページの最終Ｅｘｔｅｎｔを取得する。ここで取得されるＥｘｔｅｎｔは、分割後に文字の無い領域３４０３のＥｘｔｅｎｔとなる。
【０２４１】
ステップＳ２２０５で、ＣＰＵ１０６は、マージするＥｘｔｅｎｔの先頭行以降を、最終Ｅｘｔｅｎｔに移動させる。図３４Ｃに示すように、例３４００ｃの文字領域３４０４，３４０５のような状態となる。この処理の詳細は、図２３に示すフローチャートを参照して、後述する。
【０２４２】
ステップＳ２２０６で、ＣＰＵ１０６は、マージするＥｘｔｅｎｔの論理ページ番号を最終Ｅｘｔｅｎｔの論理ページ番号に代入する。
【０２４３】
ステップＳ２２０７で、ＣＰＵ１０６は、最終Ｅｘｔｅｎｔの文字組終了フラグに１を代入する。
【０２４４】
ステップＳ２２０８で、ＣＰＵ１０６は、ページ情報のマージ時の順序フラグが「１：現ページの文字が先」であるか否かを確認する。
【０２４５】
ページに最初からあった文字列を上部に表示し、マージした文字列を下から表示する場合（Ｓ２２０８）、ステップＳ２２０９で、ＣＰＵ１０６は、下の領域がマージされた領域だと分かるように、縦方向の表示では下寄せで表示させる。
【０２４６】
ステップＳ２２１０で、ＣＰＵ１０６は、Ｅｘｔｅｎｔをページの下限に寄せて表示をするために表示開始位置をずらす調節をする。具体的には、最後のＥｘｔｅｎｔの高さから仮組版での高さを引くことで、ずらすための調節量を計算している。
【０２４７】
ステップＳ２２１１で、ＣＰＵ１０６は、ステップＳ２２１０で計算した調節量だけ最終Ｅｘｔｅｎｔの上左端位置のＹ座標をずらす。
【０２４８】
ステップＳ２２１２で、ＣＰＵ１０６は、ステップＳ２２１０で計算した調節量だけ最終Ｅｘｔｅｎｔの高さをずらす。
【０２４９】
ステップＳ２２０９〜ステップＳ２２１２の処理により、図３４Ｄに示す例３４００ｄのように、マージした文字列が最終Ｅｘｔｅｎｔの下寄せで表示されるようになる。
【０２５０】
マージした文字列が先に表示される場合（Ｓ２２０８）、ステップＳ２２１３で、ＣＰＵ１０６は、最終Ｅｘｔｅｎｔとその直前のＥｘｔｅｎｔの順序を入れ替える。この処理により、図３４Ｅに示す例３４００ｅのように、マージした文字列が画像領域の下及び次ページの文字領域の上に表示されることになる。
【０２５１】
図２３は、行移動処理動作（Ｓ２２０５）の一例を説明するフローチャートである。
【０２５２】
ステップＳ２３０１で、ＣＰＵ１０６は、移動元のＥｘｔｅｎｔ情報を取得し、ＳｒｃＥｘｔｅｎｔにセットする。
【０２５３】
ステップＳ２３０２で、ＣＰＵ１０６は、移動開始の行番号を取得し、ｎＳｔａｒｔＬｉｎｅにセットする。
【０２５４】
ステップＳ２３０３で、ＣＰＵ１０６は、移動先のＥｘｔｅｎｔ情報を取得し、ＴｇｔＥｘｔｅｎｔにセットする。
【０２５５】
ステップＳ２３０４で、ＣＰＵ１０６は、ベースラインを計算する変数ｎＢａｓｅＬｉｎｅの初期値に移動先Ｅｘｔｅｎｔの仮組版した行高の総和を代入する。
【０２５６】
ステップＳ２３０５で、ＣＰＵ１０６は、移動対象の行があるかを判断する。
【０２５７】
移動対象の行がある場合（Ｓ２３０５）、ステップＳ２３０６で、ＣＰＵ１０６は、現在走査しているｎＳｔａｒｔＬｉｎｅ番目の行情報を移動元の行情報リストから取り出し、移動先の行情報リストに追加する。
【０２５８】
ステップＳ２３０７で、ＣＰＵ１０６は、現在のｎＢａｓｅＬｉｎｅに移動した行の行間とフォントサイズを足したものを次のｎＢａｓｅＬｉｎｅに代入する。
【０２５９】
ステップＳ２３０８で、ＣＰＵ１０６は、現在の行情報のベースラインにｎＢａｓｅＬｉｎｅを代入する。
【０２６０】
ステップＳ２３０９で、ＣＰＵ１０６は、行移動に伴い移動元のＥｘｔｅｎｔの行数をデクリメントする。
【０２６１】
ステップＳ２３１０で、ＣＰＵ１０６は、行移動に伴う移動先のＥｘｔｅｎｔの行数をインクリメントする。
【０２６２】
ステップＳ２３１１で、ＣＰＵ１０６は、移動先のＥｘｔｅｎｔの仮組版した行高の総和にｎＢａｓｅＬｉｎｅを代入し、ステップＳ２３０５に戻る。
【０２６３】
ステップＳ２３０５〜Ｓ２３１１の処理を、移動対象の行が無くなるまで繰り返す（Ｓ２３０５）。
【０２６４】
移動対象の行が無くなると（Ｓ２３０５）、ステップＳ２３１２で、ＣＰＵ１０６は、移動元から最終行の行情報を取得する。
【０２６５】
ステップＳ２３１３で、ＣＰＵ１０６は、ステップＳ２３１２で取得した行情報のベースライン情報を、移動元のＥｘｔｅｎｔの仮組版された行高の総和に代入する。
【０２６６】
以上の処理により、行情報の移動を行うことができる。
【実施例２】
【０２６７】
実施例１で説明したページ調節方法では、奇数（右側）ページの文字列が溢れた場合に、次の見開きの偶数（左側）ページが隣接ページとなる。この隣接ページの文字列領域に溢れた文字列が送り出されると、画像に対するコメントが見開きページをまたぐ状態になってしまう。これでは、製本状態では見難くなると懸念される。図３６に示す例では、領域３６０１から文字溢れした部分を次ページの領域３６０２に表示している。ユーザは例３６００ａの画像に対するコメントを読むためには、ページをめくり、例３６００ｂのページにある領域３６０２の文字を読まなければならない。
【０２６８】
以下に説明するページ調節では、奇数（右側）ページの文言が溢れる場合、奇数（右側）ページに空白のページを差し込み、奇数（右側）ページのデータを次の見開きの偶数（左側）ページに押し出すようにした。これにより、コメントが見開きをまたぐことのなくなり、ユーザは、ページめくり無しで、溢れたコメントを読むことが出来る。
【０２６９】
図２４Ａ、図２４Ｂ及び図２４Ｃは一体として、実施例２のページ調節処理動作の一例を説明するフローチャートを示す。
【０２７０】
ステップＳ２４０１〜Ｓ２４０９は、ステップＳ２００１〜Ｓ２００９と同様の処理であるので、説明を省略する。
【０２７１】
ステップＳ２４１０で、ＣＰＵ１０６は、実際に配置されるｎＲｅａｌＰａｇｅが偶数（見開き左側）であるか否かを判断する。実際に配置されるｎＲｅａｌＰａｇｅが偶数（見開き左側）である場合、ＣＰＵ１０６は、ステップＳ２４１１に進む。ステップＳ２４１１〜Ｓ２４２８の処理は、図２０Ａ及び図２０ＢのステップＳ２０１０〜Ｓ２０２７と同様の処理であるので、説明を割愛する。
【０２７２】
実際に配置されるｎＲｅａｌＰａｇｅが奇数（見開き右側）である場合（Ｓ２４１０）、ＣＰＵ１０６はステップＳ２４２９に進む。ステップＳ２４２９で、ＣＰＵ１０６は、現在の論理ページの実ページ番号をインクリメントする。実ページをインクリメントすることで、奇数（見開き右側）ページのデータを次の見開きの偶数（見開き左側）ページに押し出すことを意図している。
【０２７３】
ステップＳ２４３０で、ＣＰＵ１０６は、押し出された後のｎＲｅａｌＰａｇｅ目の組版情報を生成する。
【０２７４】
ステップＳ２４３１で、ＣＰＵ１０６は、図９を参照して説明したページ組版情報の初期化を実行する。これにより、内容が空のページが生成される。具体的には、図３７に示すように、奇数ページ３７００ａにあったデータが次の見開きの偶数ページ３７００ｂに押し出され、奇数ページ３７００ａには空ページ３７０１が挿入され、白紙のページとして表示される。
【０２７５】
ステップＳ２４３２で、ＣＰＵ１０６は、カウンタ変数ｎＲｅａｌＰａｇｅをインクリメントして、ステップＳ２４０３に戻る。ステップＳ２４２９〜Ｓ２４３１により奇数（見開き右側）ページに空ページを差し込んだ後に、実ページを１つ進めて次の見開きの偶数ページとした状態で同じ論理ページに対する処理を繰り返す。このように次ページに押し出した後に再処理を行うことで、偶数ページの文字溢れのＥｘｔｅｎｔ処理対象として、文字領域３７０２，３７０３のように表示させることができる。
【０２７６】
次のページ情報がなくなり、最後のページまでページ調節処理が問題なく終了すると（Ｓ２４２６）、ステップＳ２４３３で、ＣＰＵ１０６は、戻り値として１：成功を設定する。
【０２７７】
分割した文字溢れ分のＥｘｔｅｎｔを次ページの空き領域に詰め込めることができない場合（Ｓ２４２１）、ページ調整処理が失敗したことになる。そこで、この場合、ステップＳ２４３４で、ＣＰＵ１０６は、戻り値として０：失敗を設定する。
【０２７８】
以上の処理では、問題なく調節処理が行われた場合には結果として１が返却され、次の見開きページの表示処理へ進む。一方、どこかで調節処理に失敗した場合、ＣＰＵ１０６は、ユーザにエラーを提示してテキスト入力画面６００を再表示する。
【実施例３】
【０２７９】
実施例１及び実施例２は、ページの順方向（右側に進む方向）にページが増加していくことで、見やすさ・デザイン性の確保を行った。しかし、このような製本システムは、ページ数で従量課金されることがあり、商品の値段が増加しやすい。
【０２８０】
これに対し、実施例３では、奇数（右側）ページの文字列が溢れる場合に、まず偶数（左側）ページの空き領域に文字溢れの分を押し込めるか否かを判断し、押し込めない場合にのみ実施例１と同様な対応を行うようにした。これにより、ページの順方向へのページ数の増加を抑制できる。
【０２８１】
図２５Ａ、図２５Ｂ及び図２５Ｃは一体として、実施例３のページ調節処理動作の一例を説明するフローチャートを示す。
【０２８２】
ステップＳ２５０１〜Ｓ２５２８は、実施例２と同様であるので、ここでは説明を省略する。
【０２８３】
奇数（見開き右側）から文字溢れを起こした場合に（Ｓ２５１１）、ステップＳ２５２９で、ＣＰＵ１０６は、実ページがｎＲｅａｌＰａｇｅ−１となるページの組版情報を取得する。
【０２８４】
ステップＳ２５３０で、ＣＰＵ１０６は、図３５に示すフローチャートに従い、ステップＳ２５２９で組版情報を取得したページの空き領域の高さを計算する。
【０２８５】
ステップＳ２５３１で、ＣＰＵ１０６は、ステップＳ２５３０で計算した空き領域の高さが文字溢れを起こして分離したＥｘｔｅｎｔの仮組した行高の総和と比較する。空き領域の高さの方が低い場合（Ｓ２５３１）、ＣＰＵ１０６は、実施例１と同様に、次ページに全面文字領域のページを作ってそこに文字溢れのデータを流し込む処理（Ｓ２５１８以降）に進む。一方、空き領域の高さの方が高い場合（Ｓ２５３１）、ＣＰＵ１０６は、前ページの空き領域に溢れたＥｘｔｅｎｔをマージするステップＳ２５３２に進む。
【０２８６】
ステップＳ２５３２で、ＣＰＵ１０６は、前ページのページ情報のｎＯｒｄｅｒＦｌａｇに「１：現ページの文字が先」を代入する。
【０２８７】
ステップＳ２５３３で、ＣＰＵ１０６は、図２２に示すフローチャートに従い、文字溢れ分のＥｘｔｅｎｔをｎＰｒｅｖＲｅａｌＰａｇｅのページ情報にマージする。具体的には、図３８に示すように、奇数ページ３８００ａが文字溢れした場合に、領域３８０１から溢れた分が前ページ３８００ｂの下領域３８０２に配置されることになる。前に溢れたことを示すマーク３８０４は、ユーザに前ページに文字溢れが生じていることを示す。
【０２８８】
次のページ情報がなくなり、最後のページまでページ調節処理が問題なく終了すると（Ｓ２５２６）、ステップＳ２５３４で、ＣＰＵ１０６は、戻り値として「１：成功」を設定する。
【０２８９】
分割した文字溢れ分のＥｘｔｅｎｔを次ページの空き領域に詰め込めることができなかった場合（Ｓ２５２１）、ページ調節処理が失敗したことになる。この場合、ステップＳ２５３５で、ＣＰＵ１０６は、戻り値として「０：失敗」を設定する。
【０２９０】
図２６は、見開きページを表示する処理動作の一例を説明するフローチャートである。
【０２９１】
ステップＳ２６０１で、ＣＰＵ１０６は、Ｘ座標の調節用変数ｘＳｈｉｆｔに０を代入する。
【０２９２】
ステップＳ２６０２で、ＣＰＵ１０６は、ユーザが画面２００で開いている左側ページのページ番号のページ情報を取得してｏＰａｇｅに代入する。
【０２９３】
ステップＳ２６０３で、ＣＰＵ１０６は、左側ページｏＰａｇｅの表示を行う。この処理の詳細は、図２７に示すフローチャートを参照して、後述する。
【０２９４】
ステップＳ２６０４で、ＣＰＵ１０６は、ｏＰａｇｅのページ幅をｘＳｈｉｆｔに代入する。ページ幅は、設定値などで管理されている。
【０２９５】
ステップＳ２６０５で、ＣＰＵ１０６は、ユーザが画面２００で開いている右側ページのページ番号のページ情報を取得してｏＰａｇｅに代入する。
【０２９６】
ステップＳ２６０６で、ＣＰＵ１０６は、ステップＳ２６０３と同様に、図２７で後述するフローチャートに従って、右側ページｏＰａｇｅを表示する。
【０２９７】
図２７は、ページ表示処理動作の一例を説明するフローチャートである。
【０２９８】
ステップＳ２７０１で、ＣＰＵ１０６は、表示するページ番号を取得する。
【０２９９】
ステップＳ２７０２で、ＣＰＵ１０６は、表示するページ番号を実ページ番号に持つページ組版情報を取得する。
【０３００】
ステップＳ２７０３で、ＣＰＵ１０６は、Ｅｘｔｅｎｔのカウントするカウンタ変数ｎＥｘｔｅｎｔに１を代入する。
【０３０１】
ステップＳ２７０４で、ＣＰＵ１０６は、直前のＥｘｔｅｎｔを保持する変数ｏＰｒｅｖＥｘｔｅｎｔにＮＵＬＬを代入して初期化する。
【０３０２】
ステップＳ２７０５で、ＣＰＵ１０６は、該当ページのＥｘｔｅｎｔ数とカウンタ変数を比較する。
【０３０３】
該当ページ内に表示すべきＥｘｔｅｎｔが存在している場合（Ｓ２７０５）、ステップ２７０６で、ＣＰＵ１０６は、該当のＥｘｔｅｎｔ情報を取得する。
【０３０４】
ステップＳ２７０７では、図２８に示すフローチャートで後述する方法でＥｘｔｅｎｔを表示する。
【０３０５】
ステップＳ２７０８で、ＣＰＵ１０６は、直前のＥｘｔｅｎｔが存在するかを確認する。
【０３０６】
直前のＥｘｔｅｎｔが存在する場合（Ｓ２７０８）、ステップＳ２７０９で、ＣＰＵ１０６は、直前のＥｘｔｅｎｔが仮組版された時の論理ページ番号と、現在表示するＥｘｔｅｎｔが仮組版された時の論理ページ番号が同じかどうかを判断する。
【０３０７】
違う論理ページに表示されるＥｘｔｅｎｔである場合（Ｓ２７０９）、ステップＳ２７１０で、ＣＰＵ１０６は、図３３に示すように直前のＥｘｔｅｎｔ３３０１と現在表示するＥｘｔｅｎｔ３３０２の間にコンテンツ境界線３３０３を表示する。図３３に示すコンテンツ境界線３３０３の表示方法は説明用の一例であり、本発明を限定しない。
【０３０８】
図２８は、Ｅｘｔｅｎｔ表示処理動作の一例を説明するフローチャートである。
【０３０９】
ステップＳ２８０１で、ＣＰＵ１０６は、図２６で定義したＸ軸方向調節量ｘＳｈｉｆｔの値を取得する。
【０３１０】
ステップＳ２８０２で、ＣＰＵ１０６は、行数をカウントするカウンタ変数ｎＷｏｒｋを１で初期化する。
【０３１１】
ステップＳ２８０３で、ＣＰＵ１０６は、カウンタ変数がＥｘｔｅｎｔ内の行数に達したか否かを判断する。
【０３１２】
ステップＳ２８０４で、ＣＰＵ１０６は、ｎＷｏｒｋ番目の行情報を取得する。
【０３１３】
ステップＳ２８０５で、ＣＰＵ１０６は、Ｘ座標がＥｘｔｅｎｔの上左端のＸ座標＋ｘＳｈｉｆｔを加えた値で、Ｙ座標がＥｘｔｅｎｔの上左端のＹ座標＋現在の行数のベースラインを加えた値となる位置から行内文字を表示する。行内文字としては、行組版情報管理テーブルの行内文字情報リスト１８０８で管理する文字情報を順次表示していくことになる。行内の表示に関してはここでは省略するが、行内の表示に関しては本発明を限定するものではない。
【０３１４】
ステップＳ２８０６で、ＣＰＵ１０６は、カウンタ変数ｎＷｏｒｋをインクリメントし、ステップＳ２８０３に進む。表示すべき行情報がある場合（Ｓ２８０３）、ＣＰＵ１０６は、Ｓ２８０４〜Ｓ２８０６の処理を繰り返す。
【０３１５】
以上の処理によって、テキストページの更新がない場合には以前のデータを用い、更新がある場合には仮組版処理・ページ調節処理を経て作成されたデータを用いて、見開きページが表示される。
【０３１６】
以上、本発明をその好適な実施例に基づいて詳述してきたが、本発明はこれら特定の実施例に限られるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。上述の実施例の一部を適宜組み合わせてもよい。また、上述の実施例の機能を実現するソフトウェアのプログラムを、記録媒体から直接、或いは有線／無線通信を用いてプログラムを実行可能なコンピュータを有するシステム又は装置に供給し、そのプログラムを実行する場合も本発明に含む。従って、本発明の機能処理をコンピュータで実現するために、該コンピュータに供給又はインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明の機能処理を実現するためのコンピュータプログラム自体も本発明に含まれる。その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。プログラムを供給するための記録媒体としては、例えば、ハードディスク、磁気テープ等の磁気記録媒体、光／光磁気記憶媒体、不揮発性の半導体メモリでもよい。また、プログラムの供給方法としては、コンピュータネットワーク上のサーバに本発明を形成するコンピュータプログラムを記憶し、接続のあったクライアントコンピュータがコンピュータプログラムをダウンロードしてプログラムするような方法も考えられる。
【図１】
2014109823.tif 000003
【図２】
2014109823.tif 000004
【図３】
2014109823.tif 000005
【図４】
2014109823.tif 000006
【図５】
2014109823.tif 000007
【図６】
2014109823.tif 000008
【図７】
2014109823.tif 000009
【図８】
2014109823.tif 000010
【図９】
2014109823.tif 000011
【図１０】
2014109823.tif 000012
【図１１】
2014109823.tif 000013
【図１２】
2014109823.tif 000014
【図１３】
2014109823.tif 000015
【図１４】
2014109823.tif 000016
【図１５】
2014109823.tif 000017
【図１６】
2014109823.tif 000018
【図１７】
2014109823.tif 000019
【図１８】
2014109823.tif 000020
【図１９】
2014109823.tif 000021
【図２０Ａ】
2014109823.tif 000022
【図２０Ｂ】
2014109823.tif 000023
【図２１】
2014109823.tif 000024
【図２２】
2014109823.tif 000025
【図２３】
2014109823.tif 000026
【図２４Ａ】
2014109823.tif 000027
【図２４Ｂ】
2014109823.tif 000028
【図２４Ｃ】
2014109823.tif 000029
【図２５Ａ】
2014109823.tif 000030
【図２５Ｂ】
2014109823.tif 000031
【図２５Ｃ】
2014109823.tif 000032
【図２６】
2014109823.tif 000033
【図２７】
2014109823.tif 000034
【図２８】
2014109823.tif 000035
【図２９】
2014109823.tif 000036
【図３０】
2014109823.tif 000037
【図３１】
2014109823.tif 000038
【図３２】
2014109823.tif 000039
【図３３】
2014109823.tif 000040
【図３４Ａ】
2014109823.tif 000041
【図３４Ｂ】
2014109823.tif 000042
【図３４Ｃ】
2014109823.tif 000043
【図３４Ｄ】
2014109823.tif 000044
【図３４Ｅ】
2014109823.tif 000045
【図３５】
2014109823.tif 000046
【図３６】
2014109823.tif 000047
【図３７】
2014109823.tif 000048
【図３８】
2014109823.tif 000049