Перейдіть у бібліотеку, щоб генерувати та редагувати документи MS Word
Бібліотека Go з відкритим вихідним кодом для керування та автоматизації типових завдань обробки тексту, як-от вставлення колонтитулів, таблиць і зображень у файли Word DOCX тощо.
unioffice — це потужна чиста бібліотека Go з відкритим вихідним кодом, яка дозволяє розробникам програмного забезпечення керувати текстовими документами та з легкістю автоматизувати типові завдання обробки текстів у своїх власних програмах без використання Microsoft Word. Бібліотека досить добре оптимізована і дозволяє легко редагувати код відповідно до ваших вимог.
Бібліотека unioffice — це потужна бібліотека на основі Go, яку можна використовувати для створення, редагування, форматування та обробки документів Office Open XML. Бібліотека підтримує кілька важливих функцій обробки текстів, таких як читання, написання та редагування документів Word, підтримка форматування тексту, автоматично створений зміст, розміщення на сторінці документа, вставка колонтитулів, додавання таблиць, відкриття документа як шаблону , підтримка полів форми та багато іншого.
Початок роботи з 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. Таблиці дуже корисні, їх можна використовувати для кращого впорядкування та представлення даних. Він підтримує додавання таблиці з межами та без них, а також дозволяє легко створювати стиль таблиці. Ви можете легко розмістити вміст у таблиці та налаштувати розмір відповідно до своїх потреб.