У меня есть простой код для рендеринга PDF в моем приложении, и я пытаюсь добавить вложения PDF. Поэтому я прочитал документы и нашел решение .
attachments (list) - Список дополнительных файловых вложений для сгенерированного PDF
документ или None
. Элементы списка: Attachment
объекты, имена файлов,
URL-адреса или файловые объекты.
Поэтому я добавляю вложения к write_pdf
методу:
def render_to_pdf(self, request):
context_dict = {
'application': self,
}
context_dict['pagesize'] = 'A4'
context_dict['documents'] = dict()
urls = []
documents = self.user.documents.all()
for document in documents:
context_dict['documents'][str(document.id)] = dict()
context_dict['documents'][str(document.id)]['signed_name'] = document.signed_file_name
context_dict['documents'][str(document.id)]['name'] = document.file_name
attachment = Attachment(url=BotoGateway().generate_cloudfront_url(document.signed_file_name))
urls.append(attachment)
html_template = get_template('application_form_pdf.html')
rendered_html = html_template.render(context_dict).encode(encoding="UTF-8")
pdf_file = HTML(string=rendered_html, base_url=request.build_absolute_uri()).write_pdf(attachments=urls)
http_response = HttpResponse(pdf_file, content_type='application/pdf')
http_response['Content-Disposition'] = 'filename="report.pdf"'
return http_response
Я пробую 2 варианта: добавить URL-адреса вложения или добавить Attachment
объекты с URL-адресами. Но ничего не сработало. Я получаю правильное имя файла, но при попытке открыть вложение я получаю файл размером 0 байт. Я отлаживаю свой код, и URL-адрес правильный.