Introdução: Por que HTML+CSS em PDF é uma dor de cabeça (e como resolvê-la)
Imagine: você está desenvolvendo um site em PHP, e o cliente pede: "Faça com que o botão 'Baixar PDF' exporte faturas, relatórios ou certificados bonitos". Você pensa: "Fácil! Vou pegar um template HTML, adicionar estilos CSS e converter para PDF". Mas a realidade é mais complicada: fontes flutuam, tabelas quebram, e a propriedade CSS flexbox funciona de forma inconsistente.
No Stack Overflow, a pergunta "How can I add HTML and CSS into PDF" acumulou milhares de visualizações. Isso significa que o problema é familiar para quase todo desenvolvedor PHP. Neste artigo, vamos analisar três bibliotecas populares — Dompdf, TCPDF e mPDF — e mostrar como converter corretamente HTML com CSS em PDF no PHP.
Você aprenderá:
- Qual biblioteca escolher para diferentes tarefas
- Como incluir estilos CSS (externos, embutidos, @import)
- Como resolver problemas comuns: cirílico, tabelas, imagens
- Como escrever código funcional para gerar PDF a partir de HTML
Por que não posso simplesmente salvar HTML como PDF?
Os navegadores renderizam HTML+CSS perfeitamente, mas os geradores de PDF não são navegadores. Eles usam seus próprios motores de renderização, que não suportam todas as propriedades CSS. Por exemplo:
flexboxegrid— não funcionam em todos os lugaresborder-radius— suportado parcialmente@media print— pode ser ignorado- Fontes (especialmente cirílico) — exigem inclusão
A boa notícia: as bibliotecas PHP modernas estão em constante melhoria e, com a abordagem correta, você pode obter um PDF que se parece quase com o do navegador.
Visão geral das bibliotecas para converter HTML+CSS em PDF no PHP
Vamos analisar as três ferramentas mais populares. Cada uma tem seus pontos fortes.
1. Dompdf
Prós: leve, fácil de instalar via Composer, bom suporte a CSS 2.1 e parcialmente CSS3. Ideal para documentos simples — faturas, recibos.
Contras: suporte fraco para layouts complexos (flexbox, grid), problemas com grandes volumes de HTML.
2. TCPDF
Prós: estável, poderoso, suporta Unicode (cirílico), funciona sem bibliotecas externas. Ideal para PDFs complexos com gráficos, QR codes, tabelas de várias páginas.
Contras: sintaxe complexa, estilos CSS precisam ser incluídos manualmente, o código fica extenso.
3. mPDF
Prós: melhor suporte a CSS (incluindo @media, float, position), excelente trabalho com cirílico, suporte a estilos de arquivos externos. Considerado o "meio-termo ideal".
Contras: mais pesado que o Dompdf, pode ser lento em documentos grandes.
Recomendação: para um início rápido, use Dompdf. Para projetos sérios, use mPDF. TCPDF — se você precisar de máxima flexibilidade e estiver disposto a escrever mais código.
Exemplo prático: Geração de PDF a partir de HTML com Dompdf
Vamos escrever um código real. Instale o Dompdf via Composer:
composer require dompdf/dompdfAgora, crie um script PHP que converte um template HTML em PDF:
<?phprequire_once 'vendor/autoload.php';
use Dompdf\\Dompdf;use Dompdf\\Options;
// Configurações$options = new Options();$options->set('defaultFont', 'DejaVu Sans'); // Suporte a cirílico$options->set('isRemoteEnabled', true); // Permite imagens externas
$dompdf = new Dompdf($options);
// Template HTML$html = '<!DOCTYPE html><html><head> <style> body { font-family: DejaVu Sans, sans-serif; } .invoice { width: 100%; max-width: 80