GetEntity

LayoutCollector.GetEntity method

Renvoie une position opaque duLayoutEnumerator qui correspond au nœud spécifié. Vous pouvez utiliser la valeur renvoyée comme argument pourCurrent étant donné que le document étant énuméré et le document du nœud sont les mêmes.

public object GetEntity(Node node)

Remarques

Cette méthode ne fonctionne que pourParagraph nœuds, ainsi que des nœuds en ligne indivisibles, par exempleBookmarkStart ouShape . Ça ne marche pas pourRun ,CellRow ouTable nœuds et nœuds dans l’en-tête/pied de page.

Notez que l’entité est revenue pour unParagraph Le nœud est une étendue de saut de paragraphe. Utilisez la méthode appropriée pour remonter jusqu’à la lignée parente

Si vous devez accéder à unRun de texte, vous pouvez alors insérer un signet juste avant it , puis accéder au signet à la place.

Si vous devez accéder à unCell nœud, vous pouvez alors passer à unParagraph dans cette cellule, puis remontez vers une entité parent. La même approche peut être utilisée pourRow etTable nœuds.

Exemples

Montre comment afficher les plages de pages couvertes par un nœud.

Document doc = new Document();
LayoutCollector layoutCollector = new LayoutCollector(doc);

// Appelez la méthode "GetNumPagesSpanned" pour compter le nombre de pages que couvre le contenu de notre document.
// Puisque le document est vide, ce nombre de pages est actuellement nul.
Assert.AreEqual(doc, layoutCollector.Document);
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

// Remplit le document avec 5 pages de contenu.
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);

// Avant le collecteur de mise en page, nous devons appeler la méthode "UpdatePageLayout" pour nous donner
// un chiffre précis pour toute métrique liée à la mise en page, telle que le nombre de pages.
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

layoutCollector.Clear();
doc.UpdatePageLayout();

Assert.AreEqual(5, layoutCollector.GetNumPagesSpanned(doc));

// Nous pouvons voir les numéros des pages de début et de fin de n'importe quel nœud et leurs étendues globales de pages.
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.");
}

// Nous pouvons parcourir les entités de mise en page à l'aide d'un LayoutEnumerator.
LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc);

Assert.AreEqual(LayoutEntityType.Page, layoutEnumerator.Type);

// Le LayoutEnumerator peut parcourir la collection d'entités de mise en page comme un arbre.
// Nous pouvons également l'appliquer à l'entité de mise en page correspondante de n'importe quel nœud.
layoutEnumerator.Current = layoutCollector.GetEntity(doc.GetChild(NodeType.Paragraph, 1, true));

Assert.AreEqual(LayoutEntityType.Span, layoutEnumerator.Type);
Assert.AreEqual("¶", layoutEnumerator.Text);

Voir également