BuiltInDocumentPropertiesCharactersWithSpaces Property |
Aspose.Words updates this property when you call UpdateWordCount.
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. doc.UpdateWordCount(); 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". Assert.False(properties.LinksUpToDate); 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); CountLines(); } public int GetLineCount() { return mLineCount; } private void CountLines() { do { if (mLayoutEnumerator.Type == LayoutEntityType.Line) { mScanningLineForRealText = true; } if (mLayoutEnumerator.MoveFirstChild()) { if (mScanningLineForRealText && mLayoutEnumerator.Kind.StartsWith("TEXT")) { mLineCount++; mScanningLineForRealText = false; } CountLines(); mLayoutEnumerator.MoveParent(); } } while (mLayoutEnumerator.MoveNext()); } private readonly LayoutEnumerator mLayoutEnumerator; private int mLineCount; private bool mScanningLineForRealText; }