C#调用aspose.word计算word的行数

guoxuen 2024-12-03 17:40:36

计算word的行数

...全文
124 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoxuen 2024-12-03
  • 打赏
  • 举报
回复

BuiltInDocumentProperties.Lines property
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");

}

///


/// 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.
///

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;

}

111,044

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