1

我正在使用文档对象模型从 XHTML 创建 docx。我可以创建一个包含两个共同部分的文档(一个用于正文,另一个用于页眉和页脚,其中启用了第一页不同的选项)。现在因为我们需要为不同的页面创建不同的页眉和页脚。我不确定如何使用 DOM 来做到这一点。在用于创建不同页眉和页脚的普通 Word 文档中,我们需要将每个页面拆分为分页符,然后在页眉和页脚中它将显示为不同的部分,我们可以禁用“linktoprevious”选项并为不同的页面创建不同的页眉页脚。我想知道 aspose.words 是否有任何方法可以自动识别每一页,并在此基础上我们可以在阅读文档时创建分节符(下一页)。

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

谢谢

4

1 回答 1

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);
    }
}
于 2015-05-12T06:00:11.803 回答