Fichier PRN
L'exemple ci-dessous précise le format nécessaire au fonctionnement du fichier texte (format PRN) qui peut être déposé directement dans une file d'attente pour interprétation par un agent d'impression.
Ce fichier peut être généré par une application Divalto auquel cas l'emplacement de la file d'attente peut être déterminé à l'aide de la fonction Diva « GetCheminDesRepertoiresAgentImp ».
Ce type de fichier permet d'imprimer directement sur des imprimantes qui supportent ce format (Imprimante étiquettes, ...)
exemple de création d’un programme diva qui génère un fichier prn zebra pour l’agent d’impression
On peut créer un programme diva pour générer un fichier prn pour l’agent d’impression avec des commandes pour les imprimantes zebra
ce programme montre comment
trouver le chemin du répertoire pour l’agent d’impression
comment générer un nom de fichier unique de façon simple
comment écrire le contenu du fichier prn
module "yagentimp.dhop" ;il est livree a partir de la 409a function int TestEcritureZebra(wcommentaire) 1 wcommentaire A 1 AgentImpSousRep 64 1 formatspool 4 1 RepAgentImpTmp 256 1 fic 256 1 fd L 1 err 6,0 1 lgecrite L 1 cr 2 = $0D & $0A 1 wuser 20 beginf formatspool = system.Zform formatspool = modify($00,' ' ,formatspool) AgentImpSousRep = GetSubDirectoryAgentImpForPrnFile(formatspool) ;fc a partir de la 410c RepAgentImpTmp = GetDirectoryAgentImpForPrnFile(AgentImpSousRep) ;get repetoire de dépot pour l'agent diva wuser= system.user wuser = modify($00,' ' ,wuser) wuser = modify(':','_',wuser) wuser = modify('.','_',wuser) wuser = modify('<','_',wuser) wuser = modify('>','_',wuser) wuser = modify('|','_',wuser) wuser = modify(',','_',wuser) wuser = modify('-','_',wuser) wuser = modify('"','_',wuser) wuser = modify("'",'_',wuser) ;faut créer un fichier unique "repertoire agendiva \ zebra + user + AAAAMMJJHHMMSS + tick count .prn" fic = left(RepAgentImpTmp) & "\zebra" & left(wuser) & left(time(7)) & tostring(WinGetTickCount) & ".prn" fd = WinCreateFile(left(fic),GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,0,0) if fd = -1 err = winGetLasterror freturn err endif ;c'est un prn en clair AgentImpDivalty ( <AgentImpDivalto> c'est pour dire que le fichier est compressé mais on s'en sert pas ) ; ;<open> et le code format pour le spool => ca permet de séléctionner l'imprimante sur le poste client ;si il y a que <open> et rien derriere alors l'impression sort sur l'imprimante par défaut du poste (attention c'est le chapitre Printer-code format pour le spool ) ; (ca n'a rien a voir avec les chapitres GraphPrinter ) ;puis apres le <open>xxx on y ajoute des infos comme l'utilisateur, la date etc , c'est pour le programme diva d'affichage ;des fichiers en attente comme xdivaltoagentimpadmin.dhop winwritefile(fd,"<AgentImpDivalty><open>" & left(formatspool) & left(GetSuiteInfosAgentImpForPrnFile(wcommentaire)) & CR ,lgecrite) ;exemple de code pour la zebra pour ecrire wikipedia ;https://fr.wikipedia.org/wiki/Zebra_(informatique) ;https://en.wikipedia.org/wiki/Zebra_(programming_language) ;<p>^XA ;<p>^LH30,30 ;<p>^FO20,10 ;<p>^ADN,90,50 ;<p>^AD^FDWikipedia^FS ;<p>^XZ ;exemple provenant de http://labelary.com/viewer.html que j'ai adapté ;^XA ;^MMT ;^PW820 ;^LL1280 ;^LS0 ;^FT47,45^AAN,18,10^FH\^FDDate impression :^FS ;^FT260,46^A0N,23,21^FH\^FD31/12/2019^FS ;^FO50,60^GB666,0,6^FS ;^FT41,95^A0N,28,26^FH\^FDChauffeau eau 1 stock\82 prix net^FS ;^FT41,129^A0N,28,26^FH\^FD^FS ;^FO50,145^GB666,0,2^FS ;^BY2,3,75^FT15,250^BCN,,N,N ;^FD>;>824>61CEST1^FS ;^FT50,275^A0N,25,24^FH\^FD\28241\29CEST1^FS ;^FO50,425^GB666,0,6^FS ;^BY160,160^FT125,670^BXN,5,200,0,0,1,~ ;^FH\^FD\28REF\29CEST1/%\28SREF1\29/%\28SREF2\29/%\28LOT\29/%\28SERIE\29/%\28DLUO\29/%^FS ;^FO400,425^GB0,310,3^FS ;^FT420,470^A0N,25,24^FH\^FDL/l/h^FS ;^FT540,470^A0N,25,24^FH\^FD0.8 / 0.7 / 1.8^FS ;^FT420,500^A0N,25,24^FH\^FDPoids^FS ;^FT540,500^A0N,25,24^FH\^FD55^FS ;^FT420,530^A0N,25,24^FH\^FDQte recep.^FS ;^FT540,530^A0N,25,24^FH\^FD3.75^FS ;^FT420,560^A0N,25,24^FH\^FDUnit\82 recep.^FS ;^FT540,560^A0N,25,24^FH\^FDPAL^FS ;^FT420,660^A0N,40,40^FH\^FD1^FS ;^FT420,700^A0N,40,40^FH\^FDZB1 A T1 N1^FS ;^FO50,730^GB666,0,6^FS ;^FT50,780^A0N,25,24^FH\^FDCode fourn.^FS ;^FT190,780^A0N,25,24^FH\^FDF0000001^FS ;^FT50,820^A0N,25,24^FH\^FDNom fourn.^FS ;^FT190,820^A0N,25,24^FH\^FD$ISOLAVA FRANCE TEST^FS ;^FT50,860^A0N,25,24^FH\^FDDes. fourn.^FS ;^FT190,860^A0N,25,24^FH\^FDchauffe eau isol^FS ;^FO50,890^GB666,0,6^FS ;^FT50,930^A0N,25,24^FH\^FDCode client^FS ;^FT200,930^A0N,25,24^FH\^FDC0000015^FS ;^FT682,930^A0N,25,24^FH\^FD^FS ;^FT50,970^A0N,25,24^FH\^FDNom client^FS ;^FT200,970^A0N,25,24^FH\^FDCASSET^FS ;^FT50,1010^A0N,25,24^FH\^FDQuantit\82^FS ;^FT200,1010^A0N,25,24^FH\^FD15^FS ;^FT50,1050^A0N,25,24^FH\^FDUnit\82^FS ;^FT200,1050^A0N,25,24^FH\^FDUNIT^FS ;^FT50,1090^A0N,25,24^FH\^FDR\82f. commande^FS ;^FT200,1090^A0N,25,24^FH\^FD^FS ;^BY2,3,75^FT468,1020^BCN,,N,N ;^FD>;>8 2626 ^FS ;^FT450,1050^A0N,25,24^FH\^FDN\F8 commande client^FS ;^FT460,1080^A0N,25,24^FH\^FD 2626 ^FS ;^FT50,1130^A0N,25,24^FH\^FDCode affaire^FS ;^FT200,1130^A0N,25,24^FH\^FD^FS ;^PQ1,0,1,Y^XZ ;chaque ligne doit commencée par <p> et la suite de la ligne de texte , c'est les commandes qui seront envoyées a l'imprimante ;c'est la partie variable ;si vous avez un fichier deja générer alors il faudra lire chaque ligne de ce fichier et ajouter "<p>" devant ;et finir la ligne par $0D $0A ;a noter que la fc winReadFileRecord permet de lire un fichier texte en gérant les saut de ligne , voir la doc diva sur winReadFileRecord ; ;1 st x ;1 nblus L ;1 finfic L ;1 art 4096 ;par exemple si on sait que les lignes ne dépasse pas 4k ;do ; st = WinReadFileRecord(fic,art,nblus,finfic,8) ;while finfic = FALSE and st = TRUE ; art = "<p>" & art ; winwritefile(fd,left(art) & CR,lgecrite) ;wend winwritefile(fd,"<p>^XA" & CR ,lgecrite) winwritefile(fd,"<p>^MMT" & CR ,lgecrite) winwritefile(fd,"<p>^PW820" & CR ,lgecrite) winwritefile(fd,"<p>^LL1280" & CR ,lgecrite) winwritefile(fd,"<p>^LS0" & CR ,lgecrite) winwritefile(fd,"<p>^FT47,45^AAN,18,10^FH\^FDDate impression :^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT260,46^A0N,23,21^FH\^FD31/12/2019^FS" & CR ,lgecrite) winwritefile(fd,"<p>^FO50,60^GB666,0,6^FS" & CR ,lgecrite) winwritefile(fd,"<p>^FT41,95^A0N,28,26^FH\^FDChauffeau eau 1 stock\82 prix net^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT41,129^A0N,28,26^FH\^FD^FS" & CR,lgecrite) winwritefile(fd,"<p>^FO50,145^GB666,0,2^FS" & CR,lgecrite) winwritefile(fd,"<p>^BY2,3,75^FT15,250^BCN,,N,N" & CR,lgecrite) winwritefile(fd,"<p>^FD>;>824>61CEST1^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,275^A0N,25,24^FH\^FD\28241\29CEST1^FS" & CR,lgecrite) winwritefile(fd,"<p>^FO50,425^GB666,0,6^FS" & CR,lgecrite) winwritefile(fd,"<p>^BY160,160^FT125,670^BXN,5,200,0,0,1,~" & CR,lgecrite) winwritefile(fd,"<p>^FH\^FD\28REF\29CEST1/%\28SREF1\29/%\28SREF2\29/%\28LOT\29/%\28SERIE\29/%\28DLUO\29/%^FS" & CR,lgecrite) winwritefile(fd,"<p>^FO400,425^GB0,310,3^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT420,470^A0N,25,24^FH\^FDL/l/h^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT540,470^A0N,25,24^FH\^FD0.8 / 0.7 / 1.8^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT420,500^A0N,25,24^FH\^FDPoids^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT540,500^A0N,25,24^FH\^FD55^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT420,530^A0N,25,24^FH\^FDQte recep.^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT540,530^A0N,25,24^FH\^FD3.75^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT420,560^A0N,25,24^FH\^FDUnit\82 recep.^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT540,560^A0N,25,24^FH\^FDPAL^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT420,660^A0N,40,40^FH\^FD1^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT420,700^A0N,40,40^FH\^FDZB1 A T1 N1^FS" & CR,lgecrite) winwritefile(fd,"<p>^FO50,730^GB666,0,6^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,780^A0N,25,24^FH\^FDCode fourn.^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT190,780^A0N,25,24^FH\^FDF0000001^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,820^A0N,25,24^FH\^FDNom fourn.^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT190,820^A0N,25,24^FH\^FD$ISOLAVA FRANCE TEST^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,860^A0N,25,24^FH\^FDDes. fourn.^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT190,860^A0N,25,24^FH\^FDchauffe eau isol^FS" & CR,lgecrite) winwritefile(fd,"<p>^FO50,890^GB666,0,6^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,930^A0N,25,24^FH\^FDCode client^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT200,930^A0N,25,24^FH\^FDC0000015^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT682,930^A0N,25,24^FH\^FD^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,970^A0N,25,24^FH\^FDNom client^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT200,970^A0N,25,24^FH\^FDCASSET^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,1010^A0N,25,24^FH\^FDQuantit\82^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT200,1010^A0N,25,24^FH\^FD15^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,1050^A0N,25,24^FH\^FDUnit\82^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT200,1050^A0N,25,24^FH\^FDUNIT^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,1090^A0N,25,24^FH\^FDR\82f. commande^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT200,1090^A0N,25,24^FH\^FD^FS" & CR,lgecrite) winwritefile(fd,"<p>^BY2,3,75^FT468,1020^BCN,,N,N" & CR,lgecrite) winwritefile(fd,"<p>^FD>;>8 2626 ^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT450,1050^A0N,25,24^FH\^FDN\F8 commande client^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT460,1080^A0N,25,24^FH\^FD 2626 ^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT50,1130^A0N,25,24^FH\^FDCode affaire^FS" & CR,lgecrite) winwritefile(fd,"<p>^FT200,1130^A0N,25,24^FH\^FD^FS" & CR,lgecrite) winwritefile(fd,"<p>^PQ1,0,1,Y^XZ" & CR,lgecrite) ;et on fini toujours le fichier par ce code ;puis on ferme le l"édition winwritefile(fd,"<endpage>" & CR,lgecrite) ;et on ferme l'impression winwritefile(fd,"<close>" & CR,lgecrite) winclosehandle(fd) freturn 0 endf main ;exemple si on veut que le programme force un modèle d'impression (ce qui pose pb si on veut changer le modèle) ;sinon on prend le modele courant , celui du choix du menu ;HSelectPrinter("XXX", MODELE_IMPERATIF, TRUE) TestEcritureZebra("simple test zebra") programexit
l'exemple donne ce résultat , et on lire le site de wikipedia sur les zebra ou le site de zebra
https://fr.wikipedia.org/wiki/Zebra_(informatique)
https://en.wikipedia.org/wiki/Zebra_(programming_language)