Cómo convertir HTML a PDF

· 5 min de lectura

Crear PDFs a partir de HTML es útil para generar facturas, informes, cartas, certificados y cualquier documento donde quieras controlar la disposición con CSS pero distribuir como PDF. Un convertidor HTML-a-PDF basado en navegador usa el motor de renderizado de tu propio navegador, así que el resultado coincide con lo que ves en la vista previa en vivo, sin cargas al servidor.

Cómo convertir HTML a PDF

  1. Pega tu HTML: introduce tu código HTML incluyendo cualquier CSS en línea o etiquetas <style> en el editor. El código puede incluir la estructura completa de la página con encabezados, tablas, imágenes y estilos.
  2. Previsualiza la salida: una vista previa en vivo muestra exactamente cómo se verá tu PDF mientras escribes. Ajusta tu HTML y CSS hasta que la vista previa coincida con lo que quieres.
  3. Genera y descarga: haz clic en el botón generar para crear el PDF en tu navegador, luego descárgalo al instante.

Lo que puedes crear

Una breve historia de la conversión HTML-a-PDF

En la Web temprana (1995-2005), crear un PDF a partir de HTML requería herramientas del lado del servidor: Apache FOP (1999), PrinceXML (2002) o wkhtmltopdf (2010), todas las cuales se ejecutaban en un servidor backend y requerían cargar contenido. La calidad de salida variaba enormemente porque cada motor de renderizado implementaba CSS de manera diferente.

La conversión del lado del navegador se volvió práctica en 2014 con bibliotecas como jsPDF y html2pdf.js, que usan HTML5 Canvas para rasterizar contenido. El resultado era decente para documentos simples pero fallaba en diseños complejos y texto seleccionable.

El gran avance fue el modo headless de Chromium (2017), que expuso el mismo motor de renderizado que Chrome usa para páginas normales. Puppeteer (Node.js, 2017) hizo accesible la generación de PDF Chromium del lado del servidor para los desarrolladores. Los convertidores basados en navegador ahora usan Print API (window.print()) con reglas CSS @page, el mismo camino que usa el modo headless de Chromium, dando una salida idéntica entre la vista previa y el PDF.

En 2026, HTML-a-PDF basado en navegador es la elección correcta para la mayoría de los documentos. El renderizado del lado del servidor solo tiene sentido para documentos muy grandes (100+ páginas), procesamiento por lotes automatizado o cuando necesitas fusionar PDFs de múltiples fuentes.

Consejos de estilo para salida PDF

Usa estilos en línea o etiquetas <style>: las hojas de estilo externas no se cargan. Pon todo tu CSS ya sea en línea en elementos o en un bloque <style> en el HTML.

Establece márgenes de página: usa CSS @page { margin: 20mm; } para controlar el espacio en blanco alrededor de tu contenido en el PDF.

Usa unidades aptas para impresión: mm, cm y pt son más predecibles en PDFs que px o rem. Usa mm para márgenes y espaciado que necesiten coincidir con dimensiones del mundo real.

Evita diseños dependientes del viewport: los anchos en porcentaje y los anchos de píxeles fijos funcionan mejor. Las unidades de viewport (vw, vh) pueden no comportarse como se espera en la salida PDF.

Controla los saltos de página: usa page-break-before, page-break-after y page-break-inside (o los más nuevos break-before, break-after, break-inside) para controlar dónde comienzan las nuevas páginas. break-inside: avoid evita que un solo bloque se divida entre páginas.

Usa @media print para reglas solo PDF: cualquier CSS dentro de @media print { ... } se aplica solo al generar el PDF, no en la vista previa. Útil para ocultar elementos solo de pantalla como barras de navegación.

Ejemplo de modo impresión CSS

@page {
  size: A4;
  margin: 20mm 15mm;
}

@media print {
  .no-print { display: none; }
  h1 { page-break-before: always; }
  table { page-break-inside: avoid; }
  a { color: black; text-decoration: none; }
}

body {
  font-family: 'Helvetica', sans-serif;
  font-size: 11pt;
  line-height: 1.4;
  color: #1a1a1a;
}

Tamaños de página

Valores comunes de @page size:

Agrega landscape para orientación horizontal: size: A4 landscape.

Errores comunes

Alternativas a considerar

Para documentos comerciales cotidianos (facturas, informes, certificados), un convertidor HTML-a-PDF de navegador es más rápido y igualmente pulido.

Consejos

Privacidad y documentos confidenciales

El convertidor HTML-a-PDF se ejecuta completamente en tu navegador. El HTML que pegas, las imágenes que incrustas y el PDF generado todos permanecen en tu dispositivo. No se sube nada a un servidor, no se registra ni se comparte con nadie.

Esto importa porque las entradas HTML-a-PDF a menudo son sensibles: datos de facturas con nombres de clientes, borradores de contratos con términos de precios, informes internos con cifras financieras, certificados con información personal. Los servicios HTML-a-PDF en la nube por diseño envían tu HTML a su servidor, generan el PDF allí y lo envían de vuelta. Algunos retienen entradas para "mejora" o análisis. Para documentos que contienen información confidencial, un convertidor basado en navegador es la opción más segura.

La conversión basada en navegador también funciona sin conexión una vez cargada la página, y es lo suficientemente rápida para retroalimentación instantánea mientras iteras en el HTML.

Preguntas frecuentes

¿El PDF preserva mi estilo CSS?

Sí. El convertidor renderiza tu HTML con el CSS aplicado, incluidos colores, fuentes, márgenes y diseño. El PDF se parece a la página web renderizada, no al código fuente en bruto.

¿Puedo incluir imágenes en el PDF?

Sí. Usa imágenes en base64 (Data URI) para obtener los resultados más fiables. Las URL de imágenes externas pueden funcionar si son accesibles y compatibles con CORS.

¿Se envía mi HTML a un servidor?

No. La conversión se realiza íntegramente en tu navegador. Tu código y el PDF generado nunca salen de tu dispositivo.

¿Qué funcionalidades CSS se admiten?

El CSS estándar, incluidos diseños, colores, fuentes, fondos, bordes y tablas, está bien admitido. Las funciones avanzadas como CSS Grid, animaciones complejas y ciertos casos límite de Flexbox pueden estar limitados.