English | 中文
WordZero is a Golang-based Word document manipulation library that provides basic document creation and modification operations. This library follows the latest Office Open XML (OOXML) specifications and focuses on supporting modern Word document format (.docx).
- 🚀 Complete Document Operations: Create, read, and modify Word documents
- 🎨 Rich Style System: 18 predefined styles with custom style and inheritance support
- 📝 Text Formatting: Full support for fonts, sizes, colors, bold, italic, and more
- 📐 Paragraph Format: Alignment, spacing, indentation, and other paragraph properties
- 🏷️ Heading Navigation: Complete support for Heading1-9 styles, recognizable by Word navigation pane
- 📊 Table Functionality: Complete table creation, editing, styling, and iterator support
- 📄 Page Settings: Page size, margins, headers/footers, and professional layout features
- 🔧 Advanced Features: Table of contents generation, footnotes/endnotes, list numbering, template engine, etc.
- 🎯 Template Inheritance: Support for base templates and block override mechanisms for template reuse and extension
- ⚡ Excellent Performance: Zero-dependency pure Go implementation, average 2.62ms processing speed, 3.7x faster than JavaScript, 21x faster than Python
- 🔧 Easy to Use: Clean API design with fluent interface support
If you need to work with Excel documents, we highly recommend Excelize —— the most popular Go library for Excel operations:
- ⭐ 19.2k+ GitHub Stars - The most popular Excel processing library in the Go ecosystem
- 📊 Complete Excel Support - Supports all modern Excel formats including XLAM/XLSM/XLSX/XLTM/XLTX
- 🎯 Feature Rich - Charts, pivot tables, images, streaming APIs, and more
- 🚀 High Performance - Streaming read/write APIs optimized for large datasets
- 🔧 Easy Integration - Perfect complement to WordZero for complete Office document processing solutions
Perfect Combination: WordZero handles Word documents, Excelize handles Excel documents, together providing comprehensive Office document manipulation capabilities for your Go projects.
// WordZero + Excelize combination example
import (
"github.com/ZeroHawkeye/wordZero/pkg/document"
"github.com/qax-os/excelize/v2"
)
// Create Word report
doc := document.New()
doc.AddParagraph("Data Analysis Report").SetStyle(style.StyleHeading1)
// Create Excel data sheet
xlsx := excelize.NewFile()
xlsx.SetCellValue("Sheet1", "A1", "Data Item")
xlsx.SetCellValue("Sheet1", "B1", "Value")
go get github.com/ZeroHawkeye/wordZero
We recommend using versioned installation:
# Install latest version
go get github.com/ZeroHawkeye/wordZero@latest
# Install specific version
go get github.com/ZeroHawkeye/wordZero@v1.3.7
package main
import (
"log"
"github.com/ZeroHawkeye/wordZero/pkg/document"
"github.com/ZeroHawkeye/wordZero/pkg/style"
)
func main() {
// Create new document
doc := document.New()
// Add title
titlePara := doc.AddParagraph("WordZero Usage Example")
titlePara.SetStyle(style.StyleHeading1)
// Add body paragraph
para := doc.AddParagraph("This is a document example created using WordZero.")
para.SetFontFamily("Arial")
para.SetFontSize(12)
para.SetColor("333333")
// Create table
tableConfig := &document.TableConfig{
Rows: 3,
Columns: 3,
}
table := doc.AddTable(tableConfig)
table.SetCellText(0, 0, "Header1")
table.SetCellText(0, 1, "Header2")
table.SetCellText(0, 2, "Header3")
// Save document
if err := doc.Save("example.docx"); err != nil {
log.Fatal(err)
}
}
// Create base template
engine := document.NewTemplateEngine()
baseTemplate := `{{companyName}} Work Report
{{#block "summary"}}
Default summary content
{{/block}}
{{#block "content"}}
Default main content
{{/block}}`
engine.LoadTemplate("base_report", baseTemplate)
// Create extended template, override specific blocks
salesTemplate := `{{extends "base_report"}}
{{#block "summary"}}
Sales Performance Summary: Achieved {{achievement}}% this month
{{/block}}
{{#block "content"}}
Sales Details:
- Total Sales: {{totalSales}}
- New Customers: {{newCustomers}}
{{/block}}`
engine.LoadTemplate("sales_report", salesTemplate)
// Render template
data := document.NewTemplateData()
data.SetVariable("companyName", "WordZero Tech")
data.SetVariable("achievement", "125")
data.SetVariable("totalSales", "1,850,000")
data.SetVariable("newCustomers", "45")
doc, _ := engine.RenderTemplateToDocument("sales_report", data)
doc.Save("sales_report.docx")
package main
import (
"log"
"github.com/ZeroHawkeye/wordZero/pkg/document"
)
func main() {
// Create template with image placeholders
engine := document.NewTemplateEngine()
template := `Company: {{companyName}}
{{#image companyLogo}}
Project Report: {{projectName}}
Status: {{#if isCompleted}}Completed{{else}}In Progress{{/if}}
{{#image statusChart}}
Team Members:
{{#each teamMembers}}
- {{name}}: {{role}}
{{/each}}`
engine.LoadTemplate("project_report", template)
// Prepare template data
data := document.NewTemplateData()
data.SetVariable("companyName", "WordZero Tech")
data.SetVariable("projectName", "Document Processing System")
data.SetCondition("isCompleted", true)
// Set team members list
data.SetList("teamMembers", []interface{}{
map[string]interface{}{"name": "Alice", "role": "Lead Developer"},
map[string]interface{}{"name": "Bob", "role": "Frontend Developer"},
})
// Configure and set images
logoConfig := &document.ImageConfig{
Width: 100,
Height: 50,
Alignment: document.AlignCenter,
}
data.SetImage("companyLogo", "assets/logo.png", logoConfig)
chartConfig := &document.ImageConfig{
Width: 200,
Height: 150,
Alignment: document.AlignCenter,
AltText: "Project Status Chart",
Title: "Current Project Status",
}
data.SetImage("statusChart", "assets/chart.png", chartConfig)
// Render template to document
doc, err := engine.RenderTemplateToDocument("project_report", data)
if err != nil {
log.Fatal(err)
}
// Save document
err = doc.Save("project_report.docx")
if err != nil {
log.Fatal(err)
}
}
package main
import (
"log"
"github.com/ZeroHawkeye/wordZero/pkg/markdown"
)
func main() {
// Create Markdown converter
converter := markdown.NewConverter(markdown.DefaultOptions())
// Markdown content
markdownText := `# WordZero Markdown Conversion Example
Welcome to WordZero's **Markdown to Word** conversion feature!
## Supported Syntax
### Text Formatting
- **Bold text**
- *Italic text*
- ` + "`Inline code`" + `
### Lists
1. Ordered list item 1
2. Ordered list item 2
- Unordered list item A
- Unordered list item B
### Quotes and Code
> This is blockquote content
> Supporting multiple lines
` + "```" + `go
// Code block example
func main() {
fmt.Println("Hello, WordZero!")
}
` + "```" + `
---
Conversion complete!`
// Convert to Word document
doc, err := converter.ConvertString(markdownText, nil)
if err != nil {
log.Fatal(err)
}
// Save Word document
err = doc.Save("markdown_example.docx")
if err != nil {
log.Fatal(err)
}
// File conversion
err = converter.ConvertFile("input.md", "output.docx", nil)
if err != nil {
log.Fatal(err)
}
}
Available in multiple languages:
- English: 📖 Wiki Documentation
- 中文: 📖 中文文档
Key Documentation:
- 🚀 Quick Start - Beginner's guide
- ⚡ Feature Overview - Detailed description of all features
- 📊 Performance Benchmarks - Cross-language performance comparison analysis
- 🏗️ Project Structure - Project architecture and code organization
See example code in the examples/
directory:
examples/basic/
- Basic functionality demoexamples/style_demo/
- Style system demoexamples/table/
- Table functionality demoexamples/formatting/
- Formatting demoexamples/page_settings/
- Page settings demoexamples/advanced_features/
- Advanced features comprehensive demoexamples/template_demo/
- Template functionality demoexamples/template_inheritance_demo/
- Template inheritance feature demo ✨ Newexamples/template_image_demo/
- Image placeholder template demo ✨ Newexamples/markdown_conversion/
- Markdown to Word feature demo ✨ New
Run examples:
# Run basic functionality demo
go run ./examples/basic/
# Run style demo
go run ./examples/style_demo/
# Run table demo
go run ./examples/table/
# Run template inheritance demo
go run ./examples/template_inheritance_demo/
# Run image placeholder template demo
go run ./examples/template_image_demo/
# Run Markdown to Word demo
go run ./examples/markdown_conversion/
- Document Operations: Create, read, save, parse DOCX documents
- Text Formatting: Fonts, sizes, colors, bold, italic, etc.
- Style System: 18 predefined styles + custom style support
- Paragraph Format: Alignment, spacing, indentation, complete support
- Table Functionality: Complete table operations, styling, cell iterators
- Page Settings: Page size, margins, headers/footers, etc.
- Advanced Features: Table of contents generation, footnotes/endnotes, list numbering, template engine (with template inheritance)
- Image Features: Image insertion, size adjustment, position setting
- Markdown to Word: High-quality Markdown to Word conversion based on goldmark ✨ New
- Table sorting and advanced operations
- Bookmarks and cross-references
- Document comments and revisions
- Graphics drawing functionality
- Multi-language and internationalization support
👉 View complete feature list: Feature Overview
WordZero excels in performance, verified through comprehensive benchmarks:
Language | Average Execution Time | Relative Performance |
---|---|---|
Golang | 2.62ms | 1.00× |
JavaScript | 9.63ms | 3.67× |
Python | 55.98ms | 21.37× |
👉 View detailed performance analysis: Performance Benchmarks
wordZero/
├── pkg/ # Core library code
│ ├── document/ # Document operation features
│ └── style/ # Style management system
├── examples/ # Usage examples
├── test/ # Integration tests
├── benchmark/ # Performance benchmarks
├── docs/ # Documentation and assets
│ ├── logo.svg # Main logo with performance indicators
│ ├── logo-banner.svg # Banner version for README headers
│ └── logo-simple.svg # Simplified icon version
└── wordZero.wiki/ # Complete documentation
👉 View detailed structure description: Project Structure
The project includes multiple logo variations for different use cases:
Logo Type | Usage | Preview |
---|---|---|
Banner | README headers, documentation | |
Main | General branding | |
Simple | Icons, favicons |
Issues and Pull Requests are welcome! Please ensure before submitting code:
- Code follows Go coding standards
- Add necessary test cases
- Update relevant documentation
- Ensure all tests pass
This project is licensed under the MIT License. See the LICENSE file for details.
More Resources: