Un petit lien qui pourrait t'interresser : https://blogs.pcsoft.fr/fr/impressio...t/108/read.awp
Le fait de passer par XPS permettrait d'utiliser les fonctions XPS du spooler
Un petit lien qui pourrait t'interresser : https://blogs.pcsoft.fr/fr/impressio...t/108/read.awp
Le fait de passer par XPS permettrait d'utiliser les fonctions XPS du spooler
Je viens d'essayer en faisant un pdf et ensuite d'imprimer le pdf
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 iDestination(iPDFGénérique,ComplèteRep(fRepExe()) + "PDF.pdf") iImprimeEtat("Etat_Test") iConfigure(Var_Nom_Imprimante) iDestination(iImprimante,"Impression") iImprimePDF(ComplèteRep(fRepExe()) + "PDF.pdf")
Le pdf se fait bien, mais pas l'impression du pdf et ça plante quelque chose, car les boucles suivantes ne font plus rien et le fais d’arrêter et démarrer le service ne change rien, il faut désinstaller et installer le service pour débloquer le fonctionnement du programme.
.
Ce que je pensais qui pourrait fonctionner :
- Créer le PDF (plusieurs pages avec par ex des données issues de ce que tu souhaites imprimer)
- L'envoyer au spooler avec les infos données par Voroltinquo.
Note1 : je ne suis pas chaud pour l'utilisation de XPS. Pas sûr que cette technologie survive bien longtemps...
Note2 : je n'ai pas du tout regardé les liens donnés par Voroltinquo.
Là je coince pour envoyer au spooler l'information lui disant d'imprimer le(s) pdf(s). Je trouve beaucoup de choses, mais jusque là rien qui fonctionne sous windev.- L'envoyer au spooler avec les infos données par Voroltinquo.
As-tu tenté l'impression via un fichier PRN (iFichierImprimante) cf Note : https://doc.pcsoft.fr/?3046074#NOTE0_6
Une autre piste, voir du côté de StartDoc/StartDocA cf https://docs.microsoft.com/en-us/win...ngdi-startdoca. Cette fonction doit être couplée avec CreateDC/CreateDCA https://docs.microsoft.com/en-us/win...ngdi-createdca.
Alors, je viens de tester avec :
ça fonctionne hors service (j'ai bien un fichier .prn), mais en service ça crash à l'ouverture de l'état.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 iDestination(iFichierImprimante,ComplèteRep(fRepExe())+ "fichier.prn") iImprimeEtat("Etat_Test")
C'est fou, car juste en remplaçant iDestination(iFichierImprimante,ComplèteRep(fRepExe())+ "fichier.prn") par iDestination(iPDFGénérique,ComplèteRep(fRepExe())+ "fichier.pdf") ça fonctionne en service et les pdf sont générés.
C'est galère ce problème qui n'est pas géré par PCSoft.
J'ai essayé autre truc, le service lance (lanceappli) un exe qui imprime l'état et là aussi ça crash.
Il ne faut plus passer par iImprime.
Ton service n'est là que pour préparer ce qu'il y a à imprimer
Les fonction d'impressions, du moins celles qui envoient vers l'imprimante, provoquent un conflit. Il n'y a pas que PC Soft qui ne gère pas cela. En parcourant différents forums, cela existe sous tous les environnements Micro$oft, sous Delphi ... pour ne citer que les plus courants.
En proposant les fichiers PRN, j'avais aussi pensé à LanceAppli
Le constat de ne pas utiliser les fonctions Windev semble logique et une bonne idée.
Pour le reste, c'est une autre histoire, car je ne sais absolument pas par où commencer pour imprimer mon état.
En faisant simple j'ai un service avec un état, quel code faire ensuite ?
J'ai fait des essais avec ce que je trouve sur le net, autant dire beaucoup de théorie (trop), mais presque rien de concret. Il existe visiblement plusieurs approches comme le montre le schéma :
Mais sans expérience ni exemple, difficile de s'y retrouver. J'ai vu DEVMODE, DC mais ce sont des informations éparpillées dont les liens entre elles m'échappent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 hdPrint, Ret sont des entiers PrinterName est une chaîne ASCIIZ sur 512 = pPrinterName // nom de l'imprimante DOCINFO est une Structure pDocName est une chaîne pOutputFile est une chaîne pDatatype est une chaîne FIN pp_MyDocInfo est DOCINFO pp_MyDocInfo:pDocName = "Mon document" pp_MyDocInfo:pOutputFile = "" pp_MyDocInfo:pDatatype = "" // Ouverture imprimante et handle Ret = API( winspool_drv, "OpenPrinterA" , &PrinterName, &hdPrint, Null) IF Ret = 0 THEN Erreur("openprinter erreur") RENVOYER Faux END nResult est un entier sResult est une chaîne = "BONJOUR" Ret = API( winspool_drv, "StartDocPrinterA", hdPrint, 1, &pp_MyDocInfo) IF Ret = 0 THEN Erreur("StartDocPrinterA erreur") RENVOYER Faux END Ret = API( winspool_drv, "StartPagePrinter", hdPrint) Ret = API( winspool_drv, "WritePrinter", hdPrint, sResult, Taille(sResult), &nResult) Ret = API( winspool_drv, "EndPagePrinter", hdPrint) Ret = API( winspool_drv, "EndDocPrinter", hdPrint) API( winspool_drv, "ClosePrinter" , hdPrint)
Ce code envoie un job à l'imprimante, mais rien ne s'imprime.
As-tu essayé de passer "EMF" ou "RAW" dans ton pDataType ?
Etant bloqué côté API, j'ai fait des tests avec mon service Windev et par hasard, je me suis aperçu que le problème semble se présenter lorsque le service est lancé à partir d'une connexion RDP. En me connectant à la VM en Teamviewer ça fonctionne. Je n'ai pas d'explication, c'est juste un constat.
C'est peut-être un restriction due justement au TSE.
A regarder dans l'aide, voire contacter le ST...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager