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 工作,担任开发人员布道师。
我正在尝试为 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 工作,担任开发人员布道师。