Створення макета сторінки

Створення макета сторінки може бути дорогою процедурою, як з точки зору швидкості, так і з точки зору обсягу пам’яті. Це пояснюється кількома причинами:

  • Документ може містити велику кількість вмісту, який може знадобитися відобразити на тисячах сторінок. Потрібно буде описати геометрію кожного об’єкта на кожній сторінці, що вимагатиме значних ресурсів пам’яті.
  • У документі може бути багато правил, що накладають обмеження на геометрію. Може знадобитися значний обчислювальний час, щоб забезпечити дотримання всіх обмежень.
  • Деякі функції документа, наприклад поле 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 користувач може запитати, чи слід створювати новий макет сторінки або оновлювати існуючий. Обидві ці дії можна виконати за допомогою методу UpdatePageLayout, наданого класом Document. Якщо макет сторінки не існує, але в ньому є необхідність (наприклад, при експорті документа в формат фіксованої сторінки), 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, які впливають на виведення документа на сторінки.