PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Sauvegarder un word au format PDF
Sauvegarder un word au format PDF
Débuté par Julie, 22 déc. 2022 11:58 - 15 réponses
Posté le 22 décembre 2022 - 11:58
Bonjour,

Je génère un fichier word en remplaçant des variables, tout fonctionne pas de soucis. A la fin de la génération du fichier Word je l'ouvre pour que l'utilisateur puisse néanmoins le compléter / modifier.

Une fois qu'il le ferme je souhaite le générer et l'enregistrer au format PDF pour plus tard l'envoyer par email. En utilisant DocVersPDF cela ne respecte pas l'affichage de mon word (j'ai des petites cases à cocher qui sont remplacés par des points d'interrogation.

Par contre en "grugeant" et en faisant une impression PDF cela fonctionne, cependant cela demande à l'utilisateur de choisir où l'enregistrer et de le nommer correctement.

MonDoc est un Document = "c:\temp\GenerationBE.docx"




POUR TOUT T_VAR_COURRIER

tabFragments est un tableau de docFragments = MonDoc.Recherche(T_TABLE.VC_NOMVAR)

SELON T_VAR_COURRIER.VC_TYPE
CAS "VAR_CODE"
sValeurARemplacer = ExécuteCode(T_TABLE.VC_VALEUR)

CAS "VAR_INDIRECTION"
sValeurARemplacer = SansEspace({T_TABLE.VC_VALEUR})
AUTRE CAS

FIN

POUR TOUT f de tabFragments
f.Texte = sValeurARemplacer
FIN



FIN
MonNomDeDoc est une chaîne = "A"+numOffreAt+" - " + SansEspace(Table.Imma) + " - BE + FD + " + AnnéeEnCours() + " .docx"
sMonNomDeDocSansExtension est une chaîne = "A"+numOffreA+" - " + SansEspace(Table.Imma) + " - BE + FD + " + AnnéeEnCours()
MonDoc.Sauve("c:\temp\"+ MonNomDeDoc) // A remplacer par

MonDoc.Ferme()

LanceAppliAssociée("c:\temp\"+ MonNomDeDoc)

SI OuiNon("Voulez vous faire partir le document par email à l'enleveur") = Oui ALORS

// Transformer le docx en PDF -- FONCTIONNE MAIS FORMAT BOF
// SI DocVersPDF(MonDoc, "c:\temp\" + [fSep] + sMonNomDeDocSansExtension + ".pdf") ALORS
// Info("Document converti en PDF")
// FIN

//MonPdf est un pdfDocument = "c:\temp\"+ MonNomDeDoc
//PDFSauve(MonPdf,"c:\temp\"+ sMonNomDeDocSansExtension +".pdf")

//iDestination(iFichier)
//iImprime("c:\temp\"+MonNomDeDoc)


// Fonctionne MAIS demande où enregistrer le doc et comment le nommer ...
SI iConfigure("Microsoft Print to PDF") = Vrai ALORS
// Imprime un texte avec cette police
iImprimeDoc("c:\temp\"+MonNomDeDoc)
// Termine l'impression
iFinImprime()
// Fonctionne mais comment ne pas passer par une intervention utilisateur ?

// Envoi d'un mail avec pièce jointe
Email.Expéditeur = "monemail"
Email.AdresseExpéditeur = "monemail"
Email.Destinataire[1] = "monemail2"
Email.NbDestinataire = 1
Email.Sujet = "Sujet du message"
Email.Message = "Texte du message"
// Photo.jpg est un fichier qui a été créé par l'application
Email.Attache[1] = "c:\temp\DocPDF.pdf"
Email.NbAttache = 1
Email.AccuséRéception = Vrai
EmailLanceAppli()

// Enregistrer le mail .msg ?
FIN
Membre enregistré
3 844 messages
Popularité : +227 (347 votes)
Posté le 22 décembre 2022 - 14:39
Bonjour,
//Création du docx
...
//Conversion en PDF
iDestination(iPDFGénérique,saCheminPDF)
iImprimeDoc(saCheminDoc)
//Gestion du mail
...

qui reprend directement ton traitement, devrait fonctionner.
Dans ton cas, on peut même pousser le vice jusque
//Création du docx
...
//Données concernant le destinataire
iParamètreExport(......)
//Conversion en PDF et ajout en PJ
iDestination(iEmailPDF,saCheminPDF)
iImprimeDoc(saCheminDoc)

Dans les deux cas, LanceAppliAssociée devient inutile

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 22 décembre 2022 - 14:49
Posté le 02 janvier 2023 - 18:13
Pardon je n'ai pas eu la notification de réponse ...

le iImprimeDoc permet d'imprimer un doc au format docx c'est pour ça que je ne l'avais pas utilisé...

Là en l'utilisant le format de mon fichier n'est pas correct, cela m'interprète des cases à cocher en point d'interrogation :









J'ai peut être mal codé, comme le iImprimeDoc permet d'imprimer un docx j'ai demandé l'impression du docx ... :

MonNomDeDoc est une chaîne = "A"+numOffreA+" - " + SansEspace(Table.Imma) + " - BE + FD + " + AnnéeEnCours() + " .docx"
sMonNomDeDocSansExtension est une chaîne = "A"+numOffreA+" - " + SansEspace(Table.Imma) + " - BE + FD + " + AnnéeEnCours()
MonDoc.Sauve("c:\temp\"+ MonNomDeDoc) // A remplacer par

MonDoc.Ferme()

LanceAppliAssociée("c:\temp\"+ MonNomDeDoc)

SI OuiNon("Voulez vous faire partir le document par email à l'enleveur") = Oui ALORS

// Transformer le docx en PDF -- FONCTIONNE MAIS FORMAT BOF
// SI DocVersPDF(MonDoc, "c:\temp\" + [fSep] + sMonNomDeDocSansExtension + ".pdf") ALORS
// Info("Document converti en PDF")
// FIN

//MonPdf est un pdfDocument = "c:\temp\"+ MonNomDeDoc
//PDFSauve(MonPdf,"c:\temp\"+ sMonNomDeDocSansExtension +".pdf")

//iDestination(iFichier)
//iImprime("c:\temp\"+MonNomDeDoc)



iDestination(iPDFGénérique,"c:\temp\"+sMonNomDeDocSansExtension)
iImprimeDoc(MonDoc)


Est ce que c'est ce que tu pensais ?
Posté le 03 janvier 2023 - 09:19
Mauvais code pardon voici celui testé :
iDestination(iPDFGénérique,"c:\temp\"+sMonNomDeDocSansExtension)
iImprimeDoc("c:\temp\"+MonNomDeDoc)
Membre enregistré
3 844 messages
Popularité : +227 (347 votes)
Posté le 03 janvier 2023 - 11:27
Julie a écrit :
Est ce que c'est ce que tu pensais ?

Exactement, c'est d'ailleurs le code que j'avais fourni

--
Il y a peut être plus simple, mais, ça tourne
Posté le 03 janvier 2023 - 11:42
Zut... cela ne me garde pas le format correctement ... et me transforme les cases à cocher en point d'interrogation ... je vais chercher encore comment je peux adapter ma solution sans demander à l'utilisateur ou sauvegarder le doc.
Membre enregistré
3 844 messages
Popularité : +227 (347 votes)
Posté le 03 janvier 2023 - 13:55
1-Cela ne viendrait-il pas d'un problème UNICODE/ANSI ? (à modifier dans configuration courante)
Les cases à cocher sont des caractères UNICODE (U10102, U25A1 entre autre)
2-Que donne l'impression sur une imprimante (via idestination)

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 03 janvier 2023 - 14:10
Membre enregistré
3 844 messages
Popularité : +227 (347 votes)
Posté le 03 janvier 2023 - 15:17
3-Les cases à cocher ne seraient-elles pas des champs ?

--
Il y a peut être plus simple, mais, ça tourne
Posté le 03 janvier 2023 - 17:21
Alors si je passe en unicode, cela ne change rien (j'étais en ANSI) :





Je suis donc repassée en ANSI.

J'ai tenté l'impression en direct sur l'imprimante et cela fonctionne par contre.
Posté le 03 janvier 2023 - 17:27
Non ce ne sont pas des champs, ce sont des cases à cocher dans un modèle de fichier word
Posté le 03 janvier 2023 - 17:32
J'ai également essayé en utilisant le pdfParamètre mais sans succès non plus :

params est un pdfParamètre
params.Unicode = Vrai
iParamètrePDF(params)
iDestination(iPDFGénérique,"c:\temp\"+sMonNomDeDocSansExtension)
iImprimeDoc("c:\temp\"+MonNomDeDoc)
Posté le 03 janvier 2023 - 17:40
Et j'ai également testé avec le DocVersPDF sans succès non plus :

d is Document = "c:\temp\"+ MonNomDeDoc
SI DocVersPDF(d, "c:\temp\" + [fSep] + "MonDoc.pdf")ALORS
Info("Document converti en PDF")
FIN
Membre enregistré
3 844 messages
Popularité : +227 (347 votes)
Posté le 04 janvier 2023 - 06:52
Julie a écrit :
Non ce ne sont pas des champs, ce sont des cases à cocher dans un modèle de fichier word

Il est possible que ces caractères soient dans la police "Winding". La conversion en PDF de cette police pose parfois des problèmes.
Essaye de passer en "Segoe UI Symbol"
Dans le pire des cas il va falloir passer par un objet automation

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 04 janvier 2023 - 06:57
Posté le 05 janvier 2023 - 12:05
Alors non ce n'était pas une police bizarre mais certainement un caractère de la table de caractère, je l'ai remplacé de partout par des "o" et du coup cela fonctionne ... c'est peu protocolaire mais le rendu est bien :)

Merci pour ton aide
Membre enregistré
157 messages
Popularité : +0 (2 votes)
Posté le 05 janvier 2023 - 17:01
Bonjour,

Et en utilisant l'impression pdf microsoft cela donne quoi ?
Posté le 10 janvier 2023 - 17:49
Bonjour,

C'était pareil, cela me remplaçait les cases à cocher par des ?