這是棘手,但有可行Aspose.Words使用LayoutCollector API來查找節點的頁碼。這個想法是循環遍歷文檔中的每個運行,並在每個頁面的最後一個節點處插入分節符。嘗試下面的示例代碼,它適用於在我的最後只包含文本/段落的文件。
// 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);
}
}
謝謝你的回答Saqib,但有沒有其他方式我們可以做到這一點**沒有分頁符** ??讀取文檔並生成輸出也花費很長時間。在創建文檔本身時有沒有其他方法可以做到這一點?我不想再次閱讀文檔,只是爲了創建不同的頁眉和頁腳。這將花費大量的時間** .. –
您可以在創建文檔中的每個對象時使用collector.GetEndPageIndex(節點)方法。如果頁碼更改,請添加分節符。 –
Razzq感謝您的評論。我會嘗試它,並讓你知道是否有問題。 :) –