GetEntity

LayoutCollector.GetEntity method

Возвращает непрозрачную позициюLayoutEnumerator который соответствует указанному узлу. Вы можете использовать возвращаемое значение в качестве аргумента дляCurrent учитывая, что перечисляемый документ be и документ узла совпадают.

public object GetEntity(Node node)

Примечания

Этот метод работает только дляParagraph узлы, а также неделимые встроенные узлы, напримерBookmarkStart или жеShape Это не работает дляRun ,CellRow или жеTable узлы и узлы в верхнем/нижнем колонтитуле.

Обратите внимание, что объект вернулся дляParagraph узел является диапазоном разрыва абзаца. Используйте соответствующий метод, чтобы подняться на родительскую линию

Если вам нужно перейти кRun текста, вы можете вставить закладку прямо перед it , а затем вместо этого перейти к закладке.

Если вам нужно перейти кCell node, затем вы можете перейти кParagraph в этой ячейке, а затем подняться к родительскому объекту. Тот же подход можно использовать дляRow иTable узлы.

Примеры

Показывает, как просмотреть диапазоны страниц, которые охватывает узел.

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

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