Make PDF with WeasyPrint in your Flask app.

Once you have WeasyPrint installed and working, just install the extension with pip:

Let’s assume you have a Flask application serving an HTML document at http://example.net/hello/ with a print-ready CSS stylesheet. WeasyPrint can render this document to PDF:

from weasyprint import HTML pdf = HTML ( 'http://example.net/hello/' ) . write_pdf ()

WeasyPrint will fetch the stylesheet, the images as well as the document itself over HTTP, just like a web browser would. Of course, going through the network is a bit silly if WeasyPrint is running on the same server as the application. Flask-WeasyPrint can help:

from my_flask_application import app from flask_weasyprint import HTML with app . test_request_context ( base_url = 'http://example.net/' ): # /hello/ is resolved relative to the context’s URL. pdf = HTML ( '/hello/' ) . write_pdf ()

Just import HTML() or CSS() from flask_weasyprint rather than weasyprint , and use them from within a Flask request context. For URLs below the application’s root URL, Flask-WeasyPrint will short-circuit the network and make the request at the WSGI level, without leaving the Python process.