06 页面设置 - ZeroHawkeye/wordZero GitHub Wiki

页面设置

WordZero 提供了完整的页面设置功能,包括页面尺寸、方向、边距、页眉页脚等。本章将详细介绍如何配置文档的页面属性。

📄 页面基础设置

页面尺寸和方向

package main

import (
    "github.com/ZeroHawkeye/wordZero/pkg/document"
)

func main() {
    doc := document.New()
    
    // 设置A4纸张,纵向
    doc.SetPageSize(document.PageSizeA4)
    doc.SetPageOrientation(document.OrientationPortrait)
    
    // 设置页面边距(单位:磅)
    doc.SetPageMargins(72, 72, 72, 72) // 上、右、下、左各1英寸
    
    // 添加内容
    doc.AddParagraph("这是一个设置了页面属性的文档")
    
    doc.Save("page_settings_demo.docx")
}

支持的页面尺寸

WordZero 支持多种标准页面尺寸:

页面尺寸 常量 尺寸
A4 document.PageSizeA4 210mm × 297mm
A3 document.PageSizeA3 297mm × 420mm
A5 document.PageSizeA5 148mm × 210mm
Letter document.PageSizeLetter 8.5" × 11"
Legal document.PageSizeLegal 8.5" × 14"
自定义 document.PageSizeCustom 用户定义

页面方向

// 纵向(默认)
doc.SetPageOrientation(document.OrientationPortrait)

// 横向
doc.SetPageOrientation(document.OrientationLandscape)

📏 页面边距设置

基础边距设置

// 设置统一边距(1英寸 = 72磅)
doc.SetPageMargins(72, 72, 72, 72) // 上、右、下、左

// 设置不同边距
doc.SetPageMargins(
    90,  // 上边距 1.25英寸
    72,  // 右边距 1英寸
    72,  // 下边距 1英寸
    108, // 左边距 1.5英寸
)

高级边距设置

// 设置详细边距,包括页眉页脚距离
err := doc.SetDetailedPageMargins(&document.DetailedMargins{
    Top:    90,  // 上边距
    Right:  72,  // 右边距
    Bottom: 72,  // 下边距
    Left:   108, // 左边距
    Header: 36,  // 页眉距离页面顶部
    Footer: 36,  // 页脚距离页面底部
    Gutter: 0,   // 装订线宽度
})

if err != nil {
    log.Printf("设置边距失败: %v", err)
}

📃 页眉和页脚

添加页眉

// 添加简单页眉
err := doc.AddHeader(document.HeaderFooterTypeDefault, "文档标题 - WordZero演示")
if err != nil {
    log.Printf("添加页眉失败: %v", err)
}

// 添加带页码的页眉
err = doc.AddHeaderWithPageNumber(document.HeaderFooterTypeDefault, "公司名称 - 内部文档", true)
if err != nil {
    log.Printf("添加页眉失败: %v", err)
}

添加页脚

// 添加页脚
err := doc.AddFooter(document.HeaderFooterTypeDefault, "© 2024 WordZero. All rights reserved.")
if err != nil {
    log.Printf("添加页脚失败: %v", err)
}

// 添加带页码的页脚
err = doc.AddFooterWithPageNumber(document.HeaderFooterTypeDefault, "第", true)
if err != nil {
    log.Printf("添加带页码的页脚失败: %v", err)
}

首页不同的页眉页脚

// 设置首页使用不同的页眉页脚
doc.SetDifferentFirstPage(true)

// 首页页眉
err := doc.AddHeader(document.HeaderFooterTypeFirst, "首页专用页眉")
if err != nil {
    log.Printf("添加首页页眉失败: %v", err)
}

// 首页页脚
err = doc.AddFooter(document.HeaderFooterTypeFirst, "首页专用页脚")
if err != nil {
    log.Printf("添加首页页脚失败: %v", err)
}

📖 分栏设置

设置分栏

// 设置两栏
doc.SetColumns(2)

// 设置三栏
doc.SetColumns(3)

