Magazine High tech

Générer un fichier PDF avec Python

Publié le 06 août 2010 par Luc

Le format pdf est aujourd'hui omniprésent sur Internet. Il est devenu le standard pour l'échange de textes mis en forme et ce car il est portable sur les principales plateformes en conservant la mise en page du document. La raison du succès: un format ouvert qui peut être utilisé par d'autres que son créateur la société Adobe. Bien entendu, Python propose une librarie pour la génération de fichiers PDF que je vais essayer de vous présenter rapidement dans cet article.

Cette librairie se nomme reportlab du nom de la société qui la développe sous license libre. Elle s'installe avec la commande  

easy_install reportlab

Elle dispose d'une très bonne documentation (au format pdf

Smile
) et en particulier d'un guide utilisateur. Elle a une large gamme de fonctionnalité permettant par exemple d'inclure des textes, images et dessins vectoriels mais permettant aussi de gérer des aspects plus avancés comme les bookmarks.

Un exemple simple de génération de fichier PDF en Python

Je me suis pour l'instant limité à une utilisation des fonctions de base que je vous propose de découvrir via cet exemple de code.

from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
pdf = canvas.Canvas('test.pdf')
pdf.drawString(3*cm, 25*cm, u'Bonjour')
pdf.line(3*cm,24.5*cm,18*cm,24.5*cm)
pdf.drawString(3*cm, 23*cm, u'Un texte')
pdf.save()

Dans cet exemple, on écrit deux textes et trace une ligne horizontale. On crée simplement un objet de type Canvas en lui donnant un nom de fichier. On effectue ensuite les opérations et on génère le fichier en appelant la méthode save de l'objet Canvas. On remarque aussi qu'il est possible très facilement de spécifier l'unité pour les coordonnées, dans cet exemple le centimètre.

Utiliser des mises en forme

Il est possible de définir des mises en forme : tailles et polices des textes, couleurs ... Voici un exemple inspiré par le guide utilisateur:

pdf = canvas.Canvas('misenforme.pdf')
textobject = pdf.beginText()
textobject.setTextOrigin(3*cm, 21*cm)
textobject.setFont("Helvetica-Oblique", 14)
for line in ('Un', 'Deux', 'Trois'):
   textobject.textLine(line)
textobject.setFillGray(0.4)
textobject.textLine('Nous irons aux bois')
pdf.drawText(textobject)
pdf.save()

Ce ne sont que deux exemples très simples pour montrer la simplicité d'utilisation. En se plongeant un peu dans le guide utilisateur, on découvre vite de grandes possibilités.

Intégrer la génération de PDF à une application Django

Il est très facile de faire générer un PDF depuis une vue Django. Il suffit simplement d'utiliser la réponse en guise de fichier.

response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename={0}'.format(fn)
pdf = canvas.Canvas(response)
pdf.drawString(3*cm, 25*cm, u'Bonjour')
...
pdf.save()
return response

Cette technique fonctionne aussi avec d'autres types de fichiers comme les fichiers Excel générés avec xlwt : (c.f. l'article de présentation de xlwt)

Voilà en quelques lignes, la présentation de cette librairie très utile et très facile à prendre en main. A garder dans sa boîte à outils.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Luc 11 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossiers Paperblog