#!/usr/bin/env python # -*- coding: iso-8859-15 -*- """Classe de communication avec l'imprimante HP9500""" import socket class hp9500: "Classe de communication avec la HP9500" #\x1B est le caractere d'échappement échap. UEL="\x1b%-12345X" __douille=None def __init__(self,hostname="laserjet.adm.crans.org",port=9100): """Appelle à l'initalisation hostname : nom d'hôte de l'imprimante port : le port de communication avec l'imprimante """ self.hostname=hostname self.port=port def cx_open(self): """Ouvre la connexion vers l'imprimante""" if not self.__douille: self.__douille = socket.socket(socket.AF_INET, socket.SOCK_STREAM,socket.IPPROTO_TCP) self.__douille.connect((self.hostname, self.port)) #delai d'attente pour la réception des données self.__douille.settimeout(10) self.__douille.sendall(self.UEL+"@PJL\n") def cx_close(self): """Ferme la connexion vers l'imprimante""" if self.__douille: self.__douille.sendall(self.UEL+"\n") self.__douille.close() self.__douille=None def pjl_command(self,command): """Cette fonction envoie la commande command à l'imprimante Elle doit être une commande pjl sans @PJL devant Paramètres : command : la commande à envoyer à l'imprimante """ if not self.__douille: self.cx_open() command=str(command) command="@PJL " + command + "\n" self.__douille.sendall(command) #debug print command def pjl_read(self, display=0): """Cette fonction lit le retour donné par l'imprimante Elle retourne un message commençant par \"ERREUR :\" en cas d'échec Elle affiche le message si la variable display est vraie """ if not self.__douille: return "ERREUR : la connexion vers l'imprimante n'est pas ouverte" message="" caract=' ' while caract: try: caract=self.__douille.recv(1) message+=caract except: caract='' message+='\n' if display: print message return message def write_file(self,filename): """Cette fonction envoie un fichier à l'imprimante. Elle est utile pour envoyer une série de commande ou un fichier postscript. Arguments : filename : nom du fichier à envoyer """ if not self.__douille: return "ERREUR : la connexion vers l'imprimante n'est pas ouverte" fichier=open(filename) self.__douille.sendall(fichier.read()) fichier.close() def write_postscript(self,filename, name, display): """Cette fonction envoie un fichier postscript à l'imprimante. Elle envoie avant le ENTER LANGUAGE et le EOJ a la fin. Arguments : filename : nom du fichier à envoyer name : le nom du job display : ce qu'on met sur l'afficheur """ if not self.__douille: return "ERREUR : la connexion vers l'imprimante n'est pas ouverte" self.pjl_command('JOB DISPLAY=\"%s\" NAME=\"%s\"' % (display,name)) self.pjl_command('ENTER LANGUAGE = POSTSCRIPT ') self.write_file(filename) self.__douille.sendall(self.UEL+"@PJL EOJ NAME=\"%s\"\n" % (name)) def __del__(self): """Destructeur : ferme la connexion""" self.cx_close()