首页 文章

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

提问于
浏览
0

我允许您检查在文档中插入多个段落是否会导致分页,我希望这会相当简单,但事实证明:

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() ,但那些也不起作用 .

这里发生了什么?无论如何我能达到预期的效果吗?

UPDATE

看来 DocumentBuilder 参数上的所有内容实际上都没有在调用该方法的 DocumentBuilder 上发生 . 换一种说法:

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

myBuilder.WillPageBreakAfter(10);

并且期望在保存时将0-9写入文档,但事实并非如此 . 扩展方法中的 Writeln() 似乎都没有做任何事情 .

UPDATE 2

它似乎出于任何原因,在访问页数后我无法用 DocumentBuilder 写任何内容 . 所以在 int pageCountBefore = builder.Document.PageCount; 行之前调用类似 Writeln() 的东西,但是尝试在该行之后写入什么都不做 .

2 回答

  • 0

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

    我和Aspose一起担任开发者布道者 .

  • 1

    似乎我已经明白了 .

    来自Aspose文档:

    //这将调用在内存中构建文档的页面布局,因此请注意使用大文档
    //属性需要时间 . 调用此属性后,任何渲染操作,例如渲染为PDF或图像
    //将是瞬间的 .
    int pageCount = doc.PageCount;

    这里最重要的一句话:

    这会调用页面布局

    通过"invokes page layout",它们表示它调用 UpdatePageLayout() ,其中的文档包含此注释:

    但是,如果在渲染后修改文档然后再次尝试渲染它 - Aspose.Words将不会自动更新页面布局 . 在这种情况下,您应该再次渲染之前调用UpdatePageLayout() .

    基本上,鉴于我的原始代码,我必须在 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;
    

相关问题