dimanche 8 février 2015

Imprimante Zebra USB, ZPL, CUPS et Python

Dans l'article précédent "Imprimante Zebra USB, ZPL et CUPS", nous avions vu comment:
  1. Créer un fichier de démonstration demo.zpl (cfr le projet PythonPcl de MCHobby)
  2. Comment configurer une "Printer Queue" en RAW.
  3. Utilise l'utilitaire "lp" pour envoyer le contenu du fichier zpl vers la Zebra.
Si vous n'avez pas encore lu cette article, je vous conseille vivement d'aller y faire un tour. Car la configuration de la queue en RAW est capital pour le bon fonctionnement.

Maintenant, ce qui serait bien, c'est de pouvoir déclencher cette tâche d'impression à partir de Python :-)

Rappelons que le but est de contrôler l'impression des étiquettes à coller à l'aide du langage de contrôle d'impression ZPL (Zebra Print Language) 

Python et Cups
Normalement, vous trouverez CUPS installer sur la plupart des distributions Linux.
Si cela n'était pas le cas, vous pouvez encoder la commande suivante:

sudo apt-get install python-cups python-pip python-dev

L'installation de python-pip n'est vraiment pas indispensable mais c'est un utilitaire très utile.

Lister les imprimantes Cups
Le petit script suivant permet de lister les imprimantes CUPS disponible sur le système.

import cups
conn = cups.Connection()
printers = conn.getPrinters()

for printer in printers:
     print printer, printers[printer]["device-uri"]

ce qui produit le résultat suivant:
GG-P3010 socket://192.168.1.225:9116
zebra-raw usb://Zebra%20Technologies/ZTC%20LP%202824%20Plus?serial=36J141701319
HP-P3010 hp:/net/HP_LaserJet_P3010_Series?zc=NPI188F5A

Comme vous pouvez le noter, nous retrouvons la file d'impression (printer queue) zebra-raw que nous avons créé dans l'article précédent.

Imprimer le fichier demo.zpl
Cette fois, utilisons le cups sous Python pour envoyer le fichier zpl sur la Zebra.

import cups
conn = cups.Connection()

conn.printFile( "zebra-raw", '/home/dom/PythonPcl/test/test-printer/zebra/demo.zpl', 'zebra demo', {} )

et voila! Pour information, la fonction printFile retourne un entier identifiant la job d'impression.

Aucun commentaire: