docfusion/golang/main.go

84 lines
2.2 KiB
Go

package main
import (
"fmt"
"io/ioutil"
"log"
"path/filepath"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/widget"
"github.com/unidoc/unioffice/document"
)
func main() {
// Créez une nouvelle application Fyne
a := app.New()
w := a.NewWindow("Sélectionner un dossier")
// Créez un bouton pour ouvrir le dialogue de sélection de dossier
btn := widget.NewButton("Sélectionner un dossier", func() {
dialog.ShowFolderOpen(func(cheminDossier fyne.ListableURI, err error) {
if cheminDossier != nil {
dossier := cheminDossier.Path()
// Créez un nouveau document
docFusionne := document.New()
// Récupérez tous les fichiers DOCX dans le dossier
fichiers, err := ioutil.ReadDir(dossier)
if err != nil {
log.Fatalf("Erreur lors de la lecture du dossier : %v", err)
}
for _, fichier := range fichiers {
if filepath.Ext(fichier.Name()) == ".docx" {
cheminFichier := filepath.Join(dossier, fichier.Name())
// Ouvrez le document existant
doc, err := document.Open(cheminFichier)
if err != nil {
log.Printf("Erreur lors de l'ouverture du fichier %s : %v", fichier.Name(), err)
continue
}
// Copiez le contenu du document
for _, para := range doc.Paragraphs() {
newPara := docFusionne.AddParagraph()
newPara.Properties().SetAlignment(para.Properties().Alignment())
for _, run := range para.Runs() {
newRun := newPara.AddRun()
newRun.Properties().SetBold(run.Properties().IsBold())
newRun.Properties().SetItalic(run.Properties().IsItalic())
newRun.Properties().SetUnderline(run.Properties().IsUnderline())
newRun.AddText(run.Text())
}
}
doc.Close()
}
}
// Enregistrez le document fusionné
nomFichierSortie := "fusion.docx"
err = docFusionne.SaveToFile(nomFichierSortie)
if err != nil {
log.Fatalf("Erreur lors de l'enregistrement du document fusionné : %v", err)
}
fmt.Printf("Documents fusionnés dans %s\n", nomFichierSortie)
}
}, w)
})
// Ajoutez le bouton à la fenêtre et affichez-la
w.SetContent(container.NewVBox(
btn,
))
w.ShowAndRun()
}