Build a link
Your URL
updating
Preview shown without download=1, so it does not save a file every time you change the form. Your link still has it.
Two ways to write the URL
The title can go in the path or the query string, whichever reads better in your markup. A trailing .pdf is ignored, so links can look like real files.
- Query string
/pdf?title=Annual+Report+2026 - Path
/pdf/Annual+Report+2026 - Path, with an extension
/pdf/Annual+Report+2026.pdf - No title, which falls back to "Placeholder Document"
/pdf
Everything else is a query parameter, and mixes with either form:/pdf/Annual+Report?pages=4. Only one path segment is accepted, so deeper paths return a 404 on purpose.
Parameters
Everything is optional. Hit /pdf bare and you still get a valid PDF.
| Parameter | What it does | Example |
|---|---|---|
title | Heading on the first page. Also becomes the filename. | Invoice 2043 |
sub | Second line under the heading: a reference, a date, anything. | ref ABC-123 |
pages | Number of pages, 1 to 20. Defaults to 1. | 3 |
ipsum | Filler flavour: lorem (default), space or corporate. | space |
body | Your own body copy, which overrides ipsum. Use body=none for a blank page. | Your text here |
watermark | Diagonal watermark across every page. Defaults to PLACEHOLDER. | DRAFT |
size | a4 (default), letter or legal. | letter |
download | Present at all, and the browser saves instead of previewing. | 1 |
Examples
- Simplest thing that works
/pdf?title=Annual+Report - The same thing, tidier
/pdf/Annual+Report - Looks like a real file
/pdf/Annual+Report+2026.pdf - With a reference line
/pdf?title=Terms+%26+Conditions&sub=ref+ABC-123 - A chunky multi-page document
/pdf/Employee+Handbook?pages=8&watermark=DRAFT - Space opera filler instead of Latin
/pdf/Mission+Briefing?pages=3&ipsum=space - Forces a download
/pdf/Invoice+2043?download=1
Notes
- Every page is stamped "PLACEHOLDER PDF - not a real document" and carries a watermark, and the footer prints the URL that generated it. None of that can be turned off, which is what stops these being passed off as real documents.
- The filename is built from your title, so
title=Invoice+2043saves asinvoice-2043.pdf, which makes it identifiable in the downloads bar too. - Text is limited to plain ASCII. Accented and non-Latin characters are dropped rather than rendered, which keeps lookalike characters out of documents served from this domain.
- Responses are cached for an hour and served from Cloudflare's edge, so links are fast anywhere.
- CORS is open, so you can
fetch()these as well as link to them. - Intended for testing and prototyping. Please keep usage reasonable so it stays quick for everyone.