// 设置自定义栏宽和间距
err := doc.SetCustomColumns(&document.ColumnSettings{
    Count:   2,
    Spacing: 720, // 栏间距(缇)
    Equal:   true, // 等宽栏
})

if err != nil {
    log.Printf("设置分栏失败: %v", err)
}

🔢 页码设置

基础页码

// 设置页码起始数字
doc.SetPageNumberStart(1)

// 设置页码格式
doc.SetPageNumberFormat(document.PageNumFormatDecimal) // 1, 2, 3...

// 其他页码格式
doc.SetPageNumberFormat(document.PageNumFormatRoman)      // I, II, III...
doc.SetPageNumberFormat(document.PageNumFormatRomanLower) // i, ii, iii...
doc.SetPageNumberFormat(document.PageNumFormatLetter)     // A, B, C...
doc.SetPageNumberFormat(document.PageNumFormatLetterLower) // a, b, c...

在文档中插入页码

// 注意:以下方法在最新版本中已移除
// 现在应该使用 AddHeaderWithPageNumber 或 AddFooterWithPageNumber 方法

/*
// 在段落中插入页码
para := doc.AddParagraph("当前页码:")
para.AddPageNumber()
para.AddFormattedText(" / ", nil)
para.AddTotalPages() // 总页数
*/

// 新方法:使用带页码的页眉或页脚
err := doc.AddFooterWithPageNumber(document.HeaderFooterTypeDefault, "第", true)
if err != nil {
    log.Printf("添加带页码的页脚失败: %v", err)
}

📋 完整页面设置示例

package main

import (
    "fmt"
    "log"
    
    "github.com/ZeroHawkeye/wordZero/pkg/document"
    "github.com/ZeroHawkeye/wordZero/pkg/style"
)

func main() {
    // 创建文档
    doc := document.New()
    
    fmt.Println("设置页面属性...")
    
    // 1. 基础页面设置
    doc.SetPageSize(document.PageSizeA4)
    doc.SetPageOrientation(document.OrientationPortrait)
    
    // 2. 设置页面边距(上、右、下、左)
    doc.SetPageMargins(90, 72, 72, 108) // 稍大的上边距和左边距
    
    // 3. 设置首页不同
    doc.SetDifferentFirstPage(true)
    
    // 4. 添加首页页眉(空白)
    err := doc.AddHeader(document.HeaderFooterTypeFirst, "")
    if err != nil {
        log.Printf("添加首页页眉失败: %v", err)
    }
    
    // 5. 添加首页页脚
    err = doc.AddFooter(document.HeaderFooterTypeFirst, "WordZero 页面设置演示文档")
    if err != nil {
        log.Printf("添加首页页脚失败: %v", err)
    }
    
    // 6. 添加普通页面页眉
    err = doc.AddHeaderWithPageNumber(document.HeaderFooterTypeDefault, "WordZero使用指南 - 页面设置", false)
    if err != nil {
        log.Printf("添加页眉失败: %v", err)
    }
    
    // 7. 添加普通页面页脚
    err = doc.AddFooterWithPageNumber(document.HeaderFooterTypeDefault, "© 2024 WordZero项目组", true)
    if err != nil {
        log.Printf("添加页脚失败: %v", err)
    }
    
    // 8. 设置页码起始和格式
    doc.SetPageNumberStart(1)
    doc.SetPageNumberFormat(document.PageNumFormatDecimal)
    
    // 9. 添加文档内容
    // 首页内容
    title := doc.AddParagraph("WordZero 页面设置指南")
    title.SetStyle(style.StyleTitle)
    
    subtitle := doc.AddParagraph("完整的页面配置演示")
    subtitle.SetStyle(style.StyleSubtitle)
    
    // 添加一些内容段落
    intro := doc.AddParagraph("本文档演示了WordZero的完整页面设置功能,包括页面尺寸、边距、页眉页脚等。")
    intro.SetStyle(style.StyleNormal)
    
    // 添加章节
    chapter1 := doc.AddParagraph("第一章 页面基础设置")
    chapter1.SetStyle(style.StyleHeading1)
    
    content1 := doc.AddParagraph("页面设置是文档格式化的基础,正确的页面设置能够提升文档的专业性和可读性。")
    content1.SetStyle(style.StyleNormal)
    
    section1 := doc.AddParagraph("1.1 页面尺寸")
    section1.SetStyle(style.StyleHeading2)
    
    content2 := doc.AddParagraph("WordZero支持多种标准页面尺寸,包括A4、A3、A5、Letter、Legal等。")
    content2.SetStyle(style.StyleNormal)
    
    section2 := doc.AddParagraph("1.2 页面方向")
    section2.SetStyle(style.StyleHeading2)
    
    content3 := doc.AddParagraph("支持纵向和横向两种页面方向,适应不同的文档需求。")
    content3.SetStyle(style.StyleNormal)
    
    // 添加分页,演示页眉页脚
    // doc.AddPageBreak()
    
    chapter2 := doc.AddParagraph("第二章 页眉页脚设置")
    chapter2.SetStyle(style.StyleHeading1)
    
    content4 := doc.AddParagraph("页眉页脚是文档的重要组成部分,可以包含标题、页码、版权信息等。")
    content4.SetStyle(style.StyleNormal)
    
    // 再添加一页内容
    // doc.AddPageBreak()
    
    chapter3 := doc.AddParagraph("第三章 边距和分栏")
    chapter3.SetStyle(style.StyleHeading1)
    
    content5 := doc.AddParagraph("合理的边距设置能够提供舒适的阅读体验,分栏功能适用于报刊类文档。")
    content5.SetStyle(style.StyleNormal)
    
    // 10. 保存文档
    err := doc.Save("complete_page_settings_demo.docx")
    if err != nil {
        log.Fatalf("保存文档失败: %v", err)
    }
    
    fmt.Println("✅ 页面设置演示文档创建完成!")
    fmt.Println("文档包含:")
    fmt.Println("- A4纸张,纵向")
    fmt.Println("- 自定义边距")
    fmt.Println("- 首页不同的页眉页脚")
    fmt.Println("- 普通页面的页眉页脚")
    fmt.Println("- 页码显示")
    fmt.Println("- 多页内容演示")
}

