06 Aug 2020

Wiki

Python

Aide

edit SideBar

Search

Reportlab


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 :

1.  Premier pdf

1.1  Premier exemple

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)

1.2  Le patron (template)

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

1.3  Le constructeur du pdf

Notre document doc est donc un objet de ce type. On a passé différents éléments au constructeur SimpleDocTemplate, à savoir :

  • le nom du fichier : test.pdf,
  • la taille de la page : A4, qui a nécessité l'import
  from reportlab.lib.pagesizes import A4
  • le titre, et l'auteur du pdf.

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)...

1.4  Le contenu

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...

1.5  Les 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)

2.  Documents enrichis

2.1  Différents styles de paragraphes

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.

2.2  Des espaces

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

2.3  Des images

Grosso-modo, les images s'insèrent comme les objets Spacer et Paragraph :

  • Commencer par importer l'objet Image du module reportlab.platypus :
  from reportlab.platypus import Image
  • Puis insérer l'image comme le reste :
  story.append(Image('monImage.jpg', height = hauteur, width = largeur))

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]

2.4  Des tableaux

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)

Actions

Recent Changes