ページレイアウトの作成

ページレイアウトの作成は、速度とメモリの両方の点でコストのかかる手順になる可能性があります。 これはいくつかの理由によるものです:

  • ドキュメントには大量のコンテンツが含まれている場合があり、数千ページに表示する必要がある場合があります。 すべてのページ上のすべてのオブジェクトのジオメトリを記述する必要があり、メモリリソースを消費します。
  • ドキュメントには多くのルールがあり、ジオメトリに制約があります。 かなりの計算時間が費やされる可能性があり、すべての制約が満たされることを保証します。
  • NUMPAGESフィールドなどの一部のドキュメント機能では、将来のプロパティ値に対する再帰的な依存関係が作成されますが、計算時には使用できません。 これは反復計算につながり、計算時間に加算されます。

前述の理由により、Aspose.Wordsは必要な場合にのみページレイアウトを作成します。 この典型的な理由は、ドキュメントページをレンダリングするか、ページレイアウトで使用可能な情報に依存するフィールド値を取得する要求です。 あまり明白でない理由は、文書をHTMLにエクスポートすることです。 HTMLは固定ページ形式ではなく、コンテンツオブジェクトのジオメトリを記述していませんが、それでも画像をサポートしています。 このような画像は、Microsoft Wordで作成された図形の形で、その中にテキストが含まれている場合があります。 たとえば、軸ラベルを持つグラフは画像としてHTMLにエクスポートできますが、これを行う前にAspose.Wordsはその画像をレンダリングする必要があるため、ラベルを表示する場所を知る必要があります。 以下のグラフの例を参照してください:

converting-to-fixed-page-format-aspose-words-cpp-1

非幾何学的性質

ページレイアウトは、幾何学的情報の処理に加えて、色と境界線のスタイルの計算も担当します。 Microsoft Wordでは、テキストの色を自動として指定することができ、色の選択はセルまたは段落の陰影の色に基づいているか、テキストが表示されるページの色に基

ページレイアウトでは、テキストが表示される場所とその背後に表示されるコンテンツが計算され、色の計算が可能になります。 ページレイアウトによって実行される他の特定の計算があります。 たとえば、表の水平境界線は、表の行がテキストの列の最後にあるかどうか、および列間で分割されているかどうかによって異なります。 行が列の最後にレンダリングされる場合、水平ではなく下の境界線が使用されます。

converting-to-fixed-page-format-aspose-words-cpp-2

Aspose.Wordsでは、ユーザーは新しいページレイアウトを作成するか、既存のページレイアウトを更新するかを要求できます。 これらの両方は、Documentクラスによって提供されるUpdatePageLayoutメソッドによって実行できます。 ページレイアウトが存在しないが、必要がある場合(たとえば、文書が固定ページ形式にエクスポートされる場合)、Aspose.Wordsは自動的にこのメソッドを呼び出します。 ただし、ページレイアウトが既に存在する場合、Aspose.Wordsは更新に必要なリソースを消費するのを避けるために、既存のレイアウトを使用します。 この場合、ユーザーは、ページレイアウトがドキュメントモデルで最新であることを確認するために、UpdatePageLayoutメソッドを呼び出す必要があります。

動的構造

ページレイアウトの作成プロセスは、次の手順で構成されます:

  • Conversion–ドキュメントモデルの内容を列挙し、対応するレイアウトオブジェクトを準備します。
  • Build–ページ上の文書の内容を表すレイアウトオブジェクトを配置します。
  • Reflow-ジオメトリの制約を満たすようにオブジェクトの配置を更新します。
  • Projecting layout objects into fixed page presentation and finalizing color information.
  • Building and reflowing of shape content-文書にネストされたテキストコンテンツを含む図形が含まれている場合に必要な手順です。

ページレイアウトは動的な構造であり、部分的に再構築できることに注意してください。 これは、ドキュメントレイアウト構造を再構築せずにフィールド値を計算することが不可能な場合に特に必要です。 フィールドは、ページ上のオブジェクトの位置を参照することができ、同時に、フィールド値自体もページ上にレンダリングされ、参照されるオブジェクトの位置に影響を与えます。 ページの配置時にフィールド値がまだ使用できない可能性があるため、ページレイアウトを一度に構築することはできません。

ドキュメントの最初のページのフッターにNUMPAGESフィールドが表示される場合の典型的なシナリオを考えてみましょう。 このフィールドの値は、ページの合計数です。 ページ上にフィールドを配置するには、その値を知る必要があります。 最初のページのみが現在構築されている場合、ページの総数はまだわかっていません。 この場合、ページレイアウトはデフォルト値を使用し、後でそのフィールドに戻り、実際の計算に従ってその値を変更する必要があります。 ただし、フィールド値を変更すると、ページ上の他のドキュメントコンテンツに影響を与え、最終的に新しいページが追加されたり、既存のページが削除され この問題は、既存のページレイアウトを更新できるようにすることで解決できます。

レイアウトを作成するときに、ページ上のドキュメントの出力に影響するLayoutOptionsプロパティを設定することもできます。