[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_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()