Fax : Personnaliser la page de garde

Niconemo

Modo (toujours vivant !)
Club iGen
26 Juin 2001
6 449
458
Rhône-Alpes
Bonjour,

Quelqu'un sait-il s'il est possible de personnaliser la page de garde du Fax intégré à mac Os X (10.3). Par défaut, celle-ci est très laide et en anglais...

Toute piste est l bienvenue... ;)
 
Bonjour, c'est une piste: ;)
Je viens de trouver ça. Je n'ai pas encore essayé pour l'instant, je le ferais demain ...Je ne sais même pas si ça marche sous Tiger.
Si quelqu'un en a l'expérience ?
 
Ca marche, et sous Tiger !!

Attention je n'ai que de très vagues notions de python, donc toute contribution sera la bienvenue.

J'ai d'abord créé une sauvegarde de coverpage.py comme recommandé là.

Dans le terminal:
$ cd /usr/libexec/fax
$ sudo cp coverpage.py coverpage.py_back

Puis je me suis servi de tinkertool pour faire apparaître les fichiers cachés et aller dans le dossier usr/libexec/fax. Notez que les droits de coverpage.py sont en root.

J'ai modifié le fichier de Ronald Florence avec Subethaedit. Je l'ai mis dans le dossier usr/libexec/fax et j'ai restauré les droits avec batchmod. (Bon, je sais, je ne suis pas un pro du pico)

La francisation ne se fait curieusement pas sur les premieres lignes de définition mais sur les lignes 121 à 125. J'ai aussi modifié le format de la date f = os.popen ('date "+%d.%m.%Y, %H:%M:%S"') et la mise en page pour tout aligner à gauche return ('<tr><td valign=top >%(title)s: '
'%(f)s%(body)s%(F)s</td></tr>\n' % vars())
.

Il ne faut pas oublier de créer le dossier Fax dans la bibliothèque et y mettre les fichiers header.rtf et footer.rtf que l'on peut éditer librement avec textedit


Voilà mon fichier en français pour exemple.

#!/usr/bin/python
# cover.py -- add an autogenerated cover page to a PDF document

import sys, os, getopt, string, pwd
from CoreGraphics import *


## definitions

subject_title = 'Subject:'
from_title = 'From:'
to_title = 'To:'
date_title = 'Date'
pages_title = 'Sheets to follow:'

subject_text = None
from_name = 'auto'
to_name = None
date_string = None
pages_string = None

body_file = None
body_string = None
body_type = None

output_file = 'cover.pdf'

page_rect = CGRectMake (0, 0, 612, 792)
page_inset = (72, 72)
default_logo_size = (120, 120)

header_font_size = 14

logos = []

## functions

def body (c, rect):
global body_type

for (f, r) in logos:
pdf = CGPDFDocumentCreateWithProvider (CGDataProviderCreateWithFilename (f))
if pdf:
# FIXME: cg has a bug where releasing a document that has pages drawn
# in a pdf context but not output causes a crash when the pages
# are finally output (pages don't retain their document)
pdf.thisown = 0
c.drawPDFDocument (r, pdf, 1)

# Insert rtf header & footer from ~/Library/Fax
# [email protected], 12 Nov 2003

p = pwd.getpwuid (os.getuid ())
user = p and p[0]
fn = '/Users/'+user+'/Library/Fax/'
foot_rect = CGRectMake(0, 0, 612, 72)
footer = CGDataProviderCreateWithFilename (fn+'footer.rtf')
c.drawRTFTextInRect (footer, foot_rect)
header = CGDataProviderCreateWithFilename (fn+'header.rtf')
h = c.drawRTFTextInRect (header, rect)
rect = CGRectMake (rect.origin.x, rect.origin.y,
rect.size.width, (rect.origin.y + rect.size.height)
- (h.origin.y + h.size.height))


