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 fonctionne uniquement pourParagraph nœuds, ainsi que les nœuds en ligne indivisibles, par exempleBookmarkStart ouShape . Cela ne fonctionne pas pourRun ,CellRow ouTable nœuds et nœuds dans l’en-tête/pied de page.

Notez que l’entité est revenue pour unParagraphLe nœud est une section de saut de paragraphe. Utilisez la méthode appropriée pour remonter à la ligne parente.

Si vous avez besoin de naviguer vers unRun de texte, vous pouvez alors insérer un signet juste avant it , puis naviguer vers le signet à la place.

Si vous avez besoin de naviguer vers unCell nœud, vous pouvez alors passer à unParagraph dans cette cellule, puis remonter jusqu’à une entité parente. La même approche peut être utilisée pourRow etTable nœuds.

Exemples

Montre comment voir les plages de pages qu’un nœud couvre.

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

// Appelez la méthode « GetNumPagesSpanned » pour compter le nombre de pages sur lesquelles s'étend le contenu de notre document.
// Étant donné que le document est vide, ce nombre de pages est actuellement nul.
Assert.AreEqual(doc, layoutCollector.Document);
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

// Remplissez 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 mesure 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 de pages globales.
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