LayoutCollector
LayoutCollector class
Этот класс позволяет вычислять номера страниц узлов документа.
Чтобы узнать больше, посетитеПреобразование в формат фиксированной страницы статья документации.
public class LayoutCollector
Конструкторы
Имя | Описание |
---|---|
LayoutCollector(Document) | Инициализирует экземпляр этого класса. |
Характеристики
Имя | Описание |
---|---|
Document { get; set; } | Получает или задает документ, к которому прикреплен этот экземпляр сборщика. |
Методы
Имя | Описание |
---|---|
Clear() | Очищает все собранные данные макета. Вызовите этот метод после обновления документа вручную или перестройки макета. |
GetEndPageIndex(Node) | Получает индекс страницы, отсчитываемый от 1, на которой заканчивается узел. Возвращает 0, если узел не может быть сопоставлен со страницей. |
GetEntity(Node) | Возвращает непрозрачную позициюLayoutEnumerator который соответствует указанному узлу. Вы можете использовать возвращаемое значение в качестве аргументаCurrent учитывая, что документ, являющийся , и документ узла одинаковы. |
GetNumPagesSpanned(Node) | Получает количество страниц, охватываемых указанным узлом. 0, если узел находится на одной странице. Это то же самое, чтоGetEndPageIndex -GetStartPageIndex . |
GetStartPageIndex(Node) | Получает индекс страницы, отсчитываемый от 1, где начинается узел. Возвращает 0, если узел не может быть сопоставлен со страницей. |
Примечания
Когда вы создаетеLayoutCollector
и укажитеDocument
объект документа, к которому нужно прикрепить, сборщик запишет сопоставление узлов документа с объектами макета, когда документ форматируется на страницы.
Вы сможете узнать, на какой странице находится конкретный узел документа (например, прогон, абзац или ячейка таблицы) с помощьюGetStartPageIndex
,GetEndPageIndex
иGetNumPagesSpanned
методы. Эти методы автоматически создают модель макета страницы документа и при необходимости обновляют поля.
Если вам больше не нужно собирать информацию о макете, лучше всего установитьDocument
собственностьнулевой
, чтобы избежать ненужного сбора дополнительных сопоставлений макета.
Примеры
Показывает, как просмотреть диапазоны страниц, охватываемые узлом.
Document doc = new Document();
LayoutCollector layoutCollector = new LayoutCollector(doc);
// Вызовите метод GetNumPagesSpanned, чтобы подсчитать, сколько страниц занимает содержимое нашего документа.
// Поскольку документ пуст, то количество страниц в данный момент равно нулю.
Assert.AreEqual(doc, layoutCollector.Document);
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));
// Заполняем документ 5 страницами контента.
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Write("Section 1");
builder.InsertBreak(BreakType.PageBreak);
builder.InsertBreak(BreakType.PageBreak);
builder.InsertBreak(BreakType.SectionBreakEvenPage);
builder.Write("Section 2");
builder.InsertBreak(BreakType.PageBreak);
builder.InsertBreak(BreakType.PageBreak);
// Перед сборщиком макетов нам нужно вызвать метод «UpdatePageLayout», чтобы получить
// точная цифра для любого показателя, связанного с макетом, например количества страниц.
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));
layoutCollector.Clear();
doc.UpdatePageLayout();
Assert.AreEqual(5, layoutCollector.GetNumPagesSpanned(doc));
// Мы можем видеть номера начальной и конечной страниц любого узла и их общие диапазоны страниц.
NodeCollection nodes = doc.GetChildNodes(NodeType.Any, true);
foreach (Node node in nodes)
{
Console.WriteLine($"-> NodeType.{node.NodeType}: ");
Console.WriteLine(
$"\tStarts on page {layoutCollector.GetStartPageIndex(node)}, ends on page {layoutCollector.GetEndPageIndex(node)}," +
$" spanning {layoutCollector.GetNumPagesSpanned(node)} pages.");
}
// Мы можем перебирать объекты макета, используя LayoutEnumerator.
LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc);
Assert.AreEqual(LayoutEntityType.Page, layoutEnumerator.Type);
// LayoutEnumerator может перемещаться по коллекции объектов макета, как по дереву.
// Мы также можем применить его к соответствующему объекту макета любого узла.
layoutEnumerator.Current = layoutCollector.GetEntity(doc.GetChild(NodeType.Paragraph, 1, true));
Assert.AreEqual(LayoutEntityType.Span, layoutEnumerator.Type);
Assert.AreEqual("¶", layoutEnumerator.Text);
Смотрите также
- пространство имен Aspose.Words.Layout
- сборка Aspose.Words