PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Service d'impressions
Service d'impressions
Débuté par Damien, 24 avr. 2019 16:48 - 6 réponses
Posté le 24 avril 2019 - 16:48
Bonjour,

J'ai un service windev pour faire des impressions. Lorsque l'imprimante est un générateur de pdf comme foxit ou pdfcreator, etc, il arrive qu'une fenêtre s'ouvre pour enregistrer le pdf.

Dans d'autre langage, cela retourne une erreur ou ouvre la fenêtre si on est session ouverte.

Mais Windev plante.

Le service est planté de chez planté, figé sans rien renvoyé. Je dois même redémarrer le poste car l'arrêt du service ne se passe pas correctement.
Membre enregistré
3 846 messages
Popularité : +227 (347 votes)
Posté le 24 avril 2019 - 20:17
Bonjour,
La fonction iDestination devrait résoudre le problème
iDestination(iPDFGénérique, NomFichier)
iImprimeEtat(ETAT_MonEtat)


--
Il y a peut être plus simple, mais, ça tourne
Posté le 25 avril 2019 - 11:02
Bonjour,

J'utilise iDestination mais c'est l'utilisateur qui sélectionne son imprimante. Si sur le poste il y a pdfcreator par exemple et qu'il sélectionne pdf creator quand celui-ci est paramétré pour demander l'enregistrement du pdf ce qui est courant, on est dans une incohérence avec un service Windows, le problème c'est que Windev ne gère pas et plante, c'est sauvage.
Membre enregistré
3 846 messages
Popularité : +227 (347 votes)
Posté le 26 avril 2019 - 10:18
Bonjour,
Je suppose que la sélection se fait via iParamètre()
Quoiqu'il en soit, avant l'impression tu peux tenter un truc comme ça
sNomImprimanteSélectionnée est chaîne

sNomImprimanteSélectionnée=iInfoImprimante()
SI sNomImprimante="PDF Creator" ALORS //Ici, la chaîne correspondant à PDFCreator
iParamètre("Microsoft Print to PDF") //On force l'impression PDF "standard"
FIN
//Traitement de l'impression
....
//Retour à la config initiale
iParamètre(sNomImprimanteSélectionnée)


Par ailleurs, je suppose que tu es en W24 (pour les versions antérieures, ce n'est pas ici.) Si ce n'est pas le cas, as tu patché ta version avec le correctif d'impression ?

--
Il y a peut être plus simple, mais, ça tourne
Posté le 26 avril 2019 - 16:27
C'était un exemple PDF Creator.

Je parle de programmes commerciaux pas d'un petit programme que je fais pour moi. Donc il va être difficile de trouver des palliatifs à tout et ce n'est pas vraiment le but, sinon adieu le dev 10x plus vite... :D

Oui W24.
Membre enregistré
487 messages
Popularité : +24 (30 votes)
Posté le 27 avril 2019 - 12:22
slt
tu peux proposer a ton client la liste de ses imprimante
sliste est une chaîne
sliste = iListeImprimante()
POUR TOUTE chaîne sImpr de sliste SEPAREE PAR RC
ZoneRépétéeAjoute(ZR_imprimantes,sImpr)
FIN
ZoneRépétéeSelectMoins(ZR_imprimantes)

, et imprimer sur celle qu'il a choisit avec le code fourni par Voroltinquo

--
José
Membre enregistré
3 846 messages
Popularité : +227 (347 votes)
Posté le 27 avril 2019 - 12:33
Tout vérifier peut en effet s'avérer très long et la procédure risque de devenir caduque lors de la sortie d'un nouveau produit de création.
Toutefois, il s'avère que la plupart des "imprimantes" PDF comportent la chaîne "PDF" dans leur description.
On peut transformer le code écrit plus haut comme ceci :
sNomImprimanteSélectionnée est chaîne

sNomImprimanteSélectionnée=iInfoImprimante()
SI ChaineOccurence(sNomImprimanteSélectionnée,"PDF")>1 ALORS //On est dans le cas d'une imprimante PDF
iParamètre("Microsoft Print to PDF") //On force l'impression PDF "standard"
FIN


Quid des configurations "exotiques" (i.e. qui ne comportent pas "PDF".)

On peut contourner le problème en incluant leur nom dans un tableau initialisé "en dur" en début de programme (gtabPDFExotique par exemple) en début de programme. Soit à priori lorsque le problème est connu lors du développement, soit à posteriori dans le cas d'un retour client (création d'un patch.)

sNomImprimanteSélectionnée est chaîne
sImprimanteExotique est chaîne

sNomImprimanteSélectionnée=iInfoImprimante()
SI ChaineOccurence(sNomImprimanteSélectionnée,"PDF")>1 ALORS //On est dans le cas d'une imprimante PDF
iParamètre("Microsoft Print to PDF") //On force l'impression PDF "standard"
SINON
POUR TOUT sImprimanteExotique de gtabPDFExotique
SI sNomImprimanteSélectionnée=sImprimanteExotique ALORS
iParamètre("Microsoft Print to PDF") //On force l'impression PDF "standard"
RETOUR
FIN
FIN

*

--
Il y a peut être plus simple, mais, ça tourne