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.