1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
| import sys
import reportlab.platypus as rpb
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.rl_config import defaultPageSize
PAGE_HEIGHT=defaultPageSize[0]
from reportlab.lib.units import cm
from reportlab.lib import colors, fonts
import os
try: import psyco; psyco.full()
except: pass
time = wx.DateTime()
now = time.Now()
jour = now.GetDay()
mois = now.GetMonth()
an = now.GetYear()
now = '%s / %s / %s' % (jour, mois+1, an)
p = rpb.Paragraph
PROJECT_PATH = os.getcwd()
#p > imprime du bout à bout avec retour à la ligne automatique.
#pre > imprime exactement comme c'est écrit dans le script
Title = ""
Firm = 'xxx'
Author = "Ch.E"
URL = ""
email = ""
pageinfo = "%s / %s / %s / %s" % (Firm, URL, Author, email)
Elements = []
styles = getSampleStyleSheet()
PS = ParagraphStyle
HeaderStyle = styles["Heading1"] # XXXX
ParaStyle = styles["Normal"]
PreStyle = styles["Code"]
def font(name = 'courier', size = 13, indent = 0, align = 0):
a = PS(fontName=name, fontSize=size, name='TOCHeading1',leftIndent=indent, alignment = align)
return a
def saut(y):
return Elements.append(rpb.Spacer(1, y * cm))
def posx(a):
x = a * cm
return x
def posy(b):
y = (29 - b) * cm
return y
def myFirstPage(canvas, doc):
canvas.beginText(30,10)
canvas.saveState()
canvas.setFont('Times-Bold',16)
canvas.drawImage(PROJECT_PATH+"\\images\\img\\atell.jpeg", posx(0.5), posy(2.3), 400, 80)
canvas.drawString(posx(6.5), posy(2.8), Title)
canvas.setFont('Courier',11)
canvas.drawString(posx(12), posy(3.5), u"%s" % ste)
canvas.drawString(posx(12), posy(4), u"A l'attention de %s %s" % (civ, nom))
canvas.drawString(posx(12), posy(4.5), u"%s" % adresse)
canvas.drawString(posx(12), posy(5), u"%s" % ' ' )
canvas.drawString(posx(12), posy(5.5), u"%s %s" % (cp,ville))
canvas.setFont('Times-Roman',9)
canvas.drawString(0.5*cm, 40, "Page %d / %s" % (doc.page, pageinfo))
canvas.setFont('Times-Bold',9)
canvas.restoreState()
def myLaterPages(canvas, doc):
canvas.saveState()
canvas.setFont('Times-Bold',16)
canvas.drawImage(PROJECT_PATH+"\\images\\img\\atell.jpeg", posx(0.5), posy(2.3), 400, 80)
canvas.drawString(posx(6.5), posy(2.8), Title)
canvas.setFont('Courier-Bold',12)
canvas.drawString(posx(1), posy(3.5), u"Référence Chantier :")
canvas.drawString(posx(15), posy(3.5), "Date : %s"%now)
canvas.setFont('Times-Roman',9)
canvas.drawString(0.5*cm, 40, "Page %d / %s" % (doc.page, pageinfo))
canvas.setFont('Times-Bold',9)
canvas.restoreState()
def header(txt, style=HeaderStyle, klass=rpb.Paragraph, sep=0.1, x = 1, y = 1):
s = rpb.Spacer(x, y)
Elements.append(s)
para = klass(txt, style)
Elements.append(para)
def pre(txt):
s = rpb.Spacer(200, 5)
Elements.append(s)
p = rpb.Preformatted(txt, ParaStyle)
Elements.append(p)
def font_tab(txt, taille = 12):
t = p(u'%s'%txt, font(size = taille))
return t
def tableau(colone_a, colone_b):
if len(colone_b) == 0:
for i in range(len(colone_a)):
colone_b.append('')
list_tab = []
for i in range(len(colone_a)):
a = [colone_a[i], colone_b[i]]
list_tab.append(a)
t1=rpb.Table(list_tab)
t1.setStyle(rpb.TableStyle([('FONTSIZE', (0,0),(-1,-1),11),
('FONTNAME', (0,0), (-1,-1), 'Courier'),
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
('BOX', (0,0), (-1,-1), 0.5, colors.black)]))
return t1
def first_page():
saut(5)
def new_page():
Elements.append(rpb.PageBreak())
saut(5)
def img(path, x = 1, y = 1):
new_img = rpb.Image(path, x*cm, y*cm)
Elements.append(new_img)
def para(txt, style):
for i in txt.split("\n"):
Elements.append(p(i, style))
saut(0.1)
def go(path, titre = 'Sans nom', margin = (0.5,0.5,0.5,0.5), projet = []):
Elements.insert(0,rpb.Spacer(0,0))
doc = rpb.SimpleDocTemplate(path, title = titre, leftMargin = margin[0]*cm, rightMargin = margin[1]*cm,
topMargin = margin[2]*cm, bottomMargin = margin[3]*cm)
doc.build(Elements,onFirstPage=myFirstPage, onLaterPages=myLaterPages) |
Partager