如何在 .NET 中使用章节
本指南展示了如何在 中创建分节符、配置页面设置以及管理页眉、页脚和多列布局 Aspose.Words FOSS for .NET,使用 Section and PageSetup 类。它涵盖了读取文档中已有的章节、使用 DocumentBuilder,配置页面尺寸和边距,添加页眉和页脚的变体,并在多列中布局正文文本。
分步指南
步骤 1:安装软件包
Aspose.Words FOSS for .NET 尚未发布 NuGet 包——请改为从源码构建库。克隆 https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git,然后使用 .NET SDK 在 Release 配置下构建 Aspose.Words.sln,并在项目中引用生成的 Aspose.Words 程序集。该库目标为 .NET Standard 2.0,因此可在 .NET Framework 4.6.2+ 和 .NET 6/8/10 上运行。
步骤 2:导入所需类
添加一个 using Aspose.Words; 指令——Section、PageSetup、HeaderFooter 以及本指南中使用的相关枚举都直接位于 Aspose.Words 命名空间中,和 Document、DocumentBuilder 并列。
步骤 3:读取文档中已有的节
Document.Sections 返回一个 SectionCollection,其中包含文档中的每个 Section,每个都是整体节点树的一部分的 CompositeNode。Document.FirstSection 和 Document.LastSection 提供对边界节的直接访问,无需遍历集合。每个 Section 包含一个 Body——其获取方式与其他任何 Story 相同——且在存在时,可通过 Section.HeadersFooters 获取页眉和页脚内容。
步骤 4:使用分节符开始新节
Call DocumentBuilder.InsertBreak(BreakType) 在光标处开始新章节。传递 BreakType.SectionBreakNewPage 当新章节应始终在新页面开始时, BreakType.SectionBreakContinuous 当只需要更改页面设置(例如切换到多列文本)而不强制分页时,或 BreakType.SectionBreakNewColumn, SectionBreakEvenPage, 并且 SectionBreakOddPage 针对 Word 支持的其他章节起始行为。 follows 它,所以设置 PageSetup 新章节的属性 Section —— 不是之前的那个 —— 一旦插入分节符。 DocumentBuilder.MoveToSection(sectionIndex) 将光标移动到特定章节正文的起始位置,并且 PageSetup.SectionStart 读取或设置 SectionStart 已在现有章节上记录的分节类型。
步骤 5:配置页面尺寸和页边距
每个 Section.PageSetup 都是一个 PageSetup 实例。设置 PageWidth、PageHeight、LeftMargin、RightMargin、TopMargin、BottomMargin 和 Gutter 以定义页面尺寸和页边距,或直接将 Margins 预设分配给 PageSetup.Margins。Orientation 和 PaperSize 控制页面方向和纸张大小。页面边框通过 Borders(一种 BorderCollection)、BorderAppliesTo(PageBorderAppliesTo)、BorderDistanceFrom(PageBorderDistanceFrom)、BorderAlwaysInFront、BorderSurroundsHeader 和 BorderSurroundsFooter 进行配置。在从头配置之前,调用 PageSetup.ClearFormatting() 将节的页面设置重置为默认值。
步骤 6:添加并链接页眉和页脚
Section.HeadersFooters 是一个具有类型化访问器的 HeaderFooterCollection——HeaderPrimary、HeaderFirst、HeaderEven、FooterPrimary、FooterFirst、FooterEven——以及用于通过 HeaderFooterType 和 Add() 查找以添加新项的 GetByHeaderFooterType()。每个 HeaderFooter 都是一个 Story,标记为 IsHeader 和 IsLinkedToPrevious。在添加相应的 HeaderFirst/FooterFirst 或 HeaderEven/FooterEven 变体之前,请启用 PageSetup.DifferentFirstPageHeaderFooter 或 PageSetup.OddAndEvenPagesHeaderFooter——标志和变体必须同时生效。调用 HeaderFooterCollection.LinkToPrevious() 可重新连接节的页眉或页脚以继承前一节的内容,或将其解除链接,使新节以独立内容开始。
第7步:在多个列中布局正文文本
PageSetup.TextColumns 返回一个 TextColumnCollection 用于该章节。使用 SetCount() 并传入正文文本应流入的列数,然后调整 EvenlySpaced、Spacing、LineBetween 和 Width 以控制列的布局方式。一旦集合包含多个列,单个 TextColumn 实例会公开它们各自的 Width 和 SpaceAfter。
第8步:清除或批量编辑章节内容
Section.AppendContent() 和 PrependContent() 将另一个章节的正文内容复制到此章节;ClearContent() 批量清空章节的正文。ClearHeadersFooters() 和 DeleteHeaderFooterShapes() 清除整个章节的页眉和页脚内容,但不删除章节本身。
常见问题及解决方案
新建章节的页面设置与我设置的不符 PageSetup 被设置在错误的 Section 实例。章节分隔符会携带其后章节的格式——设置 PageSetup 在后面的章节上 InsertBreak(),而不是之前的章节。
前一章节的页眉或页脚内容意外地出现在新章节中 新章节的页眉或页脚仍然链接到前一章节。调用 HeaderFooterCollection.LinkToPrevious(false),或为新章节添加独立的页眉/页脚内容,以解除链接。
首页或偶数页的页眉/页脚会被忽略 DifferentFirstPageHeaderFooter or OddAndEvenPagesHeaderFooter is false,或匹配的 HeaderFooterType 变体在…中不存在 Section.HeadersFooters。请在…上设置标志 PageSetup 并一起添加相应的页眉/页脚变体。
多列布局不适用 TextColumns.SetCount() 被调用时计数为 1,或在错误的章节的 PageSetup。调用 SetCount() 在目标章节上有多个列的 PageSetup.TextColumns.
章节分隔符插入在错误的文档位置 DocumentBuilder.InsertBreak(BreakType) 在构建器的当前光标处插入。使用 DocumentBuilder.MoveToSection() 或构建器的其他光标定位成员,在调用之前定位光标 InsertBreak().
常见问题
如何在不另起新页的情况下开始新节?
插入一个SectionBreakContinuous换页符,使用DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous)。
如何为节设置独立的页边距和方向?
插入节分隔符,然后在新节的PageSetup上设置TopMargin、BottomMargin、LeftMargin、RightMargin、Orientation和PaperSize。
如何让章节的首页使用不同的页眉?
在该章节上设置 PageSetup.DifferentFirstPageHeaderFooter = true,并向其 HeadersFooters 集合中添加一个类型为 HeaderFirst 的 HeaderFooter(如有需要,还可添加 FooterFirst)。
如何将章节的正文文本排成两列?
对该章节调用 PageSetup.TextColumns.SetCount(2),然后根据需要调整 Spacing、EvenlySpaced 或各个 TextColumn.Width 的值。
如何直接访问第一章节和最后一章节?
读取 Document.FirstSection 和 Document.LastSection,而不是对 Document.Sections 进行索引。