html = make_header_html ()
tr = c.drawHTMLTextInRect (CGDataProviderCreateWithString (html),
rect, header_font_size)
rect = CGRectMake (rect.origin.x, rect.origin.y,
rect.size.width, (rect.origin.y + rect.size.height)
- (tr.origin.y + tr.size.height))

p = None
if body_file:
p = CGDataProviderCreateWithFilename (body_file)
if not body_type:
bits = string.split (body_file, '.')
if len (bits) > 1:
suff = string.lower (bits[-1])
if suff == 'rtf':
body_type = 'rtf'
elif suff == 'html' or suff == 'htm':
body_type = 'html'
elif body_string:
p = CGDataProviderCreateWithString (body_string)

if p:
if body_type == 'rtf':
c.drawRTFTextInRect (p, rect)
elif body_type == 'html':
c.drawHTMLTextInRect (p, rect)
else:
c.drawPlainTextInRect (p, rect)

# Encoding the header section as HTML is the easiest way to get nice
# alignment of the two columns

def make_header_html ():
global date_string, from_name

def make_row (title, body, format=None):
f = ''; F = ''
if format:
f = '<%(format)s>' % vars ()
F = '</%(format)s>' % vars ()
return ('<tr><td valign=top >%(title)s: '
'%(f)s%(body)s%(F)s</td></tr>\n' % vars())


if date_string == 'now':
f = os.popen ('date "+%d.%m.%Y, %H:%M:%S"')
# read the date, dropping the trailing newline
date_string = f.read () [:-1]
f.close ()

if from_name == 'auto':
p = pwd.getpwuid (os.getuid ())
from_name = p and p[4];

return ('<html>\n'
+ '<head><meta http-equiv=Content-Type content="text/html; charset=UTF-8"></head>\n'
+ '<body text=\"#000000\">\n<table>\n'
+ (to_name and make_row ("A", to_name) or '')
+ (from_name and make_row ("De", from_name) or '')
+ (date_string and make_row (date_title, date_string) or '')
+ (subject_text and make_row ("Sujet", subject_text, 'b') or '')
+ (pages_string and make_row ("Nombre de pages &agrave; suivre", pages_string) or '')
+ '<tr><td>&nbsp;</td></tr>\n'
+ '</table>\n</body>\n</html>')


## entry point

def usage ():
print '''
usage: python cover.py [OPTION]... PDF-FILES...

Add a cover page to one or more PDF documents.

-f, --from=STRING
-F, --from-title=STRING
-t, --to=STRING
-T, --to-title=STRING
-s, --subject=STRING
-S, --subject-title=STRING
-d, --date=STRING (use STRING='now' for current date)
-D, --date-title=STRING
-n, --count=STRING
-N, --count-title=STRING
-b, --body=STRING
-B, --body-file=FILENAME
-T, --body-type=TYPE
-p, --page-rect=X,Y,W,H
-o, --output=FILENAME
-l, --logo=FILENAME[@X,Y,W,H]
-H, --header-font-size=SIZE
'''

def main ():
global subject_title, from_title, to_title, pages_title
global subject_text, from_name, to_name, pages_string, body_file, body_string
global body_type, output_file, page_rect, date_string, logos
global header_font_size

def parse_rect (s):
a = string.split (s, ',')
return (CGRectMake (float (a[0]), float (a[1]),
float (a[2]), float (a[3])))

