Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

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, ...)

Bloc de code
<AgentImpDivalty>	

<open>ZBR	

<p>^XA			
 […]
<p>^XZ

<endpage>		
<close>		

Le paramètre « AgentImpDivalty » indique à l’agent qu’il s’agit d’une impression en mode texte et ajoute l’envoi de «$0d $0a » après chaque ligne.

Ce paramètre “open” permet de specifier le code format pour le spool

Données pour l’impression

 

Balise de fin des données

Fermeture

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

Bloc de code
breakoutModewide
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://www.zebra.com/content/dam/zebra_new_ia/en-us/manuals/printers/common/programming/zpl-zbi2-pm-en.pdf

 

https://fr.wikipedia.org/wiki/Zebra_(informatique)

https://en.wikipedia.org/wiki/Zebra_(programming_language)