我允许您检查在文档中插入多个段落是否会导致分页,我希望这会相当简单,但事实证明:
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 回答
Document.PageCount调用页面布局 . 您在使用此属性后修改文档 . 请注意,在使用此属性后修改文档时,Aspose.Words不会自动更新页面布局 . 在这种情况下,您应该调用Document.UpdatePageLayout方法 .
我和Aspose一起担任开发者布道者 .
似乎我已经明白了 .
来自Aspose文档:
这里最重要的一句话:
通过"invokes page layout",它们表示它调用
UpdatePageLayout()
,其中的文档包含此注释:基本上,鉴于我的原始代码,我必须在
Writeln()
之后调用UpdatePageLayout()
才能获得更新的页数 .//获取当前页数int pageCountBefore = builder.Document.PageCount;