desperadik
@desperadik
Истина где-то рядом.

Как упростить код при генерации PDF?

Доброе время суток!
view.py:
......
/*Генерация pdf и сохранения его на сервере*/
result_pdf = open("%s%s.pdf" % (settings.MEDIA_ROOT, doc.title), 'wb')
pdf = pisa.CreatePDF(StringIO.StringIO(html.encode("UTF-8")), result_pdf, encoding='UTF-8')
result_pdf.close()

/*Генерация pdf для выдачи в response*/
result_response = StringIO.StringIO()
pdf_for_response = pisa.CreatePDF(StringIO.StringIO(html.encode("UTF-8")), result_response, encoding='UTF-8')
response['Content-Disposition'] = 'filename=test.pdf'
return response
....


Как можно упростить код?

А именно, не хотелось бы два раза юзать CreatePDF.
  • Вопрос задан
  • 2765 просмотров
Решения вопроса 2
yttrium
@yttrium
учите python!!

обобщаете. определяйте функцию:
def create_pdf(target):
    return pisa.CreatePDF(StringIO.StringIO(html.encode("UTF-8")), target, encoding='UTF-8')

домашнее задание:
как вызвать функцию?
Ответ написан
Комментировать
qmax
@qmax
программер
учите django!!

Во-первых в response можно передать данные, прочитанные из только что созданного файла и сконвертированные в байт-строку.
response = HttpRespose(data, content_type="application/pdf")

Во-вторых, в response можно передать итератор, котрый будет читать файл частями и передавать ответ потоково.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
desperadik
@desperadik Автор вопроса
Истина где-то рядом.
@qmax, @yttrium . СПАСИБО, по пинали!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы