LayoutCollector

LayoutCollector class

Bu sınıf, belge düğümlerinin sayfa numaralarını hesaplamaya izin verir.

public class LayoutCollector

yapıcılar

İsim Tanım
LayoutCollector(Document) Bu sınıfın bir örneğini başlatır.

Özellikleri

İsim Tanım
Document { get; set; } Bu toplayıcı örneğinin eklendiği belgeyi alır veya ayarlar.

yöntemler

İsim Tanım
Clear() Toplanan tüm yerleşim verilerini temizler. Belge manuel olarak güncellendikten veya düzen yeniden oluşturulduktan sonra bu yöntemi çağırın.
GetEndPageIndex(Node) Düğümün bittiği sayfanın 1 tabanlı dizinini alır. Düğüm bir sayfaya eşlenemiyorsa 0 döndürür.
GetEntity(Node) LayoutEnumerator bu belirtilen düğüme karşılık gelir. Döndürülen değeri bir argüman olarak kullanabilirsiniz.Current verilen belge numaralandırılmıştır ve düğümün belgesi aynıdır.
GetNumPagesSpanned(Node) Belirtilen düğümün kapsadığı sayfa sayısını alır. 0 düğüm tek bir sayfa içindeyse. Bu aynıGetEndPageIndex -GetStartPageIndex .
GetStartPageIndex(Node) Düğümün başladığı sayfanın 1 tabanlı dizinini alır. Düğüm bir sayfaya eşlenemiyorsa 0 döndürür.

Notlar

oluşturduğunuzdaLayoutCollector ve bir belirtinDocumenteklenecek belge nesnesi, toplayıcı, belge sayfalara biçimlendirildiğinde belge düğümlerinin yerleşim nesnelerine eşlenmesini kaydeder.

Belirli bir belge düğümünün (örneğin, çalışma, paragraf veya tablo hücresi) hangi sayfada olduğunu kullanarak bulabileceksiniz.GetStartPageIndex ,GetEndPageIndex veGetNumPagesSpanned yöntemler. Bu yöntemler, belgenin sayfa yerleşim modelini otomatik olarak oluşturur ve gerekirse alanları günceller.

Artık düzen bilgisi toplamanız gerekmediğinde, en iyisiDocument daha fazla düzen eşlemelerinin gereksiz şekilde toplanmasını önlemek için özelliği null olarak ayarlayın.

Örnekler

Bir düğümün yaydığı sayfa aralıklarının nasıl görüneceğini gösterir.

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

// Belgemizin içeriğinin kaç sayfaya yayıldığını saymak için "GetNumPagesSpanned" yöntemini çağırın.
// Belge boş olduğundan, o sayfa sayısı şu anda sıfırdır.
Assert.AreEqual(doc, layoutCollector.Document);
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

// Belgeyi 5 sayfa içerikle doldurun.
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);

// layout toplayıcıdan önce bize verecek "UpdatePageLayout" yöntemini çağırmamız gerekiyor.
// sayfa sayısı gibi mizanpajla ilgili herhangi bir ölçüm için doğru bir rakam.
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

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

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

// Herhangi bir düğümün başlangıç ve bitiş sayfalarının numaralarını ve bunların genel sayfa aralıklarını görebiliriz.
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.");
}

// Bir LayoutEnumerator kullanarak düzen varlıklarını yineleyebiliriz.
LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc);

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

// LayoutEnumerator, bir ağaç gibi düzen varlıklarının koleksiyonunu geçebilir.
// Herhangi bir düğümün karşılık gelen düzen varlığına da uygulayabiliriz.
layoutEnumerator.Current = layoutCollector.GetEntity(doc.GetChild(NodeType.Paragraph, 1, true));

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

Ayrıca bakınız