title: Optimize PDF conversion in Django / Python
body: <p>I have a webapp that export reports in PDF. Everything is fine when the query returns less than 100 values. When the number of records raise above 100 the server raise a 502 Proxy Error. The report outputs fine in HTML. The process that hangs up the server is the conversion from html to PDF.
  I'm using <a href="http://www.xhtml2pdf.com/" rel="nofollow noreferrer">xhtml2pdf (AKA pisa 3.0)</a> to generate the PDF. The algorythm is something like this:</p>
  
  <pre><code>def view1(request, **someargs):
      queryset = someModel.objects.get(someargs)
      if request.GET['pdf']:
          return pdfWrapper('template.html',queryset,'filename')
      else:
          return render_to_response('template.html',queryset)
  
  def pdfWrapper(template_src, context_dict, filename):
      ################################################
      #
      # The code comented below is an older version
      # I updated the code according the comment recived
      # The function still works for short HTML documents
      # and produce the 502 for larger onese
      #
      ################################################
  
      ##import cStringIO as StringIO
      import ho.pisa as pisa
      from django.template.loader import get_template
      from django.template import Context
      from django.http import HttpResponse
      ##from cgi import escape
  
      template = get_template(template_src)
      context = Context(context_dict)
      html  = template.render(context)
  
      response = HttpResponse()
      response['Content-Type'] ='application/pdf'
      response['Content-Disposition']='attachment; filename=%s.pdf'%(filename)
  
      pisa.CreatePDF(
          src=html,
          dest=response,
          show_error_as_pdf=True)
  
      return response
  
      ##result = StringIO.StringIO()
      ##pdf = pisa.pisaDocument(
      ##            StringIO.StringIO(html.encode("ISO-8859-1")),
      ##            result)
      ##if not pdf.err:
      ##    response = HttpResponse(
      ##                   result.getvalue(), 
      ##                   mimetype='application/pdf')
      ##    response['Content-Disposition']='attachement; filename=%s.pdf'%(filename)
      ##    return response
      ##return HttpResponse('Hubo un error&lt;pre&gt;%s&lt;/pre&gt;' % escape(html))
  </code></pre>
  
  <p>I've put some thought about creating a buffer so the server can free some memory but I didn't find anything yet.
  Anyone could help? please?       </p>