Перейдіть у бібліотеку, щоб генерувати та редагувати документи MS Word

Бібліотека Go з відкритим вихідним кодом для керування та автоматизації типових завдань обробки тексту, як-от вставлення колонтитулів, таблиць і зображень у файли Word DOCX тощо.

unioffice — це потужна чиста бібліотека Go з відкритим вихідним кодом, яка дозволяє розробникам програмного забезпечення керувати текстовими документами та з легкістю автоматизувати типові завдання обробки текстів у своїх власних програмах без використання Microsoft Word. Бібліотека досить добре оптимізована і дозволяє легко редагувати код відповідно до ваших вимог.

Бібліотека unioffice — це потужна бібліотека на основі Go, яку можна використовувати для створення, редагування, форматування та обробки документів Office Open XML. Бібліотека підтримує кілька важливих функцій обробки текстів, таких як читання, написання та редагування документів Word, підтримка форматування тексту, автоматично створений зміст, розміщення на сторінці документа, вставка колонтитулів, додавання таблиць, відкриття документа як шаблону , підтримка полів форми та багато іншого.

Previous Next

Початок роботи з unioffice

Рекомендований спосіб інсталювати unioffice у ваш проект — використовувати GitHub. Будь ласка, використовуйте наступну команду для плавного встановлення.

Встановіть unioffice через GitHub

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

Створіть документ Word DOCX за допомогою Go API

Бібліотека з відкритим вихідним кодом unioffice надала можливість легко створювати новий документ Word DOCX. Ви також можете легко відкрити та змінити існуючий документ Microsoft Word у своїх власних програмах. Бібліотека також містила функції для додавання нових текстових абзаців, вставки зображень на сторінку, вирівнювання тексту, додавання колонтитулів, додавання таблиць і багато іншого.

Властивості документа Word через Go API

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. Він підтримує такі функції, як вставка зображень у вибране вами місце, зміна існуючого зображення, обтікання зображення текстом, видалення зображення та багато іншого. Для додавання зображення необхідно вказати назву та розташування зображення.

Управління зображеннями в документах Word за допомогою Go API

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. Це також дозволяє мати різні колонтитули залежно від розділу документа. Він також включав підтримку парних, непарних і перших функцій.

Додати заголовок та нижній колонтитул до документа Word через Go API

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. Таблиці дуже корисні, їх можна використовувати для кращого впорядкування та представлення даних. Він підтримує додавання таблиці з межами та без них, а також дозволяє легко створювати стиль таблиці. Ви можете легко розмістити вміст у таблиці та налаштувати розмір відповідно до своїх потреб.

 Українська