LayoutCollector

LayoutCollector class

Bu sınıf, belge düğümlerinin sayfa numaralarının hesaplanmasına olanak tanır.

Daha fazla bilgi edinmek için şu adresi ziyaret edin:Sabit Sayfa Biçimine Dönüştürme belgeleme makalesi.

public class LayoutCollector

yapıcılar

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

Özellikleri

İsimTanım
Document { get; set; }Bu toplayıcı örneğinin bağlı olduğu belgeyi alır veya ayarlar.

yöntemler

İsimTanım
Clear()Toplanan tüm düzen 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)Opak bir konumu döndürürLayoutEnumerator belirtilen düğüme karşılık gelen. Döndürülen değeri bir argüman olarak kullanabilirsinizCurrent 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. Düğüm tek bir sayfa içindeyse 0. Bu, şu şekildedir: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

Bir tane oluşturduğunuzdaLayoutCollector ve bir tane belirtinDocumentEklenecek belge nesnesi, toplayıcı, belge sayfalara biçimlendirildiğinde belge düğümlerinin düzen nesnelerine eşlenmesini kaydedecektir.

Belirli bir belge düğümünün (örneğin çalıştırma, paragraf veya tablo hücresi) hangi sayfada bulunduğunu kullanarak bulabilirsinizGetStartPageIndex ,GetEndPageIndex VeGetNumPagesSpanned yöntemler. Bu yöntemler, belgenin sayfa düzeni modelini otomatik olarak oluşturur ve gerektiğinde alanları günceller.

Artık düzen bilgilerini toplamanız gerekmediğinde, en iyisiDocument mülkhükümsüz gereksiz yere daha fazla düzen eşlemesi toplanmasını önlemek için.

Örnekler

Bir düğümün yayıldığı sayfa aralıklarının nasıl görüleceğini gösterir.

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

// Belgemizin içeriğinin kaç sayfayı kapladığını saymak için "GetNumPagesSpanned" metodunu çağıralım.
// Belge boş olduğundan, sayfa sayısı şu anda sıfırdır.
Assert.AreEqual(doc, layoutCollector.Document);
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

// Belgeyi 5 sayfalık içerikle doldur.
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);

// Düzen toplayıcısından önce, bize bir düzen sağlamak için "UpdatePageLayout" yöntemini çağırmamız gerekir.
// sayfa sayısı gibi düzenle ilgili herhangi bir metriğe ilişkin doğru bir rakam.
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

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

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

// Herhangi bir node'un başlangıç ve bitiş sayfa numaralarını ve bunların toplam sayfa genişliklerini 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.");
}

// LayoutEnumerator kullanarak düzen varlıkları üzerinde yineleme yapabiliriz.
LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc);

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

// LayoutEnumerator, bir ağaç gibi düzen varlıklarının koleksiyonunu dolaşabilir.
// Bunu 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