scripts/lib/impression/cout.py
gdetrez d37a454b53 ajout de la doc pydoc
darcs-hash:20061123200724-f46e9-fdd14a07b448b323145a69bae0d9c66a3eb54f71.gz
2006-11-23 21:07:24 +01:00

150 lines
6.4 KiB
Python
Executable file
Raw Blame History

#! /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
"""
import sys, time, tempfile, os, commands, string, random, re
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
# ########################################################### #
# 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"
# ########################################################### #
# PRIX COULEURS #
# ########################################################### #
#
# Clacul le prix d'une impression couleur
#
def base_prix_couleurs(path_fichier_pdf):
"""
Clacul le prix d'une impression couleur sur papier A4 pour le fichier path_fichier_pdf
"""
# nom_rep seras le dossier dans tmp ou tous les fichier cr<63><72> par
# convert seront entrepos<6F>
nom_rep = tempfile.mkdtemp(prefix='tmpimpr')
nom_png = "%s/convert.png" % nom_rep # Nom prefixe et chemin des png cr<63><72> par convert
# Convertit les pdf en png couleur
(status, rep) = commands.getstatusoutput("nice -n 5 gs -sDEVICE=png16m -r30 -dBATCH -dNOPAUSE -dSAFER -dPARANOIDSAFER -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 -sOutputFile=%s%%d -q %s" % (nom_png, escapeForShell(path_fichier_pdf)))
if status:
raise FichierInvalide, "ERREUR %s : Fichier invalide. Aucun png cree. (couleurs)" % status
# R<>cup<75>re la liste des fichiers
list_filepng=os.listdir(nom_rep)
# Calcule le nombre de pixel de couleur
remplissage = [0, 0, 0, 0, 0] # C, M, J, N, nombre de pages
for fichier in list_filepng:
resultats = commands.getoutput("nice -n 5 /usr/scripts/impression/percentcolour %s/%s" % (nom_rep, fichier))
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])
total_noir = remplissage[3]
total_couleur = sum(remplissage[0:3])
faces = int(remplissage[4])
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
)
return (float(c_total)/100, faces)
# ########################################################### #
# PRIX N&B #
# ########################################################### #
#
# calcul le prix d'une impression en noir et blanc
#
def base_prix_nb(path_fichier_pdf):
"""
Clacul le prix d'une impression noire et blanc sur papier A4 pour le fichier path_fichier_pdf
"""
# nom_rep seras le dossier dans tmp ou tous les fichier cr<63><72> par
# convert seront entrepos<6F>
nom_rep = tempfile.mkdtemp(prefix='tmpimpr')
nom_png = "%s/convert.png" % nom_rep # Nom prefixe et chemin des png cr<63><72> par convert
# Convertit les pdf en png
(status, rep) = commands.getstatusoutput("nice -n 5 gs -sDEVICE=pnggray -r30 -dBATCH -dNOPAUSE -dSAFER -dPARANOIDSAFER -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 -sOutputFile=%s%%d -q %s" % (nom_png, escapeForShell( path_fichier_pdf ) ))
if status:
raise FichierInvalide("ERREUR : Fichier invalide. Aucun png n'a ete cree.\n")
#r<>cup<75>re la liste des fichiers
list_filepng=os.listdir(nom_rep)
remplissage = [0, 0] # Noir, nombre de pages
for fichier in list_filepng:
resultats = commands.getoutput("nice -n 5 /usr/scripts/impression/percentblack '%s/%s'" % (nom_rep, fichier))
l_resultats = resultats.split(":")
remplissage[0] += float(l_resultats[0])*float(l_resultats[1])
remplissage[1] += float(l_resultats[1])
total_noir = remplissage[0]
faces = int(remplissage[1])
c_total = (COUT_PASSAGE_TAMBOUR_NOIR * faces # passage dans les toners
+ COUT_UNITE_NOIRE * total_noir # cout encre noire
)
return (float(c_total)/100, faces)