LayoutCollector

LayoutCollector class

Den här klassen låter dig beräkna sidnummer för dokumentnoder.

För att lära dig mer, besökKonvertera till fast sidformat dokumentationsartikel.

public class LayoutCollector

Konstruktörer

namnBeskrivning
LayoutCollector(Document)Initierar en instans av denna klass.

Egenskaper

namnBeskrivning
Document { get; set; }Hämtar eller ställer in dokumentet som denna insamlingsinstans är kopplad till.

Metoder

namnBeskrivning
Clear()Rensar all insamlad layoutdata. Anropar den här metoden efter att dokumentet har uppdaterats manuellt eller layouten har byggts om.
GetEndPageIndex(Node)Hämtar ett 1-baserat index för sidan där noden slutar. Returnerar 0 om noden inte kan mappas till en sida.
GetEntity(Node)Returnerar en ogenomskinlig position förLayoutEnumerator vilket motsvarar den angivna noden. Du kan använda returnerat värde som argument för attCurrent givet att dokumentet som räknas upp och nodens dokument är desamma.
GetNumPagesSpanned(Node)Hämtar antalet sidor som den angivna noden sträcker sig över. 0 om noden finns inom en enda sida. Detta är samma sak somGetEndPageIndex -GetStartPageIndex .
GetStartPageIndex(Node)Hämtar ett 1-baserat index för sidan där noden börjar. Returnerar 0 om noden inte kan mappas till en sida.

Anmärkningar

När du skapar enLayoutCollector och ange enDocumentdokumentobjekt att bifoga till, samlaren kommer att registrera mappning av dokumentnoder till layoutobjekt när dokumentet formateras till sidor.

Du kommer att kunna ta reda på på vilken sida en viss dokumentnod (t.ex. körning, stycke eller tabellcell) finns genom att användaGetStartPageIndex ,GetEndPageIndex ochGetNumPagesSpanned metoder. Dessa metoder bygger automatiskt en sidlayoutmodell för dokumentet och uppdaterar fält vid behov.

När du inte längre behöver samla in layoutinformation är det bäst att ställa inDocument egendom tillnull för att undvika onödig insamling av fler layoutmappningar.

Exempel

Visar hur man ser sidintervallen som en nod sträcker sig över.

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

// Anropa metoden "GetNumPagesSpanned" för att räkna hur många sidor innehållet i vårt dokument sträcker sig över.
// Eftersom dokumentet är tomt är antalet sidor för närvarande noll.
Assert.AreEqual(doc, layoutCollector.Document);
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

// Fyll dokumentet med 5 sidor innehåll.
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);

// Innan layoutinsamlaren anropar vi metoden "UpdatePageLayout" för att ge oss
// en korrekt siffra för alla layoutrelaterade mätvärden, såsom sidantal.
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

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

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

// Vi kan se numren på start- och slutsidorna för valfri nod och deras totala sidlängd.
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.");
}

// Vi kan iterera över layout-entiteterna med hjälp av en LayoutEnumerator.
LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc);

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

// LayoutEnumeratorn kan gå igenom samlingen av layout-entiteter som ett träd.
// Vi kan också tillämpa den på vilken nods motsvarande layout-entitet som helst.
layoutEnumerator.Current = layoutCollector.GetEntity(doc.GetChild(NodeType.Paragraph, 1, true));

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

Se även