décembre
2010
Bonjour à tous,
Cela fait un petit moment que je n’ai rien posté sur mon blog mais d’une part le temps me manquait un peu et surtout le contenu…
Enfin bref, je viens de bosser sur un petit bout de code qui pourra peut-être en aider pas mal pour créer des rapport en .pdf avec à la fin la possibilité de créer une courbe.
Le code fonctionne mais peut vraiment être encore améliorer car il reste très basique. L’un des principaux axes d’amélioration pourra certainement être la gestion de plusieurs page…
Mais comme j’ai fait ça en quelques minutes ce matin je n’ai pas encore eu le temps de faire quelque chose de type top car mon premier but était de vérifier qu’il était possible de faire ce que je voulais…
Si certains veulent travailler dessus et l’améliorer, merci de m’envoyer une copie du nouveau code.
Voici ce que j’ai fait…
A bientôt
########################################
## Titre: creation_pdf.py ##
## Auteur: Jiyuu ##
## Date de création: 29/08/08 ##
## Modifié par: Jiyuu ##
## Date de modification: 29/08/09 ##
## Licence: GPL ##
########################################
from reportlab.lib import colors
from reportlab.graphics.shapes import *
from reportlab.graphics import shapes
from reportlab.graphics.charts.axes import XCategoryAxis,YValueAxis
from reportlab.graphics.charts.lineplots import LinePlot
import reportlab.graphics.charts.textlabels as label
from reportlab.graphics.widgets.markers import makeMarker
'''Pour info styles acceptés:
Courier,Courier-Bold,Courier-BoldOblique,Courier-Oblique
Helvetica,Helvetica-Bold,Helvetica-BoldOblique,Helvetica-Oblique
Times-Roman,Times-Bold,Times-BoldItalic,Times-Italic'''
l = 600
h = 850
xtitre = l/2
ytitre = h-30
drawing = Drawing(l, h)
##Titres du doc
def titre(texte):
"""<texte> doit être String. C'est le titre du texte que l'on souhaite mettre.
Avec la fonction titre(), les titres créés sont alignés par le centre"""
lab = label.Label(fontName = 'Helvetica-Oblique', fontSize = 24)
lab.setOrigin(xtitre,ytitre)
lab.dx, lab.dy = 0, 0
lab.setText(texte)
drawing.add(lab)
def titre_w(texte, posx, posy):
"""<texte> doit être String. C'est le titre du texte que l'on souhaite mettre.
Avec la fonction titre_w(), les titres créés sont alignés par la gauche.
<posx> et <posy> permettent de positionner le texte par rapport au haut de la page.
Ils doivent être de type bool."""
lab = label.Label(fontName = 'Helvetica-BoldOblique', fontSize = 16)
lab.setOrigin(xtitre,ytitre)
txt.boxAnchor = 'w'
lab.dx, lab.dy = 0, 0
lab.setText(texte)
drawing.add(lab)
def titre_e(texte, posx, posy):
"""<texte> doit être String. C'est le titre du texte que l'on souhaite mettre.
Avec la fonction titre_e(), les titres créés sont alignés par la droite.
<posx> et <posy> permettent de positionner le texte par rapport au haut de la page.
Ils doivent être de type bool."""
lab = label.Label(fontName = 'Helvetica-BoldOblique', fontSize = 16)
lab.setOrigin(xtitre,ytitre)
txt.boxAnchor = 'e'
lab.dx, lab.dy = 0, 0
lab.setText(texte)
drawing.add(lab)
##Corps du doc
def corps(texte, posx, posy):
"""<texte> doit être String. Ces textes permettrons de créer le corps du fichier.
avec la fonction corps(), les textes créés sont alignés par le centre.
<posx> et <posy> permettent de positionner le texte par rapport au haut de la page.
Ils doivent être de type bool."""
txt = label.Label(fontName = 'Times-Roman')
txt.setOrigin(posx,h-130-posy)
txt.dx, txt.dy = 40, 50
txt.setText(texte)
drawing.add(txt)
def corps_w(texte, posx, posy):
"""<texte> doit être String. Ces textes permettrons de créer le corps du fichier.
avec la fonction corps(), les textes créés sont alignés par le centre.
<posx> et <posy> permettent de positionner le texte par rapport au haut de la page.
Ils doivent être de type bool."""
txt = label.Label(fontName = 'Times-Roman')
txt.setOrigin(posx,h-130-posy)
txt.boxAnchor = 'w'
txt.dx, txt.dy = 40, 50
txt.setText(texte)
drawing.add(txt)
def corps_e(texte, posx, posy):
"""<texte> doit être String. Ces textes permettrons de créer le corps du fichier.
avec la fonction corps(), les textes créés sont alignés par le centre.
<posx> et <posy> permettent de positionner le texte par rapport au haut de la page
Ils doivent être de type bool."""
txt = label.Label(fontName = 'Times-Roman')
txt.setOrigin(posx,h-130-posy)
txt.boxAnchor = 'e'
txt.dx, txt.dy = 40, 50
txt.setText(texte)
drawing.add(txt)
##Création du graphique
def graph(data):
"""data doit être sous la forme d'une liste de Tuple de Tuple..
#exemple: points = [((1,1), (2,2), (3,3), (4,4), (5,5)), ((1,2), (2,3), (3,4), (4,5), (5,6))]"""
lp = LinePlot()
lp.x, lp.y = 40, 50
lp.width, lp.height = l-80, 200
lp.data = data
lp.joinedLines = 1
lp.strokeColor = colors.black
lp.xValueAxis.valueMin = 0
lp.xValueAxis.valueMax = 5
lp.xValueAxis.labelTextFormat = '%2.1f'
lp.yValueAxis.valueMin = 0
lp.yValueAxis.valueMax = 7
drawing.add(lp)
def go(path):
"""path est le nom du fichier à générer SANS l'extension.
Cette fonction permet de créer le document pdf"""
from reportlab.graphics import renderPDF
renderPDF.drawToFile(drawing, path+'.pdf')