Introdução: Por que você pode precisar transformar HTML em PDF?
\nImagine a situação: você criou uma linda fatura no site, montou ela em HTML, adicionou estilos, e tudo ficou perfeito. Mas o cliente pede para enviar em PDF. Ou você precisa gerar um relatório com gráficos, tabelas e um layout complexo. Desenhar PDF manualmente é coisa do passado. É muito mais fácil escrever HTML+CSS e depois convertê-lo programaticamente em PDF.
\nA pergunta "How Can I add HTML And CSS Into PDF" no Stack Overflow tem milhares de visualizações — isso mostra que o problema é relevante para muitos desenvolvedores. Neste artigo, vamos explorar as três formas mais populares de fazer isso com PHP, mostrar exemplos de código e ajudar você a escolher a melhor ferramenta para o seu projeto.
\n\nComparação de bibliotecas: Dompdf, TCPDF e mPDF
\nAntes de escrever código, vamos entender o que escolher. No mercado PHP, existem três principais "pilares" para converter HTML em PDF:
\n- \n
- Dompdf — biblioteca leve, entende bem CSS 2.1 e parcialmente CSS 3. Ideal para documentos simples. \n
- TCPDF — poderosa e estável, mas exige mais código para layouts complexos. Não é muito amigável com CSS. \n
- mPDF — a melhor escolha se você precisa de suporte a CSS avançado (flexbox, gradientes, transparência). É a biblioteca mais "CSS-friendly". \n
Neste artigo, vamos focar no mPDF como a opção mais prática, mas também mostraremos exemplos com Dompdf para comparação.
\n\nInstalação das bibliotecas via Composer
\nPrimeiro, vamos criar um projeto e instalar as dependências. Abra o terminal e execute:
\ncomposer require mpdf/mpdf\nSe quiser testar o Dompdf:
\ncomposer require dompdf/dompdf\nAgora, crie um arquivo gerar_pdf.php na raiz do projeto e comece a escrever o código.
Exemplo 1: HTML simples para PDF com mPDF
\nVamos começar com o exemplo mais básico. Suponha que temos um template HTML de fatura:
\n<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; }\n .invoice { max-width: 800px; margin: 0 auto; }\n .header { background: #4CAF50; color: white; padding: 20px; }\n .total { font-size: 24px; font-weight: bold; }\n </style>\n</head>\n<body>\n <div class="invoice">\n <div class="header">Fatura nº 123 de 01/03/2025</div>\n <p>Cliente: João Silva</p>\n <table border="1" width="100%">\n <tr><th>Serviço</th><th>Preço</th></tr>\n <tr><td>Desenvolvimento de site</td><td>R$ 5.000,00</td></tr>\n <tr><td>Otimização SEO</td><td>R$ 1.500,00</td></tr>\n </table>\n <div class="total">Total: R$ 6.500,00</div>\n </div>\n</body>\n</html>\nAgora, o código PHP para gerar o PDF:
\n<?php\nrequire_once __DIR__ . '/vendor/autoload.php';\n\n$html = file_get_contents('fatura.html'); // ou apenas uma string com HTML\n\n$mpdf = new \\Mpdf\\Mpdf();\n$mpdf->WriteHTML($html);\n$mpdf->Output('fatura.pdf', 'I'); // 'I' — abrir no navegador, 'D' — baixar\n?>\nExecute o script — e o PDF está pronto! Observe que o mPDF automaticamente capturou o CSS do <style>. Essa é a resposta para a pergunta "How Can I add HTML And CSS Into PDF" — basta passar o HTML com CSS para o método WriteHTML().
Exemplo 2: Trabalhando com arquivos CSS externos
\nMuitas vezes, os estilos ficam em arquivos separados. O mPDF suporta a inclusão de CSS externo via <link>:
<?php\n$html = '\n<!DOCTYPE html>\n<html>\n<head>\n <link rel="stylesheet" type="text/css" href="estilo.css">\n</head>\n<body>\n <h1>Relatório do m