Imprimir el contenido de un div con HTML y Javascript

Introducción

Siempre vamos a necesitar imprimir en la mayoría de aplicaciones que desarrollemos, independientemente del lenguaje en el que lo hagamos. En este caso veremos cómo imprimir con HTML y Javascript, conservando los estilos y obteniendo una impresión que es exactamente igual a lo que vemos en pantalla.

Precisamente esta mañana tuve que investigar un método fácil, rápido y viable para imprimir contenedores, y aquí traigo los resultados.

Nota: para investigar la mayoría de lo que expongo aquí tomé como referencia la maravillosa respuesta a esta pregunta de StackOverflow

Actualización: he quitado los plunkers y he puesto enlaces directos; ya que que plnkr.co ha estado fallando y los estilos no se estaban cargando; por eso ahora mejor alojo los ejemplos en vivo en mi servidor. Abajo de cada explicación está el link. Sólo te contaba; porque esto no afectará tu experiencia de usuario ni el código expuesto; todo funciona como un encanto.

Función

Aquí pondré la función pero un poco modificada. Primero, eliminé el encabezado, ya que si queremos incluir un encabezado lo ponemos en el mismo div, y si no, no lo incluimos.

En segundo lugar hice que reciba un elemento, no el id de un elemento. Es decir, la función recibe un elemento del DOM (obtenido con document.querySelector o con document.getElementById) en lugar de una cadena.

Así que queda así:

Imprimiendo el hola mundo

Para este ejemplo vamos a crear 2 divs con diferente contenido y sólo imprimiremos uno de ellos. En el script ya puse la función que definimos arriba. Pondré un botón y cuando hagan click en él se imprimirá el contenido de un div.

El código para escuchar al botón es el siguiente:

Mira el ejemplo en acción aquí.

Ya imprimimos el hola mundo, podemos pasar a cosas más avanzadas

Añadiendo estilo al imprimir

El documento, sin estilos, a mi parecer se ve bonito; pero siempre tendremos la necesidad de cambiar alguna u otra cosa. Así que voy a agregar unos estilos sólo para demostrar el concepto. Para ello, le pondré al párrafo un padding de 18 px y un color de fondo color rosa.

Al encabezado le pondré el color azul. El estilo queda así:

Ahora vemos los cambios, pero si intentamos imprimir no se ve ningún estilo. Esto es porque al imprimir se crea un documento nuevo que no lleva los estilos css. Pero para cargarlos, podemos añadir lo siguiente a nuestra función para imprimir:

Nota: esta vez necesitamos modificar la función para imprimir y poner una función en el evento onload de la ventana, para que primero cargue los estilos y luego imprima. Esto no es necesario si tu documento no lleva estilos.

Y ahora sí, si imprimimos veremos algo así:

Si deseas probarlo en vivo haz click aquí.

Ahora sí podemos añadir cualquier estilo, e incluso podemos agregar 2, 3 o infinitas hojas de estilo. Para ello fue que esperamos al window.onload, para que termine de cargar los estilos y luego imprima.

Añadir estilo diferente del documento

Si queremos que nuestro documento, al ser visualizado se vea de una forma pero al ser impreso de otra, podemos manejar dos hojas de estilo. Una para imprimir y otra normal. Para ello voy a crear una hoja de estilos nueva, en donde ahora el encabezado será rojo y el fondo del párrafo verde:

También al imprimir, cambiaremos la función para que ahora cargue una diferente hoja de estilos.

Ahora veamos los resultados. Normalmente, el documento luce así:

Pero al imprimir, se ve así:

Míralo en vivo aquí.

Imprimir diferentes contenedores

Para terminar este tutorial demostraré cómo podemos imprimir diferentes contenedores, incluso aunque no sean divs.

Para ello crearé un párrafo con el id parrafo, y pondré igualmente un botón. Así que el código HTML queda así:

Y para escuchar a los botones:

Podemos probar el código en el siguiente enlace: ejemplo 4 de imprimir con HTML, JS y CSS.

Y así es como podemos jugar con los estilos y los elementos. Por cierto, podemos cambiar el tamaño de la ventana (que por defecto es de 400 x 600)

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

12 comentarios en “Imprimir el contenido de un div con HTML y Javascript”

  1. Excelente, hasta el momento para lo estático funciona de maravilla, pero no he podido lograr que funciones con inputs, select option y demás. Conoces una librería o método para lograrlo?, he investigado y no doy con un resultado

  2. Hola! hace tiempo que estoy tratando de generar un pdf desde las hojas de google sheets y aun no lo he logrado, la necesidad seria simple pero a la vez compleja, necesito un script que genere un link de un pdf dependiendo de las celdas de una fila, es decir cada vez que ingresa una nueva fila con sus respectivas celdas con informacion automaticamente se genere un link para poder imprimir esos datos, no toda la hoja, solo la fila, y sus datos horizontales, espero haber sido claro, abrazo!

    1. Hola, no entiendo bien tu problema y a la vez es muy largo. Simplemente divídelo y resuelve cosa por cosa, una por una, hasta que al final logres el resultado. No es que no quiera ayudar, simplemente no viene con el tema del post. Saludos

    1. Hola. En los ejemplos en vivo puedes ver el código fuente (con Ctrl + U o Click derecho > Ver código fuente). Así, puedes ver cómo se incluye el script y todo lo demás. Saludos.

    1. Hola, muchas gracias por comentar. Plunker (que es en donde alojaba los ejemplos en vivo) ha estado fallando últimamente y no cargaba los estilos CSS. He movido los ejemplos a mi servidor y ahora van como un encanto. De nuevo gracias 🙂

Dejar un comentario