这很棘手,但使用 LayoutCollector API 的 Aspose.Words 是可行的,它可以找到节点的页码。这个想法是循环遍历文档中的每个运行并在每个页面的最后一个节点插入一个分节符。试试下面的示例代码,它适用于我最后只包含文本/段落的文件。
// Load document
Aspose.Words.Document doc = new Aspose.Words.Document(src);
DocumentBuilder builder = new DocumentBuilder(doc);
// Get all runs
NodeCollection runs = doc.GetChildNodes(NodeType.Run, true);
foreach(Run run in runs)
{
// Find the page number
LayoutCollector collector = new LayoutCollector(doc);
int pageNumber = collector.GetEndPageIndex(run);
// If next run is on next page, add a page break
Node nextNode = run.ParentNode.NextSibling;
if (nextNode == null)
continue;
int nextPageNumber = collector.GetStartPageIndex(nextNode);
if (nextPageNumber > pageNumber)
{
Console.WriteLine("Add a break here.");
builder.MoveTo(run);
builder.InsertBreak(BreakType.SectionBreakNewPage);
// Modify header footer
Section currentSection = builder.CurrentSection;
builder.MoveToHeaderFooter(HeaderFooterType.HeaderPrimary);
builder.Write("Header of page " + nextPageNumber);
builder.MoveToHeaderFooter(HeaderFooterType.FooterPrimary);
builder.Write("Footer of page " + nextPageNumber);
}
}