使用章节
使用节
Word 文档被划分为一个或多个章节,每个章节都有自己的页面设置、边距、页眉和页脚。 Aspose.Words FOSS for .NET 将章节表示为一个 Section 节点,包含一个 Body 以及(可选的)页眉和页脚,再加一个 PageSetup 它控制其布局。本页涵盖章节对象模型、页面设置、页眉和页脚以及多列文本布局。
节对象模型
Document.Sections 返回一个 SectionCollection —— 文档中的每个 Section,每个都是 CompositeNode 并且是节点树的一部分。一个 Section 包含一个 Body(一个 Story,保存该节的主要段落和表格),以及在存在时,通过 Section.HeadersFooters 可访问的 HeaderFooter 节点,一个 HeaderFooterCollection。Document.FirstSection 和 Document.LastSection 提供对边界节的直接访问。Section.AppendContent()、PrependContent() 和 ClearContent() 批量操作节的主体内容,而 ClearHeadersFooters() 和 DeleteHeaderFooterShapes() 则清除页眉/页脚内容。
创建节和节分隔符
DocumentBuilder.InsertBreak(BreakType) 在光标处插入一个分隔符;BreakType 包含 SectionBreakNewPage、SectionBreakContinuous、SectionBreakNewColumn、SectionBreakEvenPage 和 SectionBreakOddPage 用于启动新节,以及非节值 PageBreak、ColumnBreak、LineBreak 和 ParagraphBreak。DocumentBuilder.MoveToSection() 将光标移动到特定节主体的起始位置。PageSetup.SectionStart 读取或设置已存在节上记录的 SectionStart 分隔符类型。
页面设置
Section.PageSetup 是一个 PageSetup 实例,涵盖页面尺寸和边距(PageWidth、PageHeight、TopMargin、BottomMargin、LeftMargin、RightMargin、Gutter),Orientation 和 PaperSize,以及每侧页面边框(Borders、BorderAppliesTo 通过 PageBorderAppliesTo,BorderDistanceFrom 通过 PageBorderDistanceFrom,BorderAlwaysInFront、BorderSurroundsHeader、BorderSurroundsFooter)。行号由 LineNumberRestartMode、LineNumberCountBy、LineNumberDistanceFromText 和 LineStartingNumber 控制。PageSetup.ClearFormatting() 将其重置为默认值。
页眉和页脚
Section.HeadersFooters 是一个 HeaderFooterCollection,具有类型化访问器——HeaderPrimary、HeaderFirst、HeaderEven、FooterPrimary、FooterFirst、FooterEven——以及 GetByHeaderFooterType()、Add() 和 LinkToPrevious()。每个 HeaderFooter 都是一个 Story(如 Body),通过其 HeaderFooterType 标识,并标记为 IsHeader / IsLinkedToPrevious。PageSetup.DifferentFirstPageHeaderFooter 和 PageSetup.OddAndEvenPagesHeaderFooter 控制 Word 是否应使用首页和偶数页的页眉/页脚变体。
多列文本
PageSetup.TextColumns 返回一个 TextColumnCollection(Count、EvenlySpaced、LineBetween、Spacing、Width),其中包含 SetCount() 用于将章节主体布局为多列。单独的列在集合中包含多个列时,会成为 TextColumn 实例(Width、SpaceAfter)。
技巧与最佳实践
- 节分隔符携带该节的格式化 follows 它 —— 设置
PageSetup在 a 上的属性Section您刚创建的(之后InsertBreak)会影响分隔符之后的内容,而不是之前的内容。 - 当仅需更改页面设置(例如切换到多列文本)而不启动新页面时,使用
SectionBreakContinuous;当新章节必须始终在新页面开始时,使用SectionBreakNewPage。 HeaderFooterCollection.LinkToPrevious()将节的页眉/页脚重新连接,以继承前一节的内容——如果希望新节独立于前一节,请在编写新的页眉/页脚内容之前执行此操作。PageSetup.DifferentFirstPageHeaderFooter和OddAndEvenPagesHeaderFooter仅在对应的HeaderFooterType变体(HeaderFirst、HeaderEven等)实际存在于Section.HeadersFooters中时才生效——启用标志并一起添加相应的页眉/页脚。Section.Body与每个HeaderFooter是独立的Story实例——Range.Fields、书签以及对节的Body的其他范围限定操作不会自动作用于其页眉和页脚。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
| 新章节的页面设置与我设定的不匹配 | PageSetup 被设置在错误的 Section 实例上 | 设置 PageSetup 在该节上 follows 换页处,而不是之前的那个 |
| 来自前一节的页眉/页脚内容意外出现在新节中 | 新节的页眉/页脚仍然链接到前一节 | 调用 HeaderFooterCollection.LinkToPrevious(false)(或添加不同的页眉/页脚内容)以解除链接 |
| 首页或偶数页的页眉/页脚被忽略 | DifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter 为 false,或匹配的 HeaderFooterType 变体不存在 | 在 PageSetup 上设置标志,并确保相应的页眉/页脚变体存在 |
| 多列布局不适用 | TextColumns.SetCount() 被以计数为 1 调用,或在错误的章节的 PageSetup 上调用 | 在目标章节的 PageSetup.TextColumns 上使用多于一列调用 SetCount() |
FAQ
如何在不另起新页的情况下开始新节?
使用 DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous) 插入一个 SectionBreakContinuous 换页符。
如何为节设置独立的页边距和方向?
插入一个分节符,然后在新节的 PageSetup – TopMargin、BottomMargin、LeftMargin、RightMargin、Orientation 和 PaperSize 上设置属性。
如何让节的首页使用不同的页眉?
在该节上设置 PageSetup.DifferentFirstPageHeaderFooter = true,并向其 HeadersFooters 集合中添加一个类型为 HeaderFirst 的 HeaderFooter(如有需要,还可添加 FooterFirst)。
如何将节的正文文本排成两列?
对该节调用 PageSetup.TextColumns.SetCount(2),然后根据需要调整 Spacing、EvenlySpaced / 各个 TextColumn.Width 的数值。
API Reference 摘要
| 类 / 枚举 | 描述 |
|---|---|
Section | 一个章节节点;Body、HeadersFooters、PageSetup |
SectionCollection | 文档中的每个 Section,通过 Document.Sections |
Body / Story | 章节(Body)或页眉/页脚(HeaderFooter)的主内容容器 |
PageSetup | 章节的页面尺寸、边距、方向、边框和列 |
HeaderFooter / HeaderFooterCollection | 章节的页眉/页脚内容以及相应的类型化访问器 |
HeaderFooterType | 确定 HeaderFooter 属于哪种页眉/页脚变体(primary、first、even) |
TextColumn / TextColumnCollection | 章节的多列文本布局 |
PaperSize / Orientation / Margins | 页面尺寸、方向和预设边距值 |
PageBorderAppliesTo / PageBorderDistanceFrom | 页面边框打印的页面以及其参考边缘 |
SectionStart / BreakType | 在节上记录的分节符类型,以及 DocumentBuilder.InsertBreak() 接受的分节符种类 |
LineNumberRestartMode | 在节内自动行号重新开始的时机 |