我正在尝试为Aspose的<input type="submit" name="submit" value="New" onclick="newText()">
<div id="ft_list">
</div>
类编写一个扩展方法,它允许您检查在文档中插入多个段落是否会导致分页,我希望这会相当简单,但事实证明:
DocumentBuilder
我的问题是,插入段落似乎不会更新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;
}
}
属性。即使插入像5000段一样疯狂的东西似乎也会修改该属性。我也尝试了builder.Document.PageCount
(包括使用InsertBreak()
)和BreakType.PageBreak
,但这些都不起作用。
这里发生了什么?无论如何我能达到预期的效果吗?
更新
Writeln()
参数似乎没有在调用该方法的DocumentBuilder
上实际执行任何操作。换句话说:
如果我修改for循环以执行DocumentBuilder
之类的操作,然后删除删除后段落的代码。我可以打电话:
builder.InsertParagraph(i.ToString());
并且期望在保存时将0-9写入文档,但事实并非如此。扩展方法中的myBuilder.WillPageBreakAfter(10);
似乎都没有做任何事情。
更新2
出现任何原因,在访问页数后我无法用Writeln()
写任何内容。因此,在DocumentBuilder
行之前调用类似Writeln()
之类的内容,但尝试在该行之后写入则无效。
答案 0 :(得分:1)
Document.PageCount调用页面布局。您在使用此属性后修改文档。请注意,在使用此属性后修改文档时,Aspose.Words不会自动更新页面布局。在这种情况下,您应该调用Document.UpdatePageLayout方法。
我与Aspose一起担任开发者布道者。
答案 1 :(得分:0)
似乎我已经明白了。
来自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;
这里最重要的一句话:
这会调用页面布局
通过“调用页面布局”,它们意味着调用UpdatePageLayout()
,文档中包含此注释:
但是,如果在渲染后修改文档然后再次尝试渲染它 - Aspose.Words将不会自动更新页面布局。在这种情况下,您应该在再次渲染之前调用UpdatePageLayout()。
基本上,鉴于我的原始代码,我必须在UpdatePageLayout()
之后调用Writeln()
以获取更新的页数。
//获取当前页数 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;