🐘 PHP

HTML to PDF in PHP

Generate pixel-perfect PDFs from HTML in your Laravel, Symfony, or plain PHP project with cURL or Guzzle. No TCPDF, no DomPDF quirks, no Chromium headaches.

Quickstart (cURL)

generate_pdf.php
<span class="kw">&lt;?php</span>

<span class="kw">$html</span> = <span class="str">'&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;&lt;style&gt;body { font-family: sans-serif; padding: 2rem; }&lt;/style&gt;&lt;/head&gt;
  &lt;body&gt;&lt;h1&gt;Invoice #042&lt;/h1&gt;&lt;p&gt;Total: €1,500.00&lt;/p&gt;&lt;/body&gt;
&lt;/html&gt;'</span>;

<span class="kw">$ch</span> = curl_init(<span class="str">'https://api.renderlyapi.com/v1/pdf/from-html'</span>);
curl_setopt_array(<span class="kw">$ch</span>, [
    CURLOPT_RETURNTRANSFER => <span class="kw">true</span>,
    CURLOPT_POST           => <span class="kw">true</span>,
    CURLOPT_HTTPHEADER     => [
        <span class="str">'Authorization: Bearer '</span> . getenv(<span class="str">'RENDERLY_API_KEY'</span>),
        <span class="str">'Content-Type: application/json'</span>,
    ],
    CURLOPT_POSTFIELDS => json_encode([
        <span class="str">'html'</span>      => <span class="kw">$html</span>,
        <span class="str">'format'</span>    => <span class="str">'A4'</span>,
        <span class="str">'marginTop'</span> => <span class="str">'20mm'</span>,
    ]),
]);

<span class="kw">$pdf</span> = curl_exec(<span class="kw">$ch</span>);
curl_close(<span class="kw">$ch</span>);

<span class="cm">// Stream to browser:</span>
header(<span class="str">'Content-Type: application/pdf'</span>);
header(<span class="str">'Content-Disposition: attachment; filename="invoice.pdf"'</span>);
echo <span class="kw">$pdf</span>;

Laravel (Guzzle)

app/Http/Controllers/InvoiceController.php
<span class="kw">use</span> IlluminateSupportFacadesHttp;

<span class="kw">public function</span> <span class="fn">downloadPdf</span>(Invoice <span class="kw">$invoice</span>)
{
    <span class="kw">$html</span> = view(<span class="str">'invoices.pdf'</span>, compact(<span class="str">'invoice'</span>))->render();

    <span class="kw">$response</span> = Http::withToken(config(<span class="str">'services.renderly.key'</span>))
        ->post(<span class="str">'https://api.renderlyapi.com/v1/pdf/from-html'</span>, [
            <span class="str">'html'</span>   => <span class="kw">$html</span>,
            <span class="str">'format'</span> => <span class="str">'A4'</span>,
        ]);

    <span class="kw">return</span> response(<span class="kw">$response</span>->body(), <span class="num">200</span>, [
        <span class="str">'Content-Type'</span>        => <span class="str">'application/pdf'</span>,
        <span class="str">'Content-Disposition'</span> => <span class="str">"attachment; filename=invoice-{<span class="kw">$invoice</span>->id}.pdf"</span>,
    ]);
}

Also available for

Generate your first PDF

Free account · API key in 60 seconds · No credit card

Get started free →