2015-05-07 216 views
1

我正在使用文檔對象模型從XHTML創建docx。 我能夠創建具有共同的兩個部分的文檔(一個用於正文,另一個用於頁眉和頁腳,其中第一頁不同的選項被啓用)。 現在因爲我們需要爲不同的頁面創建不同的頁眉和頁腳。我不知道如何使用DOM。 在用於創建不同頁眉和頁腳的正常word文檔中,我們需要將每頁作爲分頁符分頁,然後在頁眉和頁腳中顯示爲不同的分段,我們可以禁用「linktoprevious」選項併爲不同的頁面創建不同的頁眉頁腳。 我想知道是否有任何方法可以讓aspose.words自動識別每個頁面,並基於這個方法我們可以在閱讀文檔時創建分節符(下一頁)。在aspose.words中使用DOM在每個頁面中添加單獨的頁眉/頁腳

還是讓我知道,如果在使用Aspose.Words使用文檔對象模型來創建不同的頁眉和頁腳爲每個頁面任何可能的方式。淨

謝謝

回答

1

這是棘手,但有可行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); 
    } 
} 
+0

謝謝你的回答Saqib,但有沒有其他方式我們可以做到這一點**沒有分頁符** ??讀取文檔並生成輸出也花費很長時間。在創建文檔本身時有沒有其他方法可以做到這一點?我不想再次閱讀文檔,只是爲了創建不同的頁眉和頁腳。這將花費大量的時間** .. –

+0

您可以在創建文檔中的每個對象時使用collector.GetEndPageIndex(節點)方法。如果頁碼更改,請添加分節符。 –

+0

Razzq感謝您的評論。我會嘗試它,並讓你知道是否有問題。 :) –

相關問題