views:

707

answers:

2

Let's say I've got an HTML / CSS page with some images in it, and I wanted to generate a PDF from that source in Python - possible?

+2  A: 

http://www.xhtml2pdf.com/

install was a little quirky for me, but otherwise it worked fine.

phillc
Just ran into that after posting. Working perfectly!
Nick Sergeant
+3  A: 

You can do something like this using Pisa:

def receipt(request, id):
    import ho.pisa as pisa
    from django.template.loader import render_to_string
    from datetime import datetime

    r = get_or_404(id, request.affiliate)    
    now = datetime.now()
    contents = render_to_string('home/reservations/receipt.html', {
        'reservation': r,
        'today': now
    })
    filename = now.strftime('%Y-%m-%d') + '.pdf'
    response = HttpResponse(mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=' + filename
    pdf = pisa.CreatePDF(contents, response)
    if pdf.err:
        message(request, 'Unable to generate the receipt.')
        return HttpResponseRedirect(reverse('view_reservation', args=[r.id]))    
    else:
        return response

(This is a Django view that generates a receipt but obviously you can use Pisa in whatever setting)

You're going to have to tweak the HTML to make it play as nice as possible with Pisa, though.

Paolo Bergantino