Мой пример функции генерации PDF на основании передачи html шаблона и контекста(данные из базы данных).
xhtml2pdffrom django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context
import cStringIO as StringIO
import xhtml2pdf.pisa as pisa
def render_to_pdf(template_src, context_dict, filename='contract.pdf'):
""" Отдаю PDF файл """
template = get_template(template_src)
context = Context(context_dict)
html = template.render(context)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(
StringIO.StringIO(html.encode('utf-8')),
result,
encoding='UTF-8',
show_error_as_pdf=True
)
if not pdf.err:
response = HttpResponse(result.getvalue(), content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename=%s' % filename
return response
return HttpResponse(u'We had some errors!')
def contract_text(request):
text = ContractText.objects.filter(user=request.user)
return render_to_pdf('pfd_template.html', {'text': text}, 'new_contract.pdf')