From 71551f504b1f67902806a699909c9c4590679efb Mon Sep 17 00:00:00 2001 From: bobot Date: Fri, 13 Jan 2006 02:37:46 +0100 Subject: [PATCH] dplacer dans inutiles et dcommit car n'est plus utilis dans le nouveau systme d'impression darcs-hash:20060113013746-9e428-a945e4bc0e422b5b22002712ef3b653d77736e1b.gz --- impression/couts.py | 192 -------------------------------------------- 1 file changed, 192 deletions(-) delete mode 100755 impression/couts.py diff --git a/impression/couts.py b/impression/couts.py deleted file mode 100755 index 9f50bc28..00000000 --- a/impression/couts.py +++ /dev/null @@ -1,192 +0,0 @@ -#!/usr/bin/env python -# -*- coding: iso-8859-15 -*- - -# Utilisé par /var/www/impression/analyse.py -# et /usr/scripts/impression/crans_backend.py -# Écrit initial par Benoit -# modifié par Brice DUBOST et Benoit -# Licence : GNU General Public Licence, version 2 - -import locale -locale.setlocale(locale.LC_ALL, 'fr_FR') - -import commands, os, sys, tempfile - -sys.path.append('/usr/scripts/gestion') -from config import impression - - -class cout: - """Classe pour le calcul du cout d'une impression et de sa mise en page""" - c_total=0 # en centimes - c_total_euros=0 # en euros - total_noir=0 - total_couleur=0 - faces=1 - pages=1 - nb_copie=1 - taille="" - erreur="" - recto_v="None" - media="" - str_cout="" - From=u"Imprimante <%s>" % impression.From_imprimante - - def __init__(self, fichierps, media="", mode_couleur="Couleur", recto_v="None", taille="A4", nb_copie=1): - """ * fichierps est le fichier PostScript (ou pdf) à analyser - * media vaut transparent le cas écheant (dans ce cas taille=A4) - * mode_couleur = Couleur pour traiter en couleur - * recto_v = Recto si l'on ne desire pas un recto-verso - * taille vaut A3 ou A4 selon le bac choisi - * nb_copie est le nombre de copies désirées - Le PostScript a toujours priorité sur ces paramètres - """ - - # Vérification du format de fichier. - try: - en_tete=open(fichierps).read(4) - except: - self.erreur="Le fichier ne peut etre ouvert" - return - # On vérifie que ce que l'on nous a envoyé est bien un PS ou un PDF - if en_tete!='%!PS' and en_tete!='%PDF': - self.erreur="Format de fichier non supporte" - return - - self.nb_copie=nb_copie - # on compte le nb de copies et on enlève les balises pour ne pas recalculer - nb_copie_ps=0 - original = open(fichierps) - tmpfichier = tempfile.NamedTemporaryFile() - fichier = tmpfichier.name - fic = tmpfichier.file - ligne = original.readline() - while ligne: - if ligne.startswith('%%BeginFeature: *PageSize') or ligne.startswith('%%BeginFeature: *PageRegion'): - taille=ligne.split(' ')[-1].strip() - if ligne.startswith('%%BeginFeature: *Duplex'): - recto_v=ligne.split(' ')[-1].strip() - if ligne.startswith('%%BeginFeature: *ColorasGray True'): - mode_couleur="GRAY" - if ligne.startswith('%%BeginFeature: *InputSlot Transparency'): - media="transparent" - taille='A4' - if ligne.find('%RBIBeginNonPPDFeature: *NumCopies') != -1: - nb_copie_ps=int(ligne.split(' ')[-1]) - while ligne.find('%RBIEndNonPPDFeature') == -1: - ligne = original.readline() - ligne = original.readline() - fic.write(ligne) - ligne = original.readline() - fic.close() - original.close() - - # Le PS a priorité - if nb_copie_ps: - self.nb_copie=nb_copie_ps - - self.taille=taille - if not (taille=="A4" or taille=="A3"): - self.erreur="Taille invalide" - del tmpfichier - return - - if recto_v == "None" or recto_v == "Recto": - recto_v="Recto" - else: - recto_v="Recto-verso" - - self.recto_v=recto_v - - if (mode_couleur == "Couleur"): - device = "png16m" - else: - device = "pnggray" - - if (self.taille == "A3"): - # Une feuille A3 couvre 2 fois plus de surface que A4 - c_taille = impression.c_a3 - cout_coul = 2*impression.c_coul - cout_noir = 2*impression.c_noir - else: - cout_coul = impression.c_coul - cout_noir = impression.c_noir - if media == "transparent": - c_taille = impression.c_trans - self.media="transparent" - if recto_v == "Recto-verso": - self.erreur="Recto-verso invalide avec transparent" - del tmpfichier - return - else: - c_taille = impression.c_a4 - - (status,rep) = commands.getstatusoutput("nice -n 10 gs -sDEVICE=%s -r100 -dBATCH -dNOPAUSE -dSAFER -dPARANOIDSAFER -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 -sOutputFile='%s' -q '%s'" % (device, fichier+"%d.png", fichier) ) - del tmpfichier - - if (status != 0): - self.erreur="ERREUR : Ghostscript : Fichier Postscript invalide.\n" - self.erreur+= rep - # On détaille l'erreur dans le mail et - # il faut stopper l'impression. - return - - (status, liste) = commands.getstatusoutput("ls '%s'*.png" % fichier) - if status: - self.erreur="ERREUR : Fichier invalide. Aucun png n'a été créé.\n" - else: - if (mode_couleur == "Couleur"): - remplissage = [0, 0, 0, 0, 0] # C, M, J, N, nombre de pages - for file in liste.split("\n"): - resultats = commands.getoutput("/usr/scripts/impression/percentcolour '%s'" % (file) ) - l_resultats = resultats.split(":") - for i in [0, 1, 2, 3]: - remplissage[i] += float(l_resultats[i])*float(l_resultats[4]) - remplissage[4] += float(l_resultats[4]) - self.total_noir = remplissage[3] - self.total_couleur = sum(remplissage[0:3]) - self.faces = int(remplissage[4]) - if (recto_v == "Recto"): - self.pages = self.faces # nb de pages par copies - else: - self.pages = int(self.faces/2.+0.5) - if self.total_couleur > 0: - self.c_total = c_taille*self.pages+(impression.c_tambour_coul+impression.c_tambour_noir)*self.faces+cout_noir*self.total_noir+cout_coul*self.total_couleur - else: # Pas de couleur, malgre l'indication - self.c_total = c_taille*self.pages+impression.c_tambour_noir*self.faces+cout_noir*self.total_noir - else: - remplissage = [0, 0] # Noir, nombre de pages - for file in liste.split("\n"): - resultats = commands.getoutput("/usr/scripts/impression/percentblack '%s'" % (file)) - l_resultats = resultats.split(":") - remplissage[0] += float(l_resultats[0])*float(l_resultats[1]) - remplissage[1] += float(l_resultats[1]) - self.total_noir = remplissage[0] - self.faces = int(remplissage[1]) - if (recto_v == "Recto"): - self.pages = self.faces # nb de pages par copies - else: - self.pages = int(self.faces/2.+0.5) - self.c_total = c_taille*self.pages+impression.c_tambour_noir*self.faces+cout_noir*self.total_noir - - self.c_total = int(self.nb_copie*self.c_total+impression.fact+0.5) # arrondi et facture - self.c_total_euros=float(self.c_total)/100 - if (self.c_total < 100): - self.str_cout = "%s centimes d'euros" % (self.c_total) - else : - self.str_cout = "%s euros" % (self.c_total_euros) - if commands.getoutput("rm -f '%s'*.png" % fichier): - self.erreur="ERREUR : Impossible d'enlever les images.\n" - - - def remplis_template(self,template): - """Cette fonction rempli le template avec les bonnes valeurs""" - - if self.erreur=="Taille invalide": - taille="Le format de papier que vous avez demandé n'est pas valide" - elif self.media=="transparent": - taille="transparent A4" - else: - taille=self.taille - - return template % { 'noir' : self.total_noir, 'couleur' : self.total_couleur, 'faces' : self.faces, 'pages' : self.pages, 'copies' : self.nb_copie, 'taille' : taille, 'prix' : self.str_cout}