1. 产品
  2.   字处理
  3.   GO
  4.   unioffice
 
  

去图书馆生成和编辑 MS Word 文档

用于管理和自动化常见字处理任务的开源 Go 库,例如将页眉和页脚、表格和图像插入 Word DOCX 文件等。

unioffice 是一个强大的开源纯 Go 库,它允许软件开发人员在他们自己的应用程序中轻松管理 Word 文档并自动执行常见的文字处理任务,而无需 Microsoft Word。该库经过了很好的优化,允许您轻松编辑代码以满足您的要求。

unioffice 库是一个强大的基于 Go 的库,可用于生成、编辑、格式化和处理 Office Open XML 文档。该库支持几个重要的文字处理功能,例如阅读、编写和修改 Word 文档、文本格式支持、自动生成的目录、放置在文档页面上、插入页眉和页脚、添加表格、打开文档作为模板,表单字段支持等等。

Previous Next

开始使用 unioffice

将 unioffice 安装到项目中的推荐方法是使用 GitHub。请使用以下命令进行顺利安装。

通过 GitHub 安装 unioffice

go get github.com/unidoc/unioffice/
go build -i github.com/unidoc/unioffice/...   

通过 Go API 创建 Word DOCX 文档

开源库 unioffice 为轻松创建新的 Word DOCX 文档提供了便利。您还可以在自己的应用程序中轻松打开和修改现有的 Microsoft Word 文档。该库还包括添加新文本段落、将图像插入页面、文本对齐、添加页眉和页脚、添加表格等功能。

通过走API进入Word文档属性

func main() {
	doc, err := document.Open("document.docx")
	if err != nil {
		log.Fatalf("error opening document: %s", err)
	}
	defer doc.Close()
	cp := doc.GetOrCreateCustomProperties()
	// You can read properties from the document
	fmt.Println("AppVersion", *cp.GetPropertyByName("AppVersion").X().Lpwstr)
	fmt.Println("Company", *cp.GetPropertyByName("Company").X().Lpwstr)
	fmt.Println("DocSecurity", *cp.GetPropertyByName("DocSecurity").X().I4)
	fmt.Println("LinksUpToDate", *cp.GetPropertyByName("LinksUpToDate").X().Bool)
	fmt.Println("Non-existent", cp.GetPropertyByName("nonexistentproperty"))
	// And change them as well
	cp.SetPropertyAsLpwstr("Company", "Another company") // text, existing property
	fmt.Println("Company", *cp.GetPropertyByName("Company").X().Lpwstr)
	// Adding new properties
	cp.SetPropertyAsLpwstr("Another text property", "My text value") // text
	cp.SetPropertyAsI4("Another integer number property", 42)        // int32
	cp.SetPropertyAsR8("Another float number property", 3.14)        // float64
	cp.SetPropertyAsDate("Another date property", time.Now())        // date
	doc.SaveToFile("document_customized.docx")
	// For new documents all is the same
	docNew := document.New()
	defer docNew.Close()
	cpNew := docNew.GetOrCreateCustomProperties()
	cpNew.SetPropertyAsLpwstr("Another text property", "My text value") // text
	cpNew.SetPropertyAsI4("Another integer number property", 42)        // int23
	cpNew.SetPropertyAsR8("Another float number property", 3.14)        // float64
	cpNew.SetPropertyAsDate("Another date property", time.Now())        // date
	docNew.SaveToFile("document_new.docx")
}
  

 在 Word DOCX 文件中插入图像

开源库 unioffice 使软件开发人员能够在 Microsoft Word 文档中使用图像。它支持将图像插入您选择的位置、修改现有图像、围绕图像的文本、删除图像等功能。要添加图像,必须提供图像的名称和位置。

通过走向API的Word文档管理图像

