DomPDF is the most-installed PHP PDF library. For simple documents it works fine. But its CSS renderer implements a subset of CSS 2.1. Flexbox is unsupported. CSS Grid doesn't exist. Multi-column layouts break. Modern web fonts require workarounds.
If your PDF templates use any CSS written after 2012, you're fighting DomPDF's limitations instead of building your product.
Common DomPDF Pain Points
No flexbox: layouts that look correct in the browser produce broken columns in DomPDF.
No CSS Grid: you fall back to HTML tables for any multi-column layout.
Font loading: custom fonts require manual registration and specific formats.
Memory: DomPDF loads the entire DOM in PHP memory on complex pages.
Silent rendering differences between DomPDF versions.
Migration: DomPDF to REST API
The migration is typically a two-line change:
// Before — DomPDF
use Dompdf\Dompdf;
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$pdf = $dompdf->output();
// After — HTML to PDF API (PHP SDK)
use HtmlToPdfApi\HtmlToPdf;
$sdk = new HtmlToPdf(['api_key' => env('HTMLTOPDF_API_KEY')]);
$pdf = $sdk->html($html)->paperSize('a4')->generate()->content();Laravel Migration
If you're using barryvdh/laravel-dompdf:
// Before (barryvdh/laravel-dompdf)
return \PDF::loadView('invoices.pdf', compact('invoice'))->download('invoice.pdf');
// After (HTML to PDF API Laravel SDK)
use HtmlToPdfApi\Laravel\Facades\HtmlToPdf;
$html = view('invoices.pdf', compact('invoice'))->render();
return HtmlToPdf::html($html)->paperSize('a4')->generate()->toResponse($request);What You Gain
Switching to a REST API gives you Chromium rendering, the same engine as Google Chrome. Your existing CSS works as-is: flexbox, grid, modern fonts, SVG. The engine is updated on the API side, so you never upgrade a library to get CSS fixes.
The free tier includes 200 pages/day, enough for development and low-traffic production. For invoice-specific patterns that replace DomPDF, see the invoice PDF generation guide.