Documentation
Création de fichiers PDF ¶
Ce document explique comment produire des chiers PDF dynamiquement en utilisant des vues Django. C’est
possible grâce à l’excellente bibliothèque Python libre ReportLab.
L’avantage de générer des chiers PDF dynamiquement est que vous pouvez créer des PDF personnalisés pour
différents besoins, par exemple en fonction des utilisateurs ou de certaines parties de contenu.
Par exemple, Django était utilisé chez kusports.com pour générer des tableaux de tournois NCAA personnalisés
et prêts pour l’impression, sous forme de chiers PDF, pour les personnes participant au concours « March
Madness ».
Installation de ReportLab ¶
La bibliothèque ReportLab est disponible sur PyPI. Un manuel d’utilisation (un chier PDF, bien évidemment) est
aussi disponible en téléchargement. Vous pouvez installer ReportLab avec pip:
/
Testez votre installation en l’important dans l’interpréteur interactif de Python :
>>> import reportlab
Si cette commande ne produit aucune erreur, l’installation a réussi.
Écriture de la vue ¶
L’élément clé dans la génération dynamique de PDF avec Django est que l’API de ReportLab agit sur des objets
de type chier, et les objets FileResponse de Django acceptent des objets de type chier.
Voici un exemple « Hello World » :
import io
from django.http import FileResponse
from reportlab.pdfgen import canvas
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
def some_view(request):
# Create a file-like buffer to receive PDF data.
buffer = io.BytesIO()
# Create the PDF object, using the buffer as its "file."
p = canvas.Canvas(buffer)
# Draw things on the PDF. Here's where the PDF generation happens.
# See the ReportLab documentation for the full list of functionality.
p.drawString(100, 100, "Hello world.")
# Close the PDF object cleanly, and we're done.
p.showPage()
p.save()
# FileResponse sets the Content-Disposition header so that browsers
# present the option to save the file.
buffer.seek(0)
return FileResponse(buffer, as_attachment=True, filename="hello.pdf")
Le code et les commentaires sont assez explicites, mais certains points méritent un éclaircissement :
La réponse dé nit automatiquement le type MIME application/pdf en se basant sur l’extension du nom de
chier. Ceci indique aux navigateurs que le document est un chier PDF, et non pas un chier HTML ou autre
contenu binaire générique de type application/octet-stream.
Lorsque as_attachment=True est transmis à FileResponse, l’en-tête Content-Disposition est
dé ni en conséquence et pousse les navigateurs Web à ouvrir une boîte de dialogue demandant comment
gérer le document, même si un comportement par défaut est dé ni sur la machine. Si le paramètre
as_attachment est omis, les navigateurs gèrent directement le chier PDF en utilisant le programme ou
greffon qui aura été con guré pour les chiers PDF.
Vous pouvez indiquer le paramètre filename de votre choix. Ce contenu sera utilisé dans les boîtes de
dialoque Enregistrer sous….
Il est possible de se brancher à l’API ReportLab : le même tampon transmis comme premier paramètre à
canvas.Canvas peut être passé à la classe FileResponse.
Notez que toute méthode de génération PDF subséquente est appelée sur l’objet PDF (p dans ce cas), et non
pas sur buffer.
Finalement, il est important d’appeler showPage() et save() sur le chier PDF.
Note
ReportLab n’est pas « thread-safe ». Certains utilisateurs ont signalé des problèmes bizarres
lorsque des vues Django de production de PDF sont simultanément appelées par beaucoup de
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
monde.
Autres formats ¶
Vous constaterez que ces exemples ne contiennent pas beaucoup de code spéci que au format PDF,
uniquement les parties utilisant reportlab. Vous pouvez donc employer des techniques semblables pour
générer tout autre format pour lequel vous trouvez une bibliothèque Python. Consultez également Création de
contenu CSV, un autre exemple qui contient certaines techniques utilisables lors de la génération de formats
basés sur du texte.
Voir aussi
Le site Django Packages présente une comparaison de paquets qui peuvent aider à produire des
chiers PDF avec Django.
Création de contenu CSV Surcharge des gabarits
Learn More
About Django
Getting Started with Django
Team Organization
Django Software Foundation
Code of Conduct
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Diversity Statement
Get Involved
Join a Group
Contribute to Django
Submit a Bug
Report a Security Issue
Get Help
Getting Help FAQ
#django IRC channel
Django Discord
O cial Django Forum
Follow Us
GitHub
Twitter
Fediverse (Mastodon)
News RSS
Django Users Mailing List
Support Us
Sponsor Django
O cial merchandise store
Benevity Workplace Giving Program
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com