package document import ( "fmt" ) // ContentTypes 表示Word文档中的内容类型集合 type ContentTypes struct { Defaults []*Default Overrides []*Override } // Default 表示默认的内容类型 type Default struct { Extension string ContentType string } // Override 表示覆盖的内容类型 type Override struct { PartName string ContentType string } // NewContentTypes 创建一个新的内容类型集合 func NewContentTypes() *ContentTypes { ct := &ContentTypes{ Defaults: make([]*Default, 0), Overrides: make([]*Override, 0), } // 添加默认的内容类型 ct.AddDefault("xml", "application/xml") ct.AddDefault("rels", "application/vnd.openxmlformats-package.relationships+xml") ct.AddDefault("png", "image/png") ct.AddDefault("jpeg", "image/jpeg") ct.AddDefault("jpg", "image/jpeg") ct.AddDefault("gif", "image/gif") ct.AddDefault("bmp", "image/bmp") ct.AddDefault("tiff", "image/tiff") ct.AddDefault("tif", "image/tiff") ct.AddDefault("wmf", "image/x-wmf") ct.AddDefault("emf", "image/x-emf") // 添加覆盖的内容类型 ct.AddOverride("/document/document.xml", "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml") ct.AddOverride("/document/styles.xml", "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml") ct.AddOverride("/document/numbering.xml", "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml") ct.AddOverride("/document/settings.xml", "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml") ct.AddOverride("/document/theme/theme1.xml", "application/vnd.openxmlformats-officedocument.theme+xml") ct.AddOverride("/docProps/core.xml", "application/vnd.openxmlformats-package.core-properties+xml") ct.AddOverride("/docProps/app.xml", "application/vnd.openxmlformats-officedocument.extended-properties+xml") return ct } // AddDefault 添加一个默认的内容类型 func (c *ContentTypes) AddDefault(extension, contentType string) *Default { def := &Default{ Extension: extension, ContentType: contentType, } c.Defaults = append(c.Defaults, def) return def } // AddOverride 添加一个覆盖的内容类型 func (c *ContentTypes) AddOverride(partName, contentType string) *Override { override := &Override{ PartName: partName, ContentType: contentType, } c.Overrides = append(c.Overrides, override) return override } // AddHeaderOverride 添加一个页眉的内容类型 func (c *ContentTypes) AddHeaderOverride(index int) *Override { return c.AddOverride( "/document/header"+fmt.Sprintf("%d", index)+".xml", "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml", ) } // AddFooterOverride 添加一个页脚的内容类型 func (c *ContentTypes) AddFooterOverride(index int) *Override { return c.AddOverride( "/document/footer"+fmt.Sprintf("%d", index)+".xml", "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml", ) } // ToXML 将内容类型集合转换为XML func (c *ContentTypes) ToXML() string { xml := "" xml += "" // 添加所有默认的内容类型 for _, def := range c.Defaults { xml += "" } // 添加所有覆盖的内容类型 for _, override := range c.Overrides { xml += "" } xml += "" return xml }