Inkspan › Guides › How to generate a PDF from HTML in Django
Call the Inkspan /v1/generate/html endpoint from Django to generate a PDF from HTML — no headless browser,
font stack, or rendering infrastructure in your deploy. Keep your API key in the environment and POST.
Keep the key in settings loaded from the environment, not in source. Returning HttpResponse with the PDF content type streams it straight to the browser.
# views.py
import requests
from django.conf import settings
from django.http import HttpResponse
def make_pdf(request):
r = requests.post(
'https://api.inkspan.dev/v1/generate/html',
headers={'X-API-Key': settings.INKSPAN_KEY},
json={"html": "<h1>Invoice</h1>"},
)
r.raise_for_status()
return HttpResponse(r.content, content_type='application/pdf')
| Name | Type | Required | Description |
|---|---|---|---|
html | string | yes | The HTML document or fragment to render. |
filename | string | no | Filename in the response's Content-Disposition. Defaults to document.pdf. |
Returns a PDF as a binary stream with Content-Type: application/pdf and Content-Disposition: attachment; filename=document.pdf. Write the response body straight to disk — do not parse it as JSON.
For anything slow, hand the call to Celery and email or store the result — a synchronous request ties up a worker for the duration of the render.
https:// URLs, or inline them as data: URIs.@page { size: A4; margin: 18mm; } in your HTML to control them.file:// URLs are rejected. Host assets publicly or inline them.| Status | Meaning | Fix |
|---|---|---|
401 | Invalid or missing API key | Send your key in the X-API-Key header. |
402 | Monthly quota exceeded | The response reports used/quota. Upgrade at inkspan.dev/#pricing. |
422 | Missing or invalid parameter | Check required fields in the table above — the body names the offending field. |
Failed requests do not count against your quota; only successful ones are metered.
Get a free API key →Same operation in cURL · Python · Node.js · Other frameworks: Next.js · Laravel · Ruby on Rails · PHP · All guides