Generate PDFs from HTML in your Django, Flask, or FastAPI app with a single requests call. No WeasyPrint, no GTK/Cairo system libraries, no Chromium binary to manage.
Requires only the requests library — already in most Python projects.
<span class="kw">import</span> requests
<span class="kw">import</span> os
RENDERLY_KEY = os.environ[<span class="str">"RENDERLY_API_KEY"</span>]
html = <span class="str">"""
<!DOCTYPE html>
<html>
<head><style>body { font-family: sans-serif; padding: 2rem; }</style></head>
<body>
<h1>Invoice #042</h1>
<p>Total: €1,500.00</p>
</body>
</html>
"""</span>
res = requests.<span class="fn">post</span>(
<span class="str">"https://api.renderlyapi.com/v1/pdf/from-html"</span>,
headers={<span class="str">"Authorization"</span>: <span class="str">f"Bearer {RENDERLY_KEY}"</span>},
json={
<span class="str">"html"</span>: html,
<span class="str">"format"</span>: <span class="str">"A4"</span>, <span class="cm"># or "Letter"</span>
<span class="str">"marginTop"</span>: <span class="str">"20mm"</span>,
<span class="str">"landscape"</span>: <span class="kw">False</span>,
},
)
res.<span class="fn">raise_for_status</span>()
<span class="kw">with</span> <span class="fn">open</span>(<span class="str">"invoice.pdf"</span>, <span class="str">"wb"</span>) <span class="kw">as</span> f:
f.<span class="fn">write</span>(res.content)
<span class="fn">print</span>(<span class="str">"PDF saved!"</span>)<span class="kw">from</span> django.http <span class="kw">import</span> HttpResponse
<span class="kw">from</span> django.template.loader <span class="kw">import</span> render_to_string
<span class="kw">import</span> requests, os
<span class="kw">def</span> <span class="fn">invoice_pdf</span>(request, invoice_id):
invoice = <span class="fn">get_object_or_404</span>(Invoice, pk=invoice_id)
html = <span class="fn">render_to_string</span>(<span class="str">"invoices/pdf.html"</span>, {<span class="str">"invoice"</span>: invoice})
res = requests.<span class="fn">post</span>(
<span class="str">"https://api.renderlyapi.com/v1/pdf/from-html"</span>,
headers={<span class="str">"Authorization"</span>: <span class="str">f"Bearer {os.environ['RENDERLY_API_KEY']}"</span>},
json={<span class="str">"html"</span>: html, <span class="str">"format"</span>: <span class="str">"A4"</span>},
)
res.<span class="fn">raise_for_status</span>()
<span class="kw">return</span> <span class="fn">HttpResponse</span>(
res.content,
content_type=<span class="str">"application/pdf"</span>,
headers={<span class="str">"Content-Disposition"</span>: <span class="str">f'attachment; filename="invoice-{invoice.id}.pdf"'</span>},
)Free account · API key in 60 seconds · No credit card
Get started free →