Convert html to pdf using Python/Flask

Dmitry_Mahrachev picture Dmitry_Mahrachev · Jan 27, 2015 · Viewed 36.3k times · Source

I want to generate pdf file from html using Python + Flask. To do this, I use xhtml2pdf. Here is my code:

def main():
    pdf = StringIO()
    pdf = create_pdf(render_template('cvTemplate.html', user=user))
    pdf_out = pdf.getvalue()
    response = make_response(pdf_out)
    return response

def create_pdf(pdf_data):
    pdf = StringIO()
    pisa.CreatePDF(StringIO(pdf_data.encode('utf-8')), pdf)
    return pdf

In this code file is generating on the fly. BUT! xhtml2pdf doesn't support many styles in CSS, because of this big problem to mark page correctly. I found another instrument(wkhtmltopdf). But when I wrote something like:

pdf = StringIO()
data = render_template('cvTemplate1.html', user=user)
WKhtmlToPdf(data.encode('utf-8'), pdf)
return pdf

Was raised error:

AttributeError: 'cStringIO.StringO' object has no attribute 'rfind'

And my question is how to convert html to pdf using wkhtmltopdf (with generating file on the fly) in Flask?

Thanks in advance for your answers.

Answer

koppa picture koppa · Jan 27, 2015

The page need render, You can use pdfkit:

https://pypi.python.org/pypi/pdfkit

https://github.com/JazzCore/python-pdfkit

Example in document.

import pdfkit

pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')  # Is your requirement?