Envoi d'un code-barres à une imprimante Zebra à partir d'une application Java
-
25-10-2019 - |
Question
Je crée une application java qui récupère un userId à partir d'une base de données, la transforme en un code-barres, puis l'envoie à une imprimante. Je prévois d'utiliser une imprimante Zebra et je me demandais si quelqu'un a l'expérience de l'impression sur une imprimante Zebra à partir d'une application Java; si oui, pourriez-vous partager un peu de code rendre cela possible?
Merci à l'avance, Tumaini
La solution
Il y a deux façons de travailler avec les imprimantes Zebra. La première consiste à imprimer sur l'imprimante comme régulière. Java de base d'impression sont bien expliquées dans tutoriel officiel. Fin de la page sera traitée par l'imprimante comme fin de l'autocollant. L'inconvénient de cette approche est que toute la peinture doit être fait par des mains. C'est à dire. vous ne pouvez pas utiliser la capacité de codage à barres de l'imprimante interne.
La seconde est d'écrire des commandes ZPL directement à l'imprimante. Quelque chose comme ceci:
PrintService pservice = ... // acquire print service of your printer
DocPrintJob job = pservice.createPrintJob();
String commands = "^XA\n\r^MNM\n\r^FO050,50\n\r^B8N,100,Y,N\n\r^FD1234567\n\r^FS\n\r^PQ3\n\r^XZ";
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
Doc doc = new SimpleDoc(commands.getBytes(), flavor, null);
job.print(doc, null);
L'inconvénient est que vous devez apprendre ZPL - Programmation Zebra Langue. Bien qu'il soit assez simple, mais des choses telles que des images et des polices personnalisées pourrait vous faire des maux de tête. manuels de programmation sont disponibles gratuitement sur le site Zebra: Partie 1 et Partie 2 .
Autres conseils
Non chaque imprimante Zebra a ZPL II, mais vous pouvez utiliser EPL
EPL2 Guide de programmation pour Zebra
Exemple de code:
private static boolean printLabel(PrintService printService, String label) {
if (printService == null || label == null) {
System.err.println("[Print Label] print service or label is invalid.");
return false;
}
String czas = new SimpleDateFormat("d MMMMM yyyy'r.' HH:mm s's.'").format(new Date());
String command =
"N\n"+
"A50,50,0,2,2,2,N,\""+label+"\"\n"+
"B50,100,0,1,2,2,170,B,\""+label+"\"\n"+
"A50,310,0,3,1,1,N,\""+czas+"\"\n"+
"P1\n"
;
byte[] data;
data = command.getBytes(StandardCharsets.US_ASCII);
Doc doc = new SimpleDoc(data, DocFlavor.BYTE_ARRAY.AUTOSENSE, null);
boolean result = false;
try {
printService.createPrintJob().print(doc, null);
result = true;
} catch (PrintException e) {
e.printStackTrace();
}
return result;
}