Django Change File name in PDF export

Question:

I found this handy code in the Django Docs:

from reportlab.pdfgen import canvas
from django.http import HttpResponse

    def some_view(request):
        # Create the HttpResponse object with the appropriate PDF headers.
        response = HttpResponse(content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'

        # Create the PDF object, using the response object as its "file."
        p = canvas.Canvas(response)

        # 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()
        return response

I would like to pass a variable to the function as variable name, but cannot figure it out (though I am sure it is super easy).

Anyone have an idea?

Thanks so much!

Asked By: kftb

||

Answers:

filename="somefilename.pdf" there is place where you can determine your filename.
You can use it as:

filename = 'somefilename.pdf'
response['Content-Disposition'] = 'attachment; filename="{}"'.format(filename)

Hope it might helps you:

Add one more argument named “name” to the view “some_view” and replace the filename with the argument value.

def hello_pdf(request, name):

# Create the HttpResponse object with the appropriate PDF headers.
response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=%s.pdf'% name

temp = StringIO()

# Create the PDF object, using the StringIO object as its "file."
p = canvas.Canvas(temp)

# 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.
p.showPage()
p.save()

# Get the value of the StringIO buffer and write it to the response.
response.write(temp.getvalue())
return response

Check the name argument replacing the filename in the 4th line of code. Also don’t forget to update the urls.py like below:

 url(r'^(?P<name>w+)/$', 'app.some_view')

After all pass the filename you wish to replace with url like below:

http://yourwebsite.com/name-of-file/

Answered By: Vijesh Venugopal

If you want to force viewing the PDF in browser with given filename but without automatic download, you can use "inline" instead of "attachment":

response["Content-Disposition"] = f'inline; filename="{file_name}"'
Answered By: Laurent Lyaudet
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.