I need to generate some PDF reports within django. I have been looking for library for pdf printing but did not find open source (free) one with features I needed. AS I already have view which generates html I was looking for tool which can transform html to pdf. So I decide to use wkhtmltopdf tool which miss one required feature (repeating table header at every new page) but have good looking generated documents. For installation of wkhtmltopdf please see official instructions. I have used static version (it is bigger but has better features).
In django I have used following code for generating pdf. This could give you idea how to do it yourself.
#my functions to get data and to render html data = get_offer_data(id) html = offer_html(request, data) #preparing wkhtmltopdf command to run using pipes #WKHTML2PDF_COMMAND is string set in project settings # an looks like /path/to/command #Popen has little confusing way to accept command arguments #Last two "-" are importnat as this is the way to tell #wkhtmltopdf to use pipes for input and output #This is how this command will look in shell # >wkhtmltopdf --footer-right [page]/[toPage] --print-media-type --encoding UTF-8 - - wkhtml2pdf = subprocess.Popen((WKHTML2PDF_COMMAND, "--footer-right", "[page]/[toPage]", "--print-media-type", "--encoding", "UTF-8", "-", "-"), stdin=subprocess.PIPE, stdout=subprocess.PIPE) wkdata = wkhtml2pdf.communicate(html.encode('utf8')) pdf = wkdata[0]; response = HttpResponse(mimetype='application/pdf') response['Content-Disposition'] = 'attachment; filename=Offer_' + data['offer'].number + '.pdf' response.write(pdf) return response
If you have long tables (which are extending over more pages) be careful as they will probably be broken between pages.