Укажите заголовок вкладки с помощью reportlab generated pdf

Этот вопрос очень прост, но я не могу найти на нем никаких данных. Когда я создаю pdf файл с reportlab, передавая httpresponse как файл, браузеры, настроенные для отображения файлов, отображают pdf правильно. Тем не менее, заголовок вкладки остается "(анонимно) 127.0.0.1/whatnot", что для пользователя выглядит некрасиво.

Так как большинство сайтов способны каким-то образом отобразить подходящий заголовок, я думаю, что это выполнимо... Есть ли какой-то параметр заголовка, который я могу передать в pdf? Или какой-то заголовок для ответа? Это мой код:

def render_pdf_report(self, context, file_name):
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'filename="{}"'.format(file_name)

    document = BaseDocTemplate(response, **self.get_create_document_kwargs())
    #  pdf generation code
    document.build(story)
    return response

Ответ 1

Похоже, Google Chrome вообще не отображает названия PDF. Я протестировал ссылку в вашем комментарии (biblioteca.org.ar), и она отображается в Firefox как "211756.pdf", кажется, что есть пустой заголовок и Затем Firefox просто отображает имя файла вместо полного URL-адреса.

Я воспроизвел то же поведение, используя этот кусок кода:

from reportlab.pdfgen import canvas

c = canvas.Canvas("hello.pdf")
c.setTitle("hello stackoverflow")
c.drawString(100, 750, "Welcome to Reportlab!")
c.save()

Открытие в Firefox дает необходимый результат:

Я узнал о setTitle в Руководство пользователя ReportLab. Он указан на странице 16.:)

Ответ 2

Я также искал это, и я нашел это в исходном коде.

ReportLab/ЦСИ /ReportLab/меченосцы/doctemplate.py @line - 467

Мы можем установить заголовок документа с помощью

document.title = 'Sample Title'

Ответ 3

Если вы используете trml2pdf, вам нужно будет добавить атрибут title в теге шаблона, т.е., < template title= "Invoices"...

Ответ 4

В дополнение к тому, что сказали другие, вы можете использовать

Canvas.setTitle("yourtitle")

который хорошо отображается в Chrome.