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

时间:2018-03-19 13:31:02

标签: c# aspose aspose.words

我正在尝试为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()之类的内容,但尝试在该行之后写入则无效。

2 个答案:

答案 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;