在aspose.words中使用DOM在每个页面中添加单独的页眉/页脚

时间:2015-05-07 10:37:49

标签: dom aspose.words

我正在使用文档对象模型从XHTML创建docx。 我能够创建具有两个共同部分的文档(一个用于正文,另一个用于页眉和页脚,其中第一页启用了不同的选项)。 现在,因为我们需要为不同的页面创建不同的页眉和页脚。我不知道如何使用DOM做到这一点。 在用于创建不同页眉和页脚的普通word文档中,我们需要将每个页面作为分页符断开,然后在页眉和页脚中它将显示为不同的部分,我们可以禁用它们来链接" linktoprevious"选项并为不同的页面创建不同的页眉。 我想知道是否有任何方法aspose.words会自动识别每个页面,并根据我们可以在阅读文档时创建分节符(下一页)。

或者让我知道是否有任何可能的方法使用aspose.words中的Document Object MOdel为每个页面创建不同的页眉和页脚.Net

谢谢

1 个答案:

答案 0 :(得分:1)

这很棘手,但使用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);
    }
}