try:
opts,args = getopt.getopt (sys.argv[1:],
'f:F:t:T:s:S:b:B:T:p:o:l:d:D:n:N:',
['from=', 'from-title=', 'to=', 'to-title=',
'subject=', 'subject-title=', 'body=',
'body-file=', 'body-type=', 'page-rect=',
'output=', 'logo=', 'date=', 'date-title=',
'count=', 'count-title=', 'header-font-size='])
except getopt.GetoptError:
usage ()
sys.exit (1)
for o,a in opts:
if o in ('-f', '--from'):
from_name = a
if o in ('-F', '--from-title'):
from_title = a
elif o in ('-t', '--to'):
to_name = a
elif o in ('-T', '--to-title'):
to_title = a
elif o in ('-s', '--subject'):
subject_text = a
elif o in ('-S', '--subject-title'):
subject_title = a
elif o in ('-b', '--body'):
body_string = a
elif o in ('-B', '--body-file'):
body_file = a
elif o in ('-T', '--body-type'):
body_type = a
elif o in ('-p', '--page-rect'):
page_rect = parse_rect (a)
elif o in ('-o', '--output'):
output_file = a
elif o in ('-l', '--logo'):
a = string.split (a, '@')
if len (a) > 1:
r = parse_rect (a[1])
else:
r = CGRectMake (page_rect.origin.x + page_rect.size.width
- page_inset[0] - default_logo_size[0],
page_rect.origin.y + page_rect.size.height
- page_inset[1] - default_logo_size[1],
default_logo_size[0], default_logo_size[1])
logos = logos + [(a[0], r)]
elif o in ('-d', '--date'):
date_string = a
elif o in ('-n', '--count'):
pages_string = a
elif o in ('-N', '--count-title'):
pages_title = a
elif o in ('-H', '--header-font-size'):
header_font_size = float (a)

c = CGPDFContextCreateWithFilename (output_file, page_rect)
c.beginPage (page_rect);

body (c, page_rect.inset (page_inset[0], page_inset[1]))

c.endPage ()

for f in args:
pdf = CGPDFDocumentCreateWithProvider (CGDataProviderCreateWithFilename (f));
if pdf:
# FIXME: see above for why this is necessary
pdf.thisown = 0
for page in range (1, pdf.getNumberOfPages () + 1):
rect = pdf.getMediaBox (page)
c.beginPage (rect)
c.drawPDFDocument (rect, pdf, page)
c.endPage ()

# serialized the constructed PDF document to its file
c.finish ()


if __name__ == '__main__':
main ()

C'est pas beau tout ça ?
 
  • J’aime
Réactions: Niconemo
Tiens bizarre, j'ai éssayé ca ne marche pas.
A chaque fois que je modifie le fichier coverpage.py, je n'ai plus de page de garde dans l'apercu. Parcontre des que je mets le fichier original, jai de nouveaux droit à la page de garde mais evidemment en anglais.
 
T'es un sale n00b grek moi j'ai réussi du premier coup, donc bouge ton derrière et vient jusqu'à mon bureau prendre des leçons de python.
Espèce de Rigolo.

Sans rigoler, je pense que tu avais des problèmes de droits d'accès. Tu as du changer les droits lorsque tu as édité ton fichier.

Tu as encore beaucoup à apprendre jeune padawan.
 
truegrek a dit:
Tiens bizarre, j'ai essayé, ca ne marche pas.
A chaque fois que je modifie le fichier coverpage.py, je n'ai plus de page de garde dans l'apercu. Par contre dès que je mets le fichier original, j'ai de nouveaux droit à la page de garde mais évidemment en anglais.
Que modifie-tu ?
L'essentiel pour franciser est de changer ceci lignes 121 à 125 :
+ (to_name and make_row (to_title, to_name) or '')
+ (from_name and make_row (from_title, from_name) or '')
+ (date_string and make_row (date_title, date_string) or '')
+ (subject_text and make_row (subject_title, subject_text, 'b') or '')
+ (pages_string and make_row (pages_title, pages_string) or '')
en celà
+ (to_name and make_row ("A", to_name) or '')
+ (from_name and make_row ("De", from_name) or '')
+ (date_string and make_row (date_title, date_string) or '')
+ (subject_text and make_row ("Sujet", subject_text, 'b') or '')
+ (pages_string and make_row ("Nombre de pages &agrave; suivre", pages_string) or '')

Le reste est moins important...

Il faut bien entendu respecter les droits, tu peux, par exemple, éditer le fichier par pico dans le terminal:
$ cd /usr/libexec/fax
$ sudo pico coverpage.py
Bon courage.