Generating PDFs from HTML is one of the most common automation needs in business applications. Instead of wrestling with PDF libraries and their rendering quirks, you can use a screenshot API with PDF output to convert any HTML page into a clean, printable document.
Why HTML-to-PDF via API?
Traditional PDF generation approaches have serious drawbacks:
- wkhtmltopdf — Outdated rendering engine, poor CSS support
- PDFKit / jsPDF — Imperative API, can't render complex layouts
- Headless Chrome locally — Heavy, fragile, hard to scale
A screenshot API with PDF format support gives you:
- Modern CSS and JavaScript rendering
- Pixel-perfect output that matches your browser preview
- No local dependencies or binary installations
- Scalable from 1 to 100,000 PDFs per month
Example: Generating an Invoice PDF
Step 1: Build Your Invoice as HTML
Design your invoice using standard HTML and CSS. Use print-friendly styles:
<style>
@page { size: A4; margin: 20mm; }
body { font-family: 'Inter', sans-serif; color: #1e293b; }
.invoice-header { display: flex; justify-content: space-between; margin-bottom: 40px; }
.line-items { width: 100%; border-collapse: collapse; }
.line-items th, .line-items td { padding: 10px; border-bottom: 1px solid #e2e8f0; }
</style>
Step 2: Host the Invoice Template
app.get('/invoice/:id', async (req, res) => {
const invoice = await db.getInvoice(req.params.id);
res.send(renderInvoiceHtml(invoice));
});
Step 3: Generate the PDF
const pdfResponse = await fetch(
`https://pxshot.dev/api/capture?url=${encodeURIComponent(invoiceUrl)}&format=pdf&key=YOUR_KEY`
);
const pdfBuffer = await pdfResponse.arrayBuffer();
Other Use Cases
- Receipts — Email PDF receipts after purchase
- Reports — Weekly analytics dashboards as PDFs
- Certificates — Course completion or event attendance certificates
- Contracts — Pre-filled agreement documents
- Tickets — Event tickets with QR codes
Tips for Better PDF Output
- Use
@pageCSS for paper size and margins - Avoid viewport-dependent layouts — use fixed widths
- Test with
window.print()in your browser first - Use web fonts with
@font-facefor consistent typography
PxShot supports PDF output with a single parameter change. Read the docs or try it free.