CSS para imprimir en papel
Los diseños de impresión basados en CSS se usan cada vez más para generar PDFs, libros, etiquetas e informes directamente desde HTML, pero los desarrolladores se encuentran con soporte inconsistente en los navegadores y con funciones ausentes como paginación fiable, encabezados/pies y tipografía avanzada. Muchos comparten soluciones y herramientas —como Paged.js, WeasyPrint, PrinceXML y Chrome sin interfaz— para obtener control preciso sobre el tamaño de página, los saltos de tabla, los números de página y las notas al pie sin recurrir al software tradicional de autoedición. La visión general es que CSS para impresión es lo bastante potente y flexible para muchos flujos de trabajo reales, pero aún no es lo bastante robusto ni estandarizado para sustituir por completo a la composición tipográfica dedicada o al ecosistema PDF.
Adopción de CSS para impresión
- Muchos comentaristas usan HTML/CSS como su forma principal de generar documentos imprimibles: facturas, ebooks, libros de RPG, etiquetas, novelas web, informes, CVs, certificados, libros de curso y libros de texto.
- Ventajas citadas: iteración rápida, plantillas fáciles, integración con CMS/APIs/Markdown/Asciidoc, archivos “fuente” pequeños y flujos de trabajo de “simplemente usar un navegador”.
- Algunos informan de un gran ahorro de tiempo frente a herramientas como InDesign para maquetación de textos largos, cuando una tipografía “lo bastante buena” es aceptable.
Problemas del navegador y del motor
- El soporte de impresión entre navegadores se describe como pobre e inconsistente; varias personas se centran solo en Chrome.
- Chrome: para muchos, el mejor en general para CSS de impresión, pero aún con fallos en tablas multipágina y márgenes de impresión.
- Firefox: informes de imágenes o páginas enteras que desaparecen al imprimir, y una afirmación sobre un fallo de larga data. Otros dicen no haber tenido esos problemas.
- Safari: se informa que ignora los márgenes de página.
- Impresoras de etiquetas/térmicas: especialmente dolorosas en el navegador; la gente recurre a aplicaciones nativas, Electron o demonios de impresión.
Herramientas y flujos de trabajo
- Herramientas populares: Paged.js, WeasyPrint, PrinceXML, Flyingsaucer, wkhtmltopdf, Puppeteer/Playwright + Chrome sin interfaz, website2pdf, paper-css, Gutenberg, Hartija y Asciidoctor web-pdf.
- Paged.js es elogiado con frecuencia por implementar funciones de paged media (notas al pie, números de página, encabezados/pies de página repetidos).
- Algunas organizaciones prohíben ciertos runtimes (por ejemplo, Python), lo que limita la elección de generadores.
Preocupaciones de tipografía y calidad
- Se considera que CSS para impresión es mucho más débil que las herramientas profesionales de DTP para tipografía avanzada: color CMYK, kerning fino, evitar ríos, puntuación colgante, reglas específicas por idioma y, especialmente, escrituras complejas (por ejemplo, japonés).
- Las soluciones alternativas (espacios no separables, spans con letter-spacing, ajustes manuales) se ven como chapuzas e imprácticas a escala.
PDF frente a formatos web
- Algunos sostienen que “simplemente generes PDFs”, porque imprimir en el navegador es demasiado poco fiable.
- A otros les gustan los flujos de trabajo HTML-first que luego renderizan a PDF mediante motores dedicados.
- Las opiniones sobre el PDF en sí están divididas: algunos lo ven como “papel digital” excelente; otros no gustan del control de Adobe, la complejidad de formularios/JS y la UX basada en páginas en pantallas. Se menciona PDF/A como un subconjunto estable y más sensato.
Técnicas prácticas y trampas
- Patrones comunes:
@media print,@pagepara tamaño/márgenes, unidades físicas (in/mm), reglasbreak-*para evitar encabezados huérfanos y figuras partidas, uso dethead/tfootpara encabezados repetidos de tablas, y URLs de enlaces mediantea::after { content: " (" attr(href) ")"; }. - Eliminar los encabezados/pies del navegador y añadir de forma fiable números de página o empezar la numeración después de un título sigue siendo complicado sin motores de paged-media o maquetaciones dirigidas por JS.