Aspose.Words 通过 DocumentBuilder 添加段落不会更新文档信息

Aspose.Words adding paragraphs via DocumentBuilder does not update Document info

我正在尝试为 Aspose 的 DocumentBuilder class 编写一个扩展方法,它允许您检查在文档中插入多个段落是否会导致分页,我希望这会很简单,但事实并非如此:

public static bool WillPageBreakAfter(this DocumentBuilder builder, int numParagraphs) 
{
    // Get current number of pages
    int pageCountBefore = builder.Document.PageCount;

    for (int i = 0; i < numParagraphs; i++) 
    {
        builder.InsertParagraph();
    }

    // Get the number of pages after adding those paragraphs
    int pageCountAfter = builder.Document.PageCount;

    // Delete the paragraphs, we don't need them anymore
    ...

    if (pageCountBefore != pageCountAfter) 
    {
        return true;
    } 
    else  
    {
        return false;
    }
} 

我的问题是,插入段落似乎不会更新 builder.Document.PageCount 属性。即使插入像 5000 段这样疯狂的东西似乎也能修改 属性。我也尝试过 InsertBreak()(包括使用 BreakType.PageBreak)和 Writeln(),但这些都不起作用。

这是怎么回事?有没有办法达到我想要的效果?

更新

似乎在调用该方法的 DocumentBuilder 上实际上没有对 DocumentBuilder 参数执行任何操作。换句话说:

如果我修改 for 循环以执行类似 builder.InsertParagraph(i.ToString()); 的操作,然后删除删除段落后记的代码。我可以打电话:

myBuilder.WillPageBreakAfter(10);

并希望在保存文档时看到 0-9 写入文档,但事实并非如此。扩展方法中 Writeln() 的 None 似乎什么都做。

更新 2

不知什么原因,访问页数后我无法用 DocumentBuilder 写任何东西。因此,在 int pageCountBefore = builder.Document.PageCount; 行之前调用 Writeln() 之类的东西,但是尝试在该行之后写什么都不做。

看来我已经想通了。

来自 Aspose 文档:

// This invokes page layout which builds the document in memory so note that with large documents this 
// property can take time. After invoking this property, any rendering operation e.g rendering to PDF or image 
// will be instantaneous. 
int pageCount = doc.PageCount;

这里最重要的一行:

This invokes page layout

通过 "invokes page layout",他们的意思是它调用 UpdatePageLayout(),为此文档包含此注释:

However, if you modify the document after rendering and then attempt to render it again - Aspose.Words will not update the page layout automatically. In this case you should call UpdatePageLayout() before rendering again.

所以基本上,根据我的原始代码,我必须在 Writeln() 之后调用 UpdatePageLayout() 以获得更新的页数。

//获取当前页数 int pageCountBefore = builder.Document.PageCount;

for (int i = 0; i < numParagraphs; i++) 
{
    builder.InsertParagraph();
}
// Update the page layout.
builder.Document.UpdatePageLatout();

// Get the number of pages after adding those paragraphs
int pageCountAfter = builder.Document.PageCount;

Document.PageCount调用页面布局。您正在使用此 属性 后修改文档。请注意,当您在使用此 属性 后修改文档时,Aspose.Words 不会自动更新页面布局。在这种情况下,您应该调用 Document.UpdatePageLayout 方法。

我在 Aspose 工作,担任开发人员布道师。