fah/odt_helper.go

66 lines
1.1 KiB
Go
Raw Normal View History

package main
import (
"archive/zip"
"bytes"
"io"
"os"
)
func fillODTForm(inputPath, outputPath string, fields map[string]string) error {
reader, err := zip.OpenReader(inputPath)
if err != nil {
return err
}
defer reader.Close()
writer, err := os.Create(outputPath)
if err != nil {
return err
}
defer writer.Close()
zipWriter := zip.NewWriter(writer)
defer zipWriter.Close()
for _, file := range reader.File {
if file.Name == "content.xml" {
rc, err := file.Open()
if err != nil {
return err
}
defer rc.Close()
content, err := io.ReadAll(rc)
if err != nil {
return err
}
for field, value := range fields {
content = bytes.Replace(content, []byte("%"+field+"%"), []byte(value), -1)
}
w, err := zipWriter.Create(file.Name)
if err != nil {
return err
}
_, err = w.Write(content)
if err != nil {
return err
}
} else {
w, err := zipWriter.Create(file.Name)
if err != nil {
return err
}
rc, err := file.Open()
if err != nil {
return err
}
_, err = io.Copy(w, rc)
rc.Close()
if err != nil {
return err
}
}
}
return nil
}