Les espaces réservés dans le modèle docx ne sont pas remplacés
P粉436410586
P粉436410586 2024-03-30 09:15:01
0
1
385

J'utilise cette bibliothèque pour remplacer certains espaces réservés par des modèles docx et générer plusieurs documents. J'utilise novo et vue neutres sur le front-end et j'ai créé une méthode qui transmet le fichier docx sélectionné et les données à la bibliothèque pour traitement. J'ai utilisé la boucle for de cette façon

// putting all the desired data into a specific array
for(let i = 0; i < this.selectedData.length; i++){
  this.dataPlaceholders.push({
   key1: val1,
   key2: val2
  })
}
//call the library to get documents

for(let i; i < this.dataPlaceholders.length; i++){
 this.docxTemplate.process(template, this.dataPlaceholders[i])
}

Les données à transmettre sont fusionnées des deux tableaux et si je les enregistre sur la console, je peux voir que tous les fichiers sont en place. Comme indiqué dans la documentation, j'utilise des crochets {} 来设置占位符,并且占位符的名称与 dataPlaceholders pour nommer chaque clé du même lot. Après les tests, j'ai remarqué que j'étais capable de générer un document différent, mais les espaces réservés n'étaient pas remplacés et il y aurait des champs vides dans le document.

Comment puis-je le réparer pour que cela fonctionne correctement ?

P粉436410586
P粉436410586

répondre à tous(1)
P粉394812277

Après quelques essais et lecture de quelques questions sur la façon d'implémenter des appels asynchrones dans une boucle, j'ai choisi d'utiliser la fonction Array.prototype.map et cela a bien fonctionné. J'ai modifié la méthode vue qui appelle la bibliothèque en tant que méthode asynchrone, mais j'ai conservé le bloc then afin de pouvoir récupérer le document traité une fois le traitement de la bibliothèque terminé. p>

this.dataPlaceholders.map( async (data, i) => {
  let filename = data.supplier + '.docx'
  this.docxTemplate.process(template, data).then( (result) => {
    // code to download files here
     let a = document.createElement('a')
     let downloadLink = URL.createObjectURL(result)
     a.href = downloadLink
     a.download = filename
     a.click()
  })
})

La seule chose à résoudre est de savoir comment révoquer l'URL du blob après avoir téléchargé tous les fichiers.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!