BuiltInDocumentProperties.Pages property

Represents an estimate of the number of pages in the document.

public int Pages { get; set; }


Aspose.Words updates this property when you call UpdatePageLayout.


Shows how to work with document properties in the “Content” category.

public void Content()
    Document doc = new Document(MyDir + "Paragraphs.docx");
    BuiltInDocumentProperties properties = doc.BuiltInDocumentProperties;

    // By using built in properties,
    // we can treat document statistics such as word/page/character counts as metadata that can be glanced at without opening the document
    // These properties are accessed by right clicking the file in Windows Explorer and navigating to Properties > Details > Content
    // If we want to display this data inside the document, we can use fields such as NUMPAGES, NUMWORDS, NUMCHARS etc.
    // Also, these values can also be viewed in Microsoft Word by navigating File > Properties > Advanced Properties > Statistics
    // Page count: The PageCount property shows the page count in real time and its value can be assigned to the Pages property

    // The "Pages" property stores the page count of the document. 
    Assert.AreEqual(6, properties.Pages);

    // The "Words", "Characters", and "CharactersWithSpaces" built-in properties also display various document statistics,
    // but we need to call the "UpdateWordCount" method on the whole document before we can expect them to contain accurate values.

    Assert.AreEqual(1035, properties.Words);
    Assert.AreEqual(6026, properties.Characters);
    Assert.AreEqual(7041, properties.CharactersWithSpaces);

    // Count the number of lines in the document, and then assign the result to the "Lines" built-in property.
    LineCounter lineCounter = new LineCounter(doc);
    properties.Lines = lineCounter.GetLineCount();

    Assert.AreEqual(142, properties.Lines);

    // Assign the number of Paragraph nodes in the document to the "Paragraphs" built-in property.
    properties.Paragraphs = doc.GetChildNodes(NodeType.Paragraph, true).Count;
    Assert.AreEqual(29, properties.Paragraphs);

    // Get an estimate of the file size of our document via the "Bytes" built-in property.
    Assert.AreEqual(20310, properties.Bytes);

    // Set a different template for our document, and then update the "Template" built-in property manually to reflect this change.
    doc.AttachedTemplate = MyDir + "Business brochure.dotx";

    Assert.AreEqual("Normal", properties.Template);    

    properties.Template = doc.AttachedTemplate;

    // "ContentStatus" is a descriptive built-in property.
    properties.ContentStatus = "Draft";

    // Upon saving, the "ContentType" built-in property will contain the MIME type of the output save format.
    Assert.AreEqual(string.Empty, properties.ContentType);

    // If the document contains links, and they are all up to date, we can set the "LinksUpToDate" property to "true".

    doc.Save(ArtifactsDir + "DocumentProperties.Content.docx");

/// <summary>
/// Counts the lines in a document.
/// Traverses the document's layout entities tree upon construction,
/// counting entities of the "Line" type that also contain real text.
/// </summary>
private class LineCounter
    public LineCounter(Document doc)
        mLayoutEnumerator = new LayoutEnumerator(doc);


    public int GetLineCount()
        return mLineCount;

    private void CountLines()
            if (mLayoutEnumerator.Type == LayoutEntityType.Line)
                mScanningLineForRealText = true;

            if (mLayoutEnumerator.MoveFirstChild())
                if (mScanningLineForRealText && mLayoutEnumerator.Kind.StartsWith("TEXT"))
                    mScanningLineForRealText = false;
        } while (mLayoutEnumerator.MoveNext());

    private readonly LayoutEnumerator mLayoutEnumerator;
    private int mLineCount;
    private bool mScanningLineForRealText;

See Also