【问题标题】:Adding seperate header/footer in each page using DOM in aspose.words在 aspose.words 中使用 DOM 在每个页面中添加单独的页眉/页脚
【发布时间】:2015-05-07 10:37:48
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: 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);
        }
    }
    

    【讨论】:

    • 感谢 Saqib 的回答,但我们还有其他方法可以做到这一点没有分页符吗?阅读文档并生成输出也需要很长时间。在创建文档本身时还有其他方法吗?我不想再阅读文档只是为了创建不同的页眉和页脚。这会花费很多时间..
    • 您可以在创建文档中的每个对象时使用collector.GetEndPageIndex(node) 方法。如果页码发生变化,请添加分节符。
    • Razzq 感谢您的评论。我会尝试一下,如果有任何问题,我会告诉你。 :)
    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多