func main() {
	doc := document.New()
	defer doc.Close()
	img1, err := common.ImageFromFile("gophercolor.png")
	if err != nil {
		log.Fatalf("unable to create image: %s", err)
	}
	img2data, err := ioutil.ReadFile("gophercolor.png")
	if err != nil {
		log.Fatalf("unable to read file: %s", err)
	}
	img2, err := common.ImageFromBytes(img2data)
	if err != nil {
		log.Fatalf("unable to create image: %s", err)
	}
	img1ref, err := doc.AddImage(img1)
	if err != nil {
		log.Fatalf("unable to add image to document: %s", err)
	}
	img2ref, err := doc.AddImage(img2)
	if err != nil {
		log.Fatalf("unable to add image to document: %s", err)
	}
	para := doc.AddParagraph()
	anchored, err := para.AddRun().AddDrawingAnchored(img1ref)
	if err != nil {
		log.Fatalf("unable to add anchored image: %s", err)
	}
	anchored.SetName("Gopher")
	anchored.SetSize(2*measurement.Inch, 2*measurement.Inch)
	anchored.SetOrigin(wml.WdST_RelFromHPage, wml.WdST_RelFromVTopMargin)
	anchored.SetHAlignment(wml.WdST_AlignHCenter)
	anchored.SetYOffset(3 * measurement.Inch)
	anchored.SetTextWrapSquare(wml.WdST_WrapTextBothSides)
	run := para.AddRun()
	for i := 0; i < 16; i++ {
		run.AddText(lorem)
		// drop an inline image in
		if i == 13 {
			inl, err := run.AddDrawingInline(img1ref)
			if err != nil {
				log.Fatalf("unable to add inline image: %s", err)
			}
			inl.SetSize(1*measurement.Inch, 1*measurement.Inch)
		}
		if i == 15 {
			inl, err := run.AddDrawingInline(img2ref)
			if err != nil {
				log.Fatalf("unable to add inline image: %s", err)
			}
			inl.SetSize(1*measurement.Inch, 1*measurement.Inch)
		}
	}
	doc.SaveToFile("image.docx")
}
  

在 Word 文档中添加页眉和页脚

页眉和页脚可用于包含用户希望在文档的每一页上显示的信息,例如作者姓名、文档标题或页码。 unioffice 库允许软件开发人员轻松地为 word 文档添加页眉和页脚。它还允许根据文档部分使用不同的页眉和页脚。它还包括对偶数、奇数和第一个功能的支持。

通过走API在Word文档中添加标题和脚步

func main() {
	doc := document.New()
	defer doc.Close()
	img, err := common.ImageFromFile("gophercolor.png")
	if err != nil {
		log.Fatalf("unable to create image: %s", err)
	}
	hdr := doc.AddHeader()
	// We need to add a reference of the image to the header instead of to the
	// document
	iref, err := hdr.AddImage(img)
	if err != nil {
		log.Fatalf("unable to to add image to document: %s", err)
	}
	para := hdr.AddParagraph()
	para.Properties().AddTabStop(2.5*measurement.Inch, wml.ST_TabJcCenter, wml.ST_TabTlcNone)
	run := para.AddRun()
	run.AddTab()
	run.AddText("My Document Title")
	imgInl, _ := para.AddRun().AddDrawingInline(iref)
	imgInl.SetSize(1*measurement.Inch, 1*measurement.Inch)
	// Headers and footers are not immediately associated with a document as a
	// document can have multiple headers and footers for different sections.
	doc.BodySection().SetHeader(hdr, wml.ST_HdrFtrDefault)
	ftr := doc.AddFooter()
	para = ftr.AddParagraph()
	para.Properties().AddTabStop(6*measurement.Inch, wml.ST_TabJcRight, wml.ST_TabTlcNone)
	run = para.AddRun()
	run.AddText("Some subtitle goes here")
	run.AddTab()
	run.AddText("Pg ")
	run.AddField(document.FieldCurrentPage)
	run.AddText(" of ")
	run.AddField(document.FieldNumberOfPages)
	doc.BodySection().SetFooter(ftr, wml.ST_HdrFtrDefault)
	lorem := `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin lobortis, lectus dictum feugiat tempus, sem neque finibus enim, sed eleifend sem nunc ac diam. Vestibulum tempus sagittis elementum`
	for i := 0; i < 5; i++ {
		para = doc.AddParagraph()
		run = para.AddRun()
		run.AddText(lorem)
	}
	doc.SaveToFile("header-footer.docx")
}
  

在 Word DOCX 中使用表格

开源库 unioffice 使计算机程序员能够在 Word 文档中添加和修改表格。表格非常有用,可用于以更好的方式组织和呈现数据。它支持添加带和不带边框的表格,并允许轻松构建表格样式。您可以轻松地将内容放在表格中,并根据需要调整大小。

 中国人