Действие администратора Django для загрузки нескольких pdf-файлов
Я пытался сделать пользовательское действие Django admin, которое позволяет мне convert html page to pdf
и затем download that pdf
, for each object separately if more than once is selected
. и поскольку есть только один запрос, который должен быть отправлен, я знаю, что будет только один ответ. Поэтому я попытался поместить эти pdf в zip file
и затем загрузить zip... но в конце я вижу corrupted zip file
. Не знаю, где проблема
КОД в admin.py
def report_pdf(self, request, queryset):
from django.template.loader import get_template
from xhtml2pdf import pisa
import tempfile
import zipfile
with tempfile.SpooledTemporaryFile() as tmp:
with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as archive:
for item in enumerate(queryset):
context = {"transactions": item}
template_path = "test-pdf.html"
template = get_template(template_path)
html = template.render(context)
file = open('test.pdf', "w+b")
pisaStatus = pisa.CreatePDF(html.encode('utf-8'), dest=file,
encoding='utf-8')
file.seek(0)
pdf = file.read()
print(pdf)
file.close()
fileNameInZip = f"{item.chp_reference}.zip"
archive.writestr(fileNameInZip, pdf)
tmp.seek(0)
response = HttpResponse(tmp.read(), content_type='application/x-zip-compressed')
response['Content-Disposition'] = 'attachment; filename="pdfs.zip"'
return response