package document // Header 表示Word文档中的页眉 type Header struct { ID string Content []interface{} // 可以是段落、表格等元素 } // Footer 表示Word文档中的页脚 type Footer struct { ID string Content []interface{} // 可以是段落、表格等元素 } // NewHeader 创建一个新的页眉 func NewHeader() *Header { return &Header{ ID: generateUniqueID(), Content: make([]interface{}, 0), } } // NewFooter 创建一个新的页脚 func NewFooter() *Footer { return &Footer{ ID: generateUniqueID(), Content: make([]interface{}, 0), } } // AddParagraph 向页眉添加一个段落并返回它 func (h *Header) AddParagraph() *Paragraph { p := NewParagraph() h.Content = append(h.Content, p) return p } // AddTable 向页眉添加一个表格并返回它 func (h *Header) AddTable(rows, cols int) *Table { t := NewTable(rows, cols) h.Content = append(h.Content, t) return t } // AddParagraph 向页脚添加一个段落并返回它 func (f *Footer) AddParagraph() *Paragraph { p := NewParagraph() f.Content = append(f.Content, p) return p } // AddTable 向页脚添加一个表格并返回它 func (f *Footer) AddTable(rows, cols int) *Table { t := NewTable(rows, cols) f.Content = append(f.Content, t) return t } // AddPageNumber 添加一个居中的页码 func (f *Footer) AddPageNumber() *Paragraph { // 创建一个新段落 para := f.AddParagraph() para.SetAlignment("center") // 添加"第"文本 para.AddRun().AddText("第 ") // 创建页码域的所有部分 // 1. 域开始 fieldBegin := para.AddRun() fieldBegin.Field = &Field{ Type: "begin", Code: "PAGE", } // 2. 域分隔符 fieldSeparate := para.AddRun() fieldSeparate.Field = &Field{ Type: "separate", } // 3. 页码内容(在Word中会替换为实际页码) fieldContent := para.AddRun() fieldContent.AddText("1") // 4. 域结束 fieldEnd := para.AddRun() fieldEnd.Field = &Field{ Type: "end", } // 添加"页"文本 para.AddRun().AddText(" 页") return para } // ToXML 将页眉转换为XML func (h *Header) ToXML() string { xml := "" xml += "" // 添加所有内容元素的XML for _, content := range h.Content { switch v := content.(type) { case *Paragraph: xml += v.ToXML() case *Table: xml += v.ToXML() } } xml += "" return xml } // ToXML 将页脚转换为XML func (f *Footer) ToXML() string { xml := "" xml += "" // 添加所有内容元素的XML for _, content := range f.Content { switch v := content.(type) { case *Paragraph: xml += v.ToXML() case *Table: xml += v.ToXML() } } xml += "" return xml }