Banner

Ultima revisión 24/03/2013

Crear una página de impresión con jQuery

Normalmente, cuando los desarrolladores queremos implementar la funcionalidad de imprimir una página lo hacemos a través una plantilla de estilos que, en la mayoría de los casos, suele ser una versión limpia y reducida de la web. Generalmente basta con eliminar los fondos, establecer nuevos colores en las tipografías y esconder algunos objetos, tales como las barras de navegación.

Sin embargo, eventualmente, nos encontramos con casos excepcionales donde el proceso de generación se vuelve tedioso e incluso tenemos que recurrir a ventanas emergentes. Aquí recurriremos a ambas cosas de forma fácil.

Para empezar, primero creamos el archivo de estilos y lo insertamos en la página que queremos que se pueda imprimir.

Sólo 2 cosas. La primera es, por si os interasa, que el tamaño de una DIN-A4, en píxeles, es 842px de alto y 595px de ancho.

Y la segunda es que el CSS para imprimir, tendrá los mismos elementos que la general o normal, sólo que, estarán por debajo de otro selector que llamaremos printVersión. Así, por ejemplo, todo lo que antes dependía de article, ahora dependerá o debería depender de .printVersion article porque, en la nueva ventana, introduciremos el elemento article dentro de un div class="printVersion".

<link rel="stylesheet" href="print.css" type="text/css" media="print" />

Segundo ponemos el código del botón que ejecutará la acción de imprimir.

<div class="printButtonDiv">
    <p class="printButton">Imprimir</p>
</div>

Ahora añadimos el siguiente código de jQuery.

<script type="text/javascript">
    $(document).ready(function(){ 
        $('.printButton').click(function(){ 
             var printVersion = $('.article').clone();
            // Eliminamos los elementos indeseables a través de jQuery. En este caso sólo uno.
            printVersion.children().remove(".contactFloatLayer");
        
            // Creamos el contenido del documento que se va a imprimir.
            var printContent = $('head').html() + '<div class="printVersion">' + printVersion.html() + '</div>'; 

            // Establecemos la nueva ventana.
            var windowUrl = 'about:blank'; 
            var createdAt = new Date(); 
            var windowName = 'printScreen' + createdAt.getTime(); 
            var printWindow = window.open(windowUrl, windowName, 'resizable=1,scrollbars=1,left=500,top=000,width=868'); 
            printWindow.document.write(printContent); 

            printWindow.document.close(); 
        
            // Establecemos el foco.
            printWindow.focus(); 
        
            // Lanzamos la impresión.
            printWindow.print();   
        });
    });
</script>

Y ya está.