diff --git a/impression/impression_canon.py b/impression/impression_canon.py index 597d3c07..f114e068 100755 --- a/impression/impression_canon.py +++ b/impression/impression_canon.py @@ -152,6 +152,12 @@ class impression: _base_prix_nb = 0.0 _base_prix_couleurs = 0.0 + # Format du pdf, tout droit sorti de pdfinfo + # (les dimensions sont donc en pts) + _format = '(A4)' + _width = 595.28 + _height = 841.89 + def __init__(self, path_to_pdf, adh = None): """impression(path_to_pdf [, adh]) @@ -174,11 +180,27 @@ class impression: if not open(path_to_pdf).read().startswith("%PDF"): raise FichierInvalide, ("Le fichier ne semble pas etre un PDF", path_to_pdf) - # on compte les pages + # on compte les pages et on regarde le format try: - self._pages = int(os.popen("pdfinfo %s | egrep ^Pages " % (self._fichier)).readline().split()[1]) + self._pdfinfo = os.popen("pdfinfo %s" % (self._fichier)) except Exception, e: raise FichierInvalide, u"pdfinfo n'arrive pas a lire le fichier (fichier protege par mot de passe?)" + self._pages = -1 + for line in self._pdfinfo: + if line.startswith('Pages'): + self._pages = int(line.split()[1]) + elif line.startswith('Page size'): + size = line.split() + if len(size) <= 6: + raise FichierInvalide, u"Format de page inconnu" + self._format = size[6] + if not self._format in ['(A4)','(A3)']: + raise FichierInvalide, u"Seuls les formats A3 et A4 sont supportés" + self._width = float(size[2]) + self._height = float(size[4]) + self._format = size[6] + if self._pages <= 0: + raise FichierInvalide, u"Impossible de lire le nombre de pages" # calcule le prix de l'encre tout de suite self._calcule_prix() @@ -204,7 +226,7 @@ class impression: """changeSettings([keyword=value]) Change les parametres de l'impression, recalcule et renvoie le nouveau prix. - Lève une exception SettingError si les paramètres sont invalides. + Lève une exceotion SettingError si les paramètres son invalides. """ #recalcule et renvoie le prix @@ -245,12 +267,14 @@ class impression: if livret == "False": livret = False if livret in [True, False]: self._settings['livret'] = livret - self._settings['portrait'] = not(livret) if livret: + self._settings['portrait'] = False self._settings['recto_verso'] = True self._settings['agrafage'] = 'None' if self._settings['papier'] == 'A4tr': self._settings['papier'] = 'A4' + else: + self._settings['portrait'] = self._width < self._height return self._calcule_prix()