📐 单位换算参考

页面设置中常用的单位换算:

单位 换算 说明
英寸 1" = 72磅 = 1440缇 常用于边距设置
厘米 1cm ≈ 28.35磅 ≈ 567缇 公制单位
毫米 1mm ≈ 2.84磅 ≈ 56.7缇 精确测量
1磅 = 20缇 字体和间距

常用边距设置:

  • 1英寸边距:72磅
  • 2cm边距:约57磅
  • 25mm边距:约71磅

💡 页面设置最佳实践

1. 标准页面设置

// ✅ 推荐:使用标准设置
doc.SetPageSize(document.PageSizeA4)
doc.SetPageOrientation(document.OrientationPortrait)
doc.SetPageMargins(72, 72, 72, 72) // 1英寸边距

2. 页眉页脚一致性

// ✅ 保持页眉页脚简洁统一
err := doc.AddHeader(document.HeaderFooterTypeDefault, "文档标题")
if err != nil {
    log.Printf("添加页眉失败: %v", err)
}

3. 合理的页码设置

// ✅ 在页脚居中显示页码
err := doc.AddFooterWithPageNumber(document.HeaderFooterTypeDefault, "", true)
if err != nil {
    log.Printf("添加页脚失败: %v", err)
}

⚠️ 注意事项

  1. 页面尺寸: 选择合适的页面尺寸,考虑打印和显示需求
  2. 边距设置: 确保边距足够,避免内容被截断
  3. 页眉页脚: 保持简洁,不要占用过多空间
  4. 分栏使用: 谨慎使用分栏,注意内容的可读性

常见问题

页眉页脚不显示

  • 检查边距设置是否合理
  • 确认页眉页脚距离设置
  • 验证内容是否添加正确

页码错乱

  • 确认页码起始设置
  • 检查分节符的使用
  • 验证页码格式设置

下一步

掌握页面设置后,您可以继续学习:


合理的页面设置是专业文档的基础,正确配置页面属性能大大提升文档的整体效果!