Introducción: Por qué HTML+CSS a PDF es un dolor de cabeza (y cómo solucionarlo)
Imagine: está desarrollando un sitio web en PHP y el cliente le pide: «Haz que el botón «Descargar PDF» exporte facturas, informes o certificados bonitos». Usted piensa: «¡Fácil! Tomaré una plantilla HTML, le añadiré estilos CSS y la convertiré a PDF». Pero la realidad resulta más compleja: las fuentes se desajustan, las tablas se rompen y la propiedad CSS flexbox funciona a veces sí y a veces no.
En Stack Overflow, la pregunta «How can I add HTML and CSS into PDF» ha acumulado miles de visitas. Esto significa que el problema es familiar para casi todos los desarrolladores PHP. En este artículo, analizaremos tres bibliotecas populares — Dompdf, TCPDF y mPDF — y mostraremos cómo convertir correctamente HTML con CSS a PDF en PHP.
Aprenderá:
- Qué biblioteca elegir para diferentes tareas
- Cómo incluir estilos CSS (externos, incrustados, @import)
- Cómo resolver problemas típicos: cirílico, tablas, imágenes
- Cómo escribir código funcional para generar PDF desde HTML
¿Por qué no se puede simplemente guardar HTML como PDF?
Los navegadores renderizan HTML+CSS perfectamente, pero los generadores de PDF no son navegadores. Utilizan sus propios motores de renderizado que no soportan todas las propiedades CSS. Por ejemplo:
flexboxygrid— no funcionan en todas partesborder-radius— tiene soporte parcial@media print— puede ser ignorado- Las fuentes (especialmente cirílico) — requieren ser incluidas
La buena noticia: las bibliotecas PHP modernas mejoran constantemente y, con el enfoque correcto, se puede obtener un PDF que se vea casi como en el navegador.
Resumen de bibliotecas para convertir HTML+CSS a PDF en PHP
Analicemos las tres herramientas más populares. Cada una tiene sus puntos fuertes.
1. Dompdf
Ventajas: ligero, fácil de instalar con Composer, buen soporte para CSS 2.1 y soporte parcial para CSS3. Ideal para documentos simples como facturas y recibos.
Desventajas: soporte débil para diseños complejos (flexbox, grid), problemas con grandes volúmenes de HTML.
2. TCPDF
Ventajas: estable, potente, soporta Unicode (cirílico), funciona sin bibliotecas externas. Ideal para archivos PDF complejos con gráficos, códigos QR y tablas de varias páginas.
Desventajas: sintaxis compleja, los estilos CSS deben incluirse manualmente, el código resulta voluminoso.
3. mPDF
Ventajas: el mejor soporte para CSS (incluyendo @media, float, position), excelente manejo del cirílico, soporte para estilos de archivos externos. Considerado el «punto medio dorado».
Desventajas: más pesado que Dompdf, puede ser lento en documentos grandes.
Recomendación: para un inicio rápido, use Dompdf. Para proyectos serios, use mPDF. TCPDF, si necesita la máxima flexibilidad y está dispuesto a escribir más código.
Ejemplo práctico: Generación de PDF desde HTML con Dompdf
Escribamos código real. Instalemos Dompdf a través de Composer:
composer require dompdf/dompdfAhora creemos un script PHP que convierta una plantilla HTML a PDF:
<?phprequire_once 'vendor/autoload.php';
use Dompdf\\Dompdf;use Dompdf\\Options;
// Configuración$options = new Options();$options->set('defaultFont', 'DejaVu Sans'); // Soporte para cirílico$options->set('isRemoteEnabled', true); // Permitir imágenes externas
$dompdf = new Dompdf($options);
// Plantilla HTML$html = '<!DOCTYPE html><html><head> <style> body { font-family: DejaVu Sans, sans-serif; } .invoice { width: 100%; max-width: 80