#! /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 sys.path.append('/usr/scripts/gestion') import config 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): pass # ########################################################### # # PRIX COULEURS # # ########################################################### # # # Clacul le prix d'une impression couleur # def base_prix_couleurs(path_fichier_pdf): # 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 # 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, path_fichier_pdf)) if status: raise FichierInvalide("ERREUR %s : Fichier invalide. Aucun png cree. (couleurs)" % status) # Récupè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): # 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 # 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, path_fichier_pdf)) if status: raise FichierInvalide("ERREUR : Fichier invalide. Aucun png n'a ete cree.\n") #récupè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)