PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Exporter un document en PDF : qualité dégradée
Exporter un document en PDF : qualité dégradée
Iniciado por THIERRY TILLIER, 02,sep. 2020 17:30 - 8 respuestas
Miembro registrado
1.173 mensajes
Publicado el 02,septiembre 2020 - 17:30
Bonjour à tous,

Voici mon petit soucis :
J'ai une matrice WORD docx, que je remplis par programmation. Je dois ensuite l'exporter en PDF et là, la qualité du PDF est très mauvaise (du genre le t, ou le e sont collés autres lettres), dégradation des images (logo).

Voici le code que j'utilise :

iDestination(iPDF,:sLeDocumentPDF)
iParamètrePDF("","",iQualitéMaximale)
:bPDFEstCrée=iImprimeDoc(:MonDocumentFinal)



J'ai aussi testé ça, sans amélioration.
:bPDFEstCrée=DocVersPDF(:MonDocumentFinal,:sLeDocumentPDF)


Je supposais un problème de police mais mon document Word est en Arial (taille 9).

Avez-vous déjà rencontrer ce genre de soucis ?

Merci d'avance
Thierry

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Miembro registrado
237 mensajes
Publicado el 02,septiembre 2020 - 17:42
Bonjour

je ne sais pas si cela peux vous aider mais le problème se produit également si vous faite un aperçue puis générer pdf

cela peut également venir de l'imprimante configurée au moment de la génération du pdf mais c'est quand je fais des iimprimeEtat()


Je suppose que si vous passer par word sauvegarder en pdf vous n'avez aucun problème ?

Cordialement
Miembro registrado
1.173 mensajes
Publicado el 02,septiembre 2020 - 18:19
En effet en faisant l'export directement depuis Word il n'y a aucun problème de qualité.
Je ne peux pas utiliser l'aperçu car l'objectif est de générer et d'imprimer des documents en masse (par lot)

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Miembro registrado
237 mensajes
Publicado el 02,septiembre 2020 - 18:39
Vous pouvez basculer le words dans un etat puis imprimer en pdf mais c'est une solution de contournement.

j'avoue n'avoir jamais fait de WORD docx via windev
vous partez d'un document source ou vous créez tous de zéro ?

sur la demande du forum : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/110474-word-vers-pdf/read.awp
il propose d'autre solution

a savoir :
1) utiliser pdfcreator ou un autre logiciel spécialiser dans la génération de pdf
2) piloter word pour utiliser sa capacité à générer le pdf


Je dirais que vous pouvez également imprimer sur une imprimante pdf qui serait configuré pour enregistrer dans un dossier spécifique via idestination


Note : Sur la documentation iParamètrePDF est fait avant idestination je sais pas si ça joue.
Note 2: iImprimeDoc permet de passer par un champ traitement de texte et ensuite de jouer sur la taille sur l'impression peut être que la dégradation est du à un redimensionnement de la page.
Miembro registrado
237 mensajes
Publicado el 02,septiembre 2020 - 18:57
Lol je double poste

j'ai tester une matrice sous words en docx quand je la bascule en pdf avec votre code je n'ai pas de matrice du tous ^^ (que ce soit iImprimeDoc ou DocVersPDF)

et idem si je la charge dans le champ traitement de texte la matrice n'est pas visible

je précise faire ces tests sous windev 24 donc il se peux quand 25 ça soit juste bugué

Sinon j'ai essayer des trucs simples comme des mots, des tableaux ça marche niquel
Miembro registrado
1.173 mensajes
Publicado el 02,septiembre 2020 - 19:10
Je vais regarder le lien, merci

Petite précision, les documents Word d'origine ont été faits en *.doc (ils ont vieux) et je les ai convertis en DOCX.

Et je me suis aperçu que si le document word a été mal conçu on a aussi des erreurs de contenu.
Exemple : mon document originale contient le mot NOTIFICATION et l'impression me met NITIFICATION
En réécrivant le mot dans le docx, l'erreur semble disparaître.

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Publicado el 03,septiembre 2020 - 08:35
Bonjour

J'ai rencontré le même problème que j'ai réglé en générant le PDF via LibreOffice avec le code suivant trouvé sur internet

// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
// CreateProperty ()
//
// Paramètres :
// Aucun
// Valeur de retour :
// Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
Procedure CreateProperty(oServiceManager,__tArgs,_sName est une chaîne,_vValue)

TableauAjoute(__tArgs)
iNbOccurences est un entier = __tArgs..Occurrence

__tArgs[iNbOccurences] = oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
__tArgs[iNbOccurences]>>Name = _sName
__tArgs[iNbOccurences]>>Value = _vValue


// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
// DocumentVersPDF ()
//
// Paramètres :
// Aucun
// Valeur de retour :
// Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
Procedure DocumentVersPDF(LOCAL _sDocCheminComplet est une chaîne,_sDocPDFCheminComplet est une chaîne="")

LOCAL
oServiceManager est un objet OLE dynamique
oDesktop est un objet OLE dynamique
oDocument est un objet OLE dynamique
sMess est une chaîne

SI PAS fFichierExiste(_sDocCheminComplet) ALORS
sMess = "Le document source n'existe pas."
ExceptionDéclenche(1,sMess)
FIN

QUAND EXCEPTIONEXCEPTION DANS
// Création d'un service OpenOffice si nécessaire
oServiceManager = allouer un objet OLE ("com.sun.star.ServiceManager")
oDesktop = oServiceManager>>createInstance("com.sun.star.frame.Desktop")
FAIRE
sMess = "OpenOffice n'est pas installé sur votre poste."
ExceptionDéclenche(1,sMess)
FIN

tParams est un tableau de 0 objet automation dynamique //Tableau de paramètres
tParams = allouer un tableau de 0 objet automation dynamique //Tableau de paramètres

//Masqué
CreateProperty(oServiceManager,tParams,"Hidden",Vrai)
//Lecture seule
//CreateProperty(oServiceManager,tParams,"ReadOnly",faux)

//Formatage du chemin du fichier
LOCAL
sDocCheminCompletTmp est une chaîne

sDocCheminCompletTmp = "file:///"+Remplace(_sDocCheminComplet,"\","/")
//Ouverture du fichier dans OpenOffice Writer
oDocument = oDesktop>>LoadComponentFromURL(sDocCheminCompletTmp,"_blank",0,tParams)
SI oDocument = Null ALORS
ExceptionDéclenche(1,"Impossible de charger le document source.")
FIN

TableauSupprimeTout(tParams)
//CreateProperty(oServiceManager,tParams,"Magnification",2)
//CreateProperty(oServiceManager,tParams,"EncryptFile",vrai)
//CreateProperty(oServiceManager,tParams,"DocumentOpenPassword","Password")
//CreateProperty(oServiceManager,tParams,"HideViewerWindowControls",vrai)

oExportObject est un objet OLE dynamique
oExportObject = oServiceManager>>Bridge_GetValueObject()
oExportObject>>Set("[]com.sun.star.beans.PropertyValue",tParams);

tFilterParams est un tableau de 0 objet automation dynamique
CreateProperty(oServiceManager,tFilterParams,"FilterName","writer_pdf_Export")
CreateProperty(oServiceManager,tFilterParams,"FilterData",oExportObject)

SI _sDocPDFCheminComplet = "" ALORS
_sDocPDFCheminComplet = fExtraitChemin(_sDocCheminComplet,fDisque+fRépertoire+fFichier)+".pdf"
FIN

LOCAL
sDocPDFCheminCompletTmp est une chaîne

sDocPDFCheminCompletTmp = "file:///"+Remplace(_sDocPDFCheminComplet,"\","/")

oDocument>>StoreToURL(sDocPDFCheminCompletTmp,tFilterParams);

oDocument>>Close(Vrai);

CAS EXCEPTION:
sMess = "Erreur lors de la sauvegarde du document : "+RC
sMess += "'"+_sDocCheminComplet+"'"+RC
sMess += "vers le document : "+RC
sMess += "'"+_sDocPDFCheminComplet+"'."+RC
ExceptionPropage(sMess+RC+RC+ExceptionInfo(errComplet))


Cordialement
Miembro registrado
70 mensajes
Publicado el 03,septiembre 2020 - 10:29
Bonjour,
Je rajoute ma pierre à l'édifice. Si l'export depuis word et que tu as word d'installé.
sFicWord est une chaîne //Chemin/nom du fichier word
sFicPDF est une chaîne //Chemin/Nom du fichier pdf à générer
QUAND EXCEPTIONEXCEPTION DANS
WordObj est un objet automation "Word.application"
WordObj>>Visible = False
//on ouvre le document
WordObj>>Documents>>Open(sFicWord) //Fichier Word
//https://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.document.saveas(v=vs.120).aspx
WordObj>>ActiveDocument>>SaveAs(sFicPDF, 17)
WordObj>>Quit(Faux,Faux,Faux)
FAIRE
Erreur("Erreur dans la conversion en PDF",ExceptionInfo(errComplet))
WordObj>>Quit(Faux,Faux,Faux)
FIN
Miembro registrado
1.173 mensajes
Publicado el 05,septiembre 2020 - 13:24
Merci à tous,

Je voulais éviter d'utiliser l'automation mais je sûrement opter pour cette méthode, étant un peu dans l'urgence. Si je trouve plus efficient je ne manquerai pas de revenir sur le post.

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net