PDF generation for Claude · Markdown in, a real PDF out
Ask Claude for a PDF. Get a clean one — not a 50-line script.
Today, "make me a PDF" makes Claude write fragile reportlab layout code. Omitly gives it a real tool: one line of Markdown, rendered locally through a browser engine into a printed-looking PDF. Nothing uploaded.
Same invoice. Same data. Two very different amounts of work.
A careful reportlab script can look fine — but the model had to write and maintain the layout, and it breaks the moment the content changes. With Omitly the layout is the browser's job, and the blockquote, table sizing and typography come for free.
The difference isn't the picture. It's what you had to write.
Today · imperative layout code
# what Claude writes today (excerpt)
table = Table(data, colWidths=[90*mm, 30*mm, 40*mm])
table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), HexColor("#f5f6f8")),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("GRID", (0,0), (-1,-1), 0.5, HexColor("#d0d4da")),
("ALIGN", (1,0), (-1,-1), "RIGHT"),
# ...padding, a ParagraphStyle to fake the quote,
# and it breaks if the content changes
])) With Omitly · just the content
# what you write with Omitly
| Item | Qty | Price |
|--------------|----:|-------:|
| Sausage roll | 12 | $48.00 |
| Lamington | 6 | $18.00 |
> Thanks for your business. Why give Claude a real PDF tool
The model stops being a typesetter
Claude is great at content, not at hand-coding column widths and table styles. Omitly lets it write Markdown and hands the layout to a real browser engine — the part it's bad at disappears.
It actually looks printed
Rendered through the same engine family that lays out the web: real typography, auto-sized tables, proper blockquotes and page breaks. Not a script's best guess at geometry.
It doesn't break when the content changes
Hardcoded coordinates overflow the moment a row gets longer. Markdown reflows. Add a column, paste a paragraph, swap the data — it just lays out.
Nothing is uploaded
Generation runs on your machine. No cloud PDF API, no document leaving your disk. The same local-first principle as Omitly's redaction.
And when the PDF holds something sensitive — redact it, locally.
Omitly is one local toolkit for the whole document life: create and style PDFs from Markdown, then permanently redact what shouldn't be shared — removing the underlying data from the file and verifying it's gone, with a signed audit log. Your files never leave your machine, and Claude never even sees the secrets it helps you remove.
Frequently asked questions
Can Claude make a PDF?
Yes, but by default it writes a throwaway script (usually reportlab or fpdf) and runs it. That works for simple cases, but the model has to hand-code the layout, the output is easy to break, and anything beyond a basic page gets fragile. Omitly gives Claude a real PDF tool instead: you give it Markdown or HTML, and it renders a clean PDF locally through a browser engine.
Why does the PDF Claude generates look bad?
Libraries like reportlab generate the PDF imperatively — you position elements and define styles in code. There's no CSS layout engine, so the model effectively becomes the typesetter, and small changes to the content can overflow the page. Omitly separates the jobs: Claude writes the content, a real browser engine does the styling and layout.
Is this a reportlab alternative?
For the 'ask an AI to make a PDF' use case, yes. reportlab is a generation library with limited styling; Omitly renders Markdown/HTML through a headless browser, so you get web-quality typography from a single Markdown string instead of dozens of lines of layout code.
Does my document get uploaded?
No. Omitly generates the PDF on your machine and never sends the content to a third-party service. The same applies to its redaction: your files stay local.
Can it also redact PDFs?
Yes. Omitly is a local PDF toolkit: create and style PDFs, and permanently redact them — removing the underlying data from the file and verifying nothing survives, with a signed audit log. All on-device.