[impression_canon] Detection du paysage

Rajoute la detection du format paysage et nazifie
sur le format d'entrée (A3 ou A4 only).
Ca semble marcher, wait & see

darcs-hash:20111005234109-4a1ec-f819552d67abbbd32a78cc79ce9aa25a603bd917.gz
This commit is contained in:
Daniel STAN 2011-10-06 01:41:09 +02:00
parent a213002c1e
commit ea5009d895

View file

@ -152,6 +152,12 @@ class impression:
_base_prix_nb = 0.0 _base_prix_nb = 0.0
_base_prix_couleurs = 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): def __init__(self, path_to_pdf, adh = None):
"""impression(path_to_pdf [, adh]) """impression(path_to_pdf [, adh])
@ -174,11 +180,27 @@ class impression:
if not open(path_to_pdf).read().startswith("%PDF"): if not open(path_to_pdf).read().startswith("%PDF"):
raise FichierInvalide, ("Le fichier ne semble pas etre un PDF", path_to_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: 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: except Exception, e:
raise FichierInvalide, u"pdfinfo n'arrive pas a lire le fichier (fichier protege par mot de passe?)" 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 # calcule le prix de l'encre tout de suite
self._calcule_prix() self._calcule_prix()
@ -204,7 +226,7 @@ class impression:
"""changeSettings([keyword=value]) """changeSettings([keyword=value])
Change les parametres de l'impression, recalcule et renvoie le nouveau prix. 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 #recalcule et renvoie le prix
@ -245,12 +267,14 @@ class impression:
if livret == "False": livret = False if livret == "False": livret = False
if livret in [True, False]: if livret in [True, False]:
self._settings['livret'] = livret self._settings['livret'] = livret
self._settings['portrait'] = not(livret)
if livret: if livret:
self._settings['portrait'] = False
self._settings['recto_verso'] = True self._settings['recto_verso'] = True
self._settings['agrafage'] = 'None' self._settings['agrafage'] = 'None'
if self._settings['papier'] == 'A4tr': if self._settings['papier'] == 'A4tr':
self._settings['papier'] = 'A4' self._settings['papier'] = 'A4'
else:
self._settings['portrait'] = self._width < self._height
return self._calcule_prix() return self._calcule_prix()