Playwright-powered

PDF Generation
Made Simple

Render HTML in a real browser, get pixel-perfect PDFs. Resumes, receipts, invoices, ebooks — if it's HTML, it becomes a perfect PDF.

Personal project — built for my own use (dibe.sh resume, IPO platform). Public API available with strict rate limits. For higher access, contact me.
View Source → API Docs

Capabilities

What It Does

🌐

URL to PDF

Point at any URL — the service renders the full page with CSS, JS, fonts, and images, then outputs a PDF.

📝

HTML to PDF

Send raw HTML snippets or full documents. Watermarks, headers, footers, custom dimensions — all supported.

Idle Auto-Scale

Browser launches on demand, auto-closes after 30s idle. Zero memory waste when not in use.

🔒

API Key Auth

Every request requires an API key. Rate limiting, CORS, and request timeouts built in.

📐

Custom Dimensions

Non-standard sizes for receipts, labels, tickets. Or stick with A4, Letter, Legal.

🏷️

Watermarks

Overlay text with custom font, size, color, and angle. Perfect for drafts and confidential docs.

Integration

Quick Start

POST /pdf — Generate from raw HTML (requires API key)

curl -X POST https://pdf.dibe.sh/pdf \ -H "Content-Type: application/json" \ -H "X-API-Key: your-key" \ -d '{"html":"<h1>Receipt</h1>","watermark":{"text":"COPY"}}' \ -o receipt.pdf

POST /pdf/url — Generate from any URL (requires API key)

curl -X POST https://pdf.dibe.sh/pdf/url \ -H "Content-Type: application/json" \ -H "X-API-Key: your-key" \ -d '{"url":"https://dibe.sh/resume/print","filename":"Resume","format":"A4"}' \ -o resume.pdf

POST /api/public/pdf — Public API (no key needed, 1 req/min)

curl -X POST https://pdf.dibe.sh/api/public/pdf \ -H "Content-Type: application/json" \ -d '{"html":"<h1>Hello</h1>"}' \ -o output.pdf # Rate limit: 1 request per 65 seconds per IP # Max HTML size: 500KB # No watermarks, custom dimensions, or URL rendering

Next.js integration (requires API key)

const res = await fetch(`${PDF_SERVICE_URL}/pdf/url`, { method: "POST", headers: { "Content-Type": "application/json", "X-API-Key": process.env.PDF_SERVICE_API_KEY, }, body: JSON.stringify({ url: `${APP_URL}/resume/print`, filename: "Resume", format: "A4", }), }); const pdf = await res.blob();

Ecosystem

More Projects

Portfolio

dibe.sh

Personal portfolio and resume — built with Next.js 15, SQLite, real-time chat, and admin CMS.

Visit →
Platform

ipo.dibe.sh

Bulk IPO management platform — subscriber web UI, worker cluster, and engine automation.

Visit →
Dev

dev.dibe.sh

Development environment — staging and testing for all projects in the dibe.sh ecosystem.

Visit →
Open Source

GitHub

Open source projects, tools, and contributions. Everything is public.

View →