[lib/impression] on déplace tout dans impression
Ignore-this: f8064e9bceb8818911dcdaf73cb9f0ec darcs-hash:20090518184018-bd074-ae9530b4d2aba374d34d5a9e26e422c649d9e8db.gz
This commit is contained in:
parent
9e2cd076f5
commit
788012f862
7 changed files with 32 additions and 67 deletions
|
@ -1,180 +0,0 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: iso-8859-15 -*-
|
||||
# #############################################################
|
||||
# ..
|
||||
# .... ............ ........
|
||||
# . ....... . .... ..
|
||||
# . ... .. .. .. .. ..... . ..
|
||||
# .. .. ....@@@. .. . ........ .
|
||||
# .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. ....
|
||||
# .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... ....
|
||||
# @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. ..
|
||||
# .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. .....
|
||||
# ...@@@.... @@@ .@@.......... ........ ..... ..
|
||||
# . ..@@@@.. . .@@@@. .. ....... . .............
|
||||
# . .. .... .. .. . ... ....
|
||||
# . . .... ............. .. ...
|
||||
# .. .. ... ........ ... ...
|
||||
# ................................
|
||||
#
|
||||
# #############################################################
|
||||
"""
|
||||
cout.py
|
||||
|
||||
Fonctions pour calculer le prix d'une impression
|
||||
(ne calcul que le prix de l'encre.
|
||||
retourne le prix pour une copie en A4)
|
||||
|
||||
Copyright (c) 2006 by www.crans.org
|
||||
"""
|
||||
|
||||
# Début : Ajout log pour réestimer les coûts
|
||||
import time
|
||||
# Fin
|
||||
import sys, tempfile, os, commands, shutil, syslog, stat
|
||||
sys.path.append('/usr/scripts/gestion')
|
||||
import config
|
||||
from crans.utils import QuoteForPOSIX as escapeForShell
|
||||
def __init__():
|
||||
pass
|
||||
|
||||
# ########################################################### #
|
||||
# CONSTANTES #
|
||||
# ########################################################### #
|
||||
#
|
||||
#
|
||||
import config
|
||||
COUT_UNITE_COULEUR = config.impression.c_coul
|
||||
COUT_UNITE_NOIRE = config.impression.c_noir
|
||||
COUT_PASSAGE_TAMBOUR_NOIR = config.impression.c_tambour_noir
|
||||
COUT_PASSAGE_TAMBOUR_COULEUR = config.impression.c_tambour_coul
|
||||
|
||||
# Début : Ajout log pour réestimer les coûts
|
||||
FICHIER_LOG="/var/log/log_couts/estimations"
|
||||
# Fin
|
||||
|
||||
# ########################################################### #
|
||||
# ERREURS #
|
||||
# ########################################################### #
|
||||
#
|
||||
#
|
||||
class FichierInvalide(Exception):
|
||||
"""
|
||||
Si le fichier est invalide
|
||||
"""
|
||||
def __str__(self):
|
||||
return self.args[0]
|
||||
def file(self):
|
||||
try:
|
||||
return self.args[1]
|
||||
except:
|
||||
return "n/a"
|
||||
|
||||
def try_command(cmd, tmp_rep, error_msg):
|
||||
u""" Execute a command, log output and raise exception if it fails. """
|
||||
|
||||
(status, rep) = commands.getstatusoutput(cmd)
|
||||
if status:
|
||||
syslog.openlog('impression')
|
||||
syslog.syslog(syslog.LOG_ERR, 'command failed (%d): %s' % (status, cmd))
|
||||
for l in rep.split('\n'):
|
||||
syslog.syslog(syslog.LOG_ERR, 'output: %s' % l)
|
||||
syslog.closelog()
|
||||
shutil.rmtree(tmp_rep)
|
||||
raise ValueError, error_msg % status
|
||||
|
||||
# ########################################################### #
|
||||
# PRIX #
|
||||
# ########################################################### #
|
||||
def base_prix(path_pdf_file, color=False):
|
||||
u""" Calcul le prix d'une impression couleur ou noir et blanc sur papier A4 """
|
||||
|
||||
# nom_rep seras le dossier dans tmp ou tous les fichier créé par
|
||||
# convert seront entreposé
|
||||
nom_rep = tempfile.mkdtemp(prefix='tmpimpr')
|
||||
nom_png = "%s/convert.png" % nom_rep # Nom prefixe et chemin des png créé par convert
|
||||
escaped_path_pdf_file = escapeForShell(path_pdf_file)
|
||||
escaped_path_ps_file = escapeForShell(path_pdf_file + ".ps")
|
||||
error_msg = "ERREUR %%d : Fichier invalide. Aucun %s cree."
|
||||
if color:
|
||||
error_msg += " (couleurs)"
|
||||
gs_device = "png16m"
|
||||
nb_composante = 4 # Cyan, Magenta, Jaune, Noir
|
||||
percent_program = "percentcolour"
|
||||
else:
|
||||
gs_device = "pnggray"
|
||||
nb_composante = 1 # Noir
|
||||
percent_program = "percentblack"
|
||||
|
||||
if not os.access(path_pdf_file + ".ps",os.F_OK) or \
|
||||
os.stat(path_pdf_file)[stat.ST_MTIME] > os.stat(path_pdf_file + ".ps")[stat.ST_MTIME]:
|
||||
# Convertit les pdf en ps
|
||||
try_command("nice -n 5 pdftops %s %s" % (escaped_path_pdf_file,
|
||||
escaped_path_ps_file),
|
||||
nom_rep,
|
||||
error_msg % "ps")
|
||||
|
||||
# Convertit les ps en png (il est néscessaire de passer par un ps
|
||||
# car ghostscript refuse certain pdf)
|
||||
try_command("nice -n 5 gs -sDEVICE=%s -r30 -dBATCH -dNOPAUSE -dSAFER -dPARANOIDSAFER -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 -sOutputFile=%s%%d -q %s" %
|
||||
(gs_device, nom_png, escaped_path_ps_file),
|
||||
nom_rep,
|
||||
error_msg % "png")
|
||||
|
||||
# Récupère la liste des fichiers
|
||||
list_filepng=os.listdir(nom_rep)
|
||||
# Calcule le nombre de pixel
|
||||
remplissage = [0] * (nb_composante + 1) # couleurs (N ou CMJN), nombre de pages
|
||||
for fichier in list_filepng:
|
||||
resultats = commands.getoutput("nice -n 5 /usr/scripts/impression/%s %s/%s" % (percent_program, nom_rep, fichier))
|
||||
l_resultats = resultats.split(":")
|
||||
for i in range(nb_composante):
|
||||
remplissage[i] += float(l_resultats[i])*float(l_resultats[nb_composante])
|
||||
remplissage[nb_composante] += float(l_resultats[nb_composante])
|
||||
|
||||
# suppression des fichiers temporaires
|
||||
shutil.rmtree(nom_rep)
|
||||
|
||||
total_noir = remplissage[nb_composante-1]
|
||||
total_couleur = sum(remplissage[0:nb_composante-1])
|
||||
faces = int(remplissage[nb_composante])
|
||||
|
||||
if total_couleur > 0:
|
||||
c_total = ((COUT_PASSAGE_TAMBOUR_COULEUR + COUT_PASSAGE_TAMBOUR_NOIR) * faces # passage dans les toners
|
||||
+ COUT_UNITE_NOIRE * total_noir # cout encre noire
|
||||
+ COUT_UNITE_COULEUR * total_couleur) # cout encre couleur
|
||||
else: # Pas de couleur, malgre l'indication
|
||||
c_total = (COUT_PASSAGE_TAMBOUR_NOIR * faces # passage dans les toners
|
||||
+ COUT_UNITE_NOIRE * total_noir) # cout encre noire
|
||||
|
||||
# Début : Ajout log pour réestimer les coûts
|
||||
fichier_log_est=open(FICHIER_LOG,"a")
|
||||
fichier_log_est.write("%d %d %3d %10.3f %10.3f %s\n" % (time.time(), color, faces, total_noir, total_couleur, path_pdf_file) )
|
||||
fichier_log_est.close()
|
||||
# Fin
|
||||
|
||||
return (float(c_total)/100, faces)
|
||||
|
||||
# ########################################################### #
|
||||
# PRIX COULEURS #
|
||||
# ########################################################### #
|
||||
#
|
||||
# Clacul le prix d'une impression couleur
|
||||
#
|
||||
def base_prix_couleurs(path_pdf_file):
|
||||
"""
|
||||
Clacul le prix d'une impression couleur sur papier A4 pour le fichier path_pdf_file
|
||||
"""
|
||||
return base_prix(path_pdf_file, color=True)
|
||||
|
||||
# ########################################################### #
|
||||
# PRIX N&B #
|
||||
# ########################################################### #
|
||||
#
|
||||
# calcul le prix d'une impression en noir et blanc
|
||||
#
|
||||
def base_prix_nb(path_pdf_file):
|
||||
"""
|
||||
Clacul le prix d'une impression noire et blanc sur papier A4 pour le fichier path_pdf_file
|
||||
"""
|
||||
return base_prix(path_pdf_file, color=False)
|
Loading…
Add table
Add a link
Reference in a new issue