dplacer dans inutiles et dcommit car n'est plus utilis dans le nouveau
systme d'impression darcs-hash:20060113013746-9e428-a945e4bc0e422b5b22002712ef3b653d77736e1b.gz
This commit is contained in:
parent
1b0bfc87d5
commit
71551f504b
1 changed files with 0 additions and 192 deletions
|
@ -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}
|
Loading…
Add table
Add a link
Reference in a new issue