Django Return Pdf With Reportlab
Sometime you need to print a pdf from your site or your web app with some custom data. In Python you can make pdf with ReportLab12 and some other module but I LOVE ReportLab3.
What do I need?
You only need Django and ReportLab
pip install django
pip install reportlab
Write the pdf
When you have the requirements you can write the code for the pdf. For example this is a example of a class for printing A6 pdf
from reportlab.lib.pagesizes import A6, landscape
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph
from reportlab.platypus import SimpleDocTemplate
class CustomDocTemplate(SimpleDocTemplate):
def __init__(
self,
filename,
right_margin=7,
left_margin=7,
top_margin=7,
bottom_margin=7,
pagesize=landscape(A6),
**kw,
):
super().__init__(filename, **kw)
self.rightMargin = right_margin
self.leftMargin = left_margin
self.topMargin = top_margin
self.bottomMargin = bottom_margin
self.pagesize = pagesize
class A6Printer:
def get_pdf(self, buffer):
self.buffer = buffer
styles = getSampleStyleSheet()
doc = CustomDocTemplate(buffer)
elements = []
elements.append(Paragraph("Title of the PDF", style=styles["Heading2"]))
elements.append(Paragraph("Heading", style=styles["Heading4"]))
elements.append(Paragraph("Text inside the pdf", style=styles["BodyText"]))
doc.build(elements)
pdf = buffer.getvalue()
buffer.close()
return pdf
Make the view
Now we need a view for Django. Usualy I write ClassView so this is an example for the printer define in the last example.
from django.views import View
class A6View(View):
def get(self, request, *args, **kwargs):
response = HttpResponse(content_type="application/pdf")
response["Content-Disposition"] = f'attachment; filename="Example.pdf"'
a6p = A6Printer()
pdf = a6p.get_pdf(BytesIO())
response.write(pdf)
return response
With this ClassView you can download a generated pdf with static data, dinamic data or some static and some dynamic data. I am working on more post about Reportlab so if you have some suggestion or question Tweet me. Thanks
Famous library for python. I wrote an article about it some time ago Letterhead With ReportLab ↩︎
You can read more ReportLab: PDF Processing with Python ↩︎
Comments
To reply to this post, you can send a Webmention or you can toot me at [email protected]
You mentioned this post on your site? Send a Webmention
This post is part of the Django Tricks series
- Django With Barcode and Qrcode
- Django Return Pdf With Reportlab
- Django List View With Show More
- Message and Allert With Django and Boostrap
This post is part of the Printing With ReportLab series
- Letterhead With ReportLab
- Django Return Pdf With Reportlab