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);

Смотрите также