Ce module permet la génération de fichiers pdf. On ne détaille ici qu'une très faible partie de l'ensemble de ses possibilités. Pour plus de détails, se rapporter à l'un des liens suivants...
Liens :
Voici un premier exemple d'utilisation de ce module, qui crée un pdf contenant le texte : Blabla bla...
from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.pagesizes import A4 from reportlab.platypus import SimpleDocTemplate, Paragraph styles = getSampleStyleSheet() styleN = styles['Normal'] story = [] story.append(Paragraph("Blabla bla", styleN)) doc = SimpleDocTemplate('test.pdf',pagesize = A4, title = 'Premier test', author = 'Christophe Guyeux' ) doc.build(story)
On utilise ci-dessus un patron prédéfini dans le module : SimpleDocTemplate, qui correspond à un document de base.
On y trouve dedans différents objets, correspondant aux différents éléments d'un document classique : paragraphe, image, tableau,... Ces éléments sont à importer à la demande.
D'où l'explication de la ligne :
from reportlab.platypus import SimpleDocTemplate, Paragraph
Notre document doc est donc un objet de ce type. On a passé différents éléments au constructeur SimpleDocTemplate, à savoir :
from reportlab.lib.pagesizes import A4
D'où les lignes...
doc = SimpleDocTemplate('test.pdf',pagesize = A4, title = 'Premier test', author = 'Christophe Guyeux' )
Le contenu de notre document est une liste story d'objets (paragraphes de texte, images, etc.). On utilise alors la méthode build pour contruire le pdf à partir de cette liste :
doc.build(story)
Reste à expliquer comment faire ladite liste d'objets (story)...
Le document est une liste d'objets : paragraphes, images, tableaux, que l'on passera à la méthode build :
story = [] story.append(Paragraph("Blabla bla", styleN))
On détaillera plus loin comment insérer d'autres types d'objets. Remarquons, pour l'instant, que ces objets ont des styles...
Quand on insère un objet Paragraph dans notre document, il faut lui spécifier son style : police, taille de la police, effets de caractères, etc.
Bien sûr, on peut le faire à la main, et la documentation dont le lien est présent en haut de cette page permet de comprendre comment faire.
Autrement, on peut utiliser une feuille de styles prédéfinie :
from reportlab.lib.styles import getSampleStyleSheet styles = getSampleStyleSheet()
On peut alors récupérer les différents styles dont on a besoin :
styleN = styles['Normal']
pour le style normal, ou encore
styleT = styles['Title'] styleH = styles['Heading1'] styleH2 = styles['Heading2']
pour, respectivement, les titres de document, de chapitre et de section, etc.
Reste à attacher un style à chaque paragraphe :
Paragraph("Blabla bla", styleN)
L'exemple suivant montre comment définir différents types de paragraphes...
from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.pagesizes import A4 from reportlab.platypus import Paragraph, SimpleDocTemplate styles = getSampleStyleSheet() styleT = styles['Title'] styleH = styles['Heading1'] styleH2 = styles['Heading2'] styleN = styles['Normal'] story = [] story.append(Paragraph("Ceci est le titre", styleT)) story.append(Paragraph("Ceci est la section", styleH1)) story.append(Paragraph("Ceci est la sous-section", styleH2)) story.append(Paragraph("Ceci est le paragraphe", styleN)) doc = SimpleDocTemplate('test2.pdf',pagesize = A4, title = 'Divers styles', author = 'Christophe Guyeux' ) doc.build(story)
On rappelle que ces styles sont prédéfinis dans la classe getSampleStyleSheet du module reportlab.lib.styles. On peut, au besoin, récupérer cette classe et modifier le fichier, pour adapter les styles prédéfinis.
On peut insérer des espaces dans notre document. Pour ce faire, il faut importer l'objet Spacer :
from reportlab.platypus import Spacer
puis procéder avec cet objet comme avec l'objet Paragraph :
story.append(Paragraph("Ceci précède un espace", styleN)) story.append(Spacer(0*cm,0.5*cm)) story.append(Paragraph("Ceci suit un espace", styleN))
Nous avons définis les dimensions de l'espace en centimètres. Cela nécessite une importation :
from reportlab.lib.units import cm
Grosso-modo, les images s'insèrent comme les objets Spacer et Paragraph :
from reportlab.platypus import Image
story.append(Image('monImage.jpg', height = hauteur, width = largeur))
où hauteur et largeur correspondent à la dimension de l'image. On peut les obtenir ainsi :
import Image as im image = im.open('monImage.jpg') largeur = image.size[0] hauteur = image.size[1]
Un petit exemple de création d'un tableau basique. Voir la documentation pour faire mieux.
from reportlab.lib.pagesizes import A4 from reportlab.platypus import Paragraph, SimpleDocTemplate, Table, TableStyle from reportlab.lib.units import cm from reportlab.lib import colors story = [] data = [ [1,2,3],[4,5,6],[7,8,9] ] t=Table(data, len(data)*[2*cm], len(data[0])*[1*cm]) t.setStyle(TableStyle([('FONTSIZE', (0,0),(-1,-1),12), ('INNERGRID', (-1,-1), (0,0), 0.5, colors.blue), ('BOX', (0,0),(-1,-1), 0.5, colors.red) ])) story.append(t) doc = SimpleDocTemplate('test.pdf',pagesize = A4, title = 'Premier test', author = 'Christophe Guyeux' ) doc.build(story)