¿Cómo imprimo el div indicado (sin deshabilitar manualmente el resto del contenido de la página)?
Quiero evitar un nuevo cuadro de diálogo de vista previa, por lo que no es útil crear una nueva ventana con este contenido.
La página contiene un par de tablas, una de ellas contiene el div que quiero imprimir: la tabla está diseñada con estilos visuales para la web, que no deberían mostrarse en forma impresa.
javascript
css
printing
dhtml
noesgard
fuente
fuente
Respuestas:
Aquí hay una solución general, usando solo CSS , que he verificado que funciona.
Los enfoques alternativos no son tan buenos. Usar
display
es complicado porque si algún elemento tienedisplay:none
ninguno de sus descendientes se mostrará tampoco. Para usarlo, debes cambiar la estructura de tu página.El uso
visibility
funciona mejor ya que puede activar la visibilidad para los descendientes. Sin embargo, los elementos invisibles aún afectan el diseño, por lo que me muevosection-to-print
hacia la parte superior izquierda para que se imprima correctamente.fuente
position:fixed
. Sin embargo, Chrome y Safari también truncarían el contenido, especialmente después de la primera página. Así que mi solución final fue establecer el objetivo y todos sus padres paraoverflow:visible; position:absolute !important; top:0;left:0
#section-to-print
coincide con la sección misma;#section-to-print *
coincide con cada subelemento de la sección. Entonces esa regla solo hace que la sección y todos sus contenidos sean visibles.Tengo una mejor solución con un código mínimo.
Coloque su parte imprimible dentro de un div con una identificación como esta:
Luego agregue un evento como un onclick (como se muestra arriba) y pase la identificación del div como lo hice anteriormente.
Ahora creemos un javascript realmente simple:
¿Te das cuenta de lo simple que es esto? Sin ventanas emergentes, sin ventanas nuevas, sin estilo loco, sin bibliotecas JS como jquery. El problema con las soluciones realmente complicadas (la respuesta no es complicada y no es a lo que me refiero) es el hecho de que NUNCA se traducirá en todos los navegadores. Si desea hacer que los estilos sean diferentes, haga lo que se muestra en la respuesta marcada agregando el atributo de medios a un enlace de hoja de estilos (medios = "imprimir").
Sin pelusa, liviano, simplemente funciona.
fuente
.click
. Es una pena, porque el código es muy ligero.Todas las respuestas hasta el momento son bastante defectuosos - o bien implican la adición
class="noprint"
a todo, o se hace un lío hastadisplay
dentro#printable
.Creo que la mejor solución sería crear un contenedor alrededor del material no imprimible:
Por supuesto, esto no es perfecto, ya que implica mover un poco las cosas en su HTML ...
fuente
Con jQuery es tan simple como esto:
fuente
¿Podría usar una hoja de estilo de impresión y CSS para organizar el contenido que desea imprimir? Lea este artículo para obtener más sugerencias.
fuente
Esto funciona bien:
Tenga en cuenta que esto solo funciona con "visibilidad". "display" no lo hará. Probado en FF3.
fuente
Realmente no me gustó ninguna de estas respuestas en su conjunto. Si tiene una clase (por ejemplo, printableArea) y la tiene como un elemento secundario inmediato del cuerpo, puede hacer algo como esto en su CSS de impresión:
Para aquellos que buscan printableArea en otro lugar, deben asegurarse de que se muestren los padres de printableArea:
Usar la visibilidad puede causar muchos problemas de espacio y páginas en blanco. Esto se debe a que la visibilidad mantiene el espacio de los elementos, simplemente lo oculta, mientras que la pantalla lo elimina y permite que otros elementos ocupen su espacio.
La razón por la que esta solución funciona es que no estás agarrando todos los elementos, solo los hijos inmediatos del cuerpo y ocultándolos. Las otras soluciones a continuación con display css, ocultan todos los elementos, lo que afecta todo el contenido del área imprimible.
No sugeriría javascript, ya que necesitaría tener un botón de impresión en el que el usuario haga clic y los botones de impresión estándar del navegador no tendrían el mismo efecto. Si realmente necesita hacer eso, lo que haría es almacenar el html del cuerpo, eliminar todos los elementos no deseados, imprimir y luego volver a agregar el html. Sin embargo, como se mencionó, evitaría esto si puedes y usar una opción CSS como la anterior.
NOTA: Puede agregar cualquier CSS al CSS de impresión utilizando estilos en línea:
O como usualmente uso es una etiqueta de enlace:
fuente
Proporcione el elemento que desee para imprimir la identificación
printMe
.Incluya este script en su etiqueta de cabeza:
Llamar a la función
fuente
hm ... use el tipo de una hoja de estilo para imprimir ... por ejemplo:
print.css:
fuente
fuente
Paso 1: escriba el siguiente javascript dentro de su etiqueta de cabeza
Paso 2: llame a la función PrintMe ('DivID') mediante un evento onclick.
fuente
Con CSS 3 puede usar lo siguiente:
fuente
Recogí el contenido usando JavaScript y creé una ventana que podía imprimir en su lugar ...
fuente
El método de Sandro funciona muy bien.
Lo modifiqué para permitir múltiples enlaces printMe, particularmente para usar en páginas con pestañas y expandir texto.
function processPrint(printMe){
<- llamando a una variable aquívar printReadyElem = document.getElementById(printMe);
<- eliminó las comillas alrededor de printMe para pedir una variable<a href="javascript:void(processPrint('divID'));">Print</a>
<- pasar la ID div a imprimir en la función para convertir la variable printMe en la ID div. se necesitan comillas simplesfuente
printDiv (divId) : una solución generalizada para imprimir cualquier div en cualquier página.
Tuve un problema similar pero quería (a) poder imprimir toda la página, o (b) imprimir cualquiera de varias áreas específicas. Mi solución, gracias a gran parte de lo anterior, le permite especificar cualquier objeto div para imprimir.
La clave para esta solución es agregar una regla apropiada a la hoja de estilo del medio de impresión para que se imprima el div solicitado (y su contenido).
Primero, cree el css de impresión necesario para suprimir todo (pero sin la regla específica para permitir el elemento que desea imprimir).
Tenga en cuenta que he agregado nuevas reglas de clase:
Luego inserte tres funciones de JavaScript. El primero simplemente activa y desactiva la hoja de estilo de medios impresos.
El segundo hace el trabajo real y el tercero limpia después. El segundo (printDiv) activa la hoja de estilo de medios de impresión, luego agrega una nueva regla para permitir que se imprima el div deseado, emite la impresión y luego agrega un retraso antes de la limpieza final (de lo contrario, los estilos se pueden restablecer antes de que la impresión sea realmente hecho.)
Las funciones finales eliminan la regla agregada y vuelven a desactivar el estilo de impresión para que se pueda imprimir toda la página.
La única otra cosa que debe hacer es agregar una línea a su procesamiento de carga para que el estilo de impresión se deshabilite inicialmente, permitiendo la impresión de toda la página.
Luego, desde cualquier parte de su documento, puede imprimir un div. Simplemente emita printDiv ("thedivid") desde un botón o lo que sea.
Una gran ventaja de este enfoque es que proporciona una solución general para imprimir contenido seleccionado desde una página. También permite el uso de estilos existentes para elementos que se imprimen, incluido el div que contiene.
NOTA: En mi implementación, esta debe ser la primera hoja de estilo. Cambie las referencias de hoja (0) al número de hoja apropiado si necesita hacerlo más adelante en la secuencia de la hoja.
fuente
@Kevin Florida Si tiene múltiples divs con la misma clase, puede usarlo así:
Estaba usando el tipo de contenido interno de Colorbox
fuente
En mi caso tuve que imprimir una imagen dentro de una página. Cuando utilicé la solución votada, tenía 1 página en blanco y la otra mostrando la imagen. Espero que ayude a alguien.
Aquí está el CSS que utilicé:
Mi html es:
fuente
El mejor CSS para adaptarse a la altura del espacio vacío:
fuente
La mejor manera de imprimir Div particular o cualquier elemento
fuente
Use una hoja de estilo especial para imprimir
y luego agregue una clase, es decir, "noprint" a cada etiqueta cuyo contenido no desea imprimir.
En el uso de CSS
fuente
Si solo desea imprimir este div, debe usar las instrucciones:
fuente
La función printDiv () apareció varias veces, pero en ese caso, pierde todos sus elementos de enlace y valores de entrada. Entonces, mi solución es crear un div para todo llamado "body_allin" y otro fuera del primero llamado "body_print".
Entonces llamas a esta función:
fuente
Puede usar un estilo CSS separado que deshabilite cualquier otro contenido, excepto el que tiene la identificación "printarea".
Consulte Diseño de CSS: Ir a imprimir para obtener más explicaciones y ejemplos.
fuente
Tenía varias imágenes cada una con un botón y necesitaba hacer clic en un botón para imprimir cada div con una imagen. Esta solución funciona si he desactivado el caché en mi navegador y el tamaño de la imagen no cambia en Chrome:
fuente
Una aproximación más sin afectar la página actual y también persiste el CSS al imprimir. Aquí el selector debe ser un selector div específico que contenido debemos imprimir.
Aquí se proporciona un tiempo de espera para mostrar que se aplica CSS externo.
fuente
Probé muchas de las soluciones proporcionadas y ninguna funcionó a la perfección. Pierden enlaces CSS o JavaScript. Encontré una solución perfecta y fácil que no pierde enlaces CSS ni JavaScript.
HTML:
Javascript:
fuente
Llego muy tarde a esta fiesta, pero me gustaría participar con otro enfoque. Escribí un pequeño módulo JavaScript llamado PrintElements para imprimir dinámicamente partes de una página web.
Funciona iterando a través de los elementos de nodo seleccionados, y para cada nodo, atraviesa el árbol DOM hasta el elemento BODY. En cada nivel, incluido el inicial (que es el nivel del nodo que se va a imprimir), adjunta una clase de marcador (
pe-preserve-print
) al nodo actual. Luego adjunta otra clase de marcador (pe-no-print
) a todos los hermanos del nodo actual, pero solo si no hay ningunape-preserve-print
clase en ellos. Como tercer acto, también une otra clase a elementos ancestrales preservadospe-preserve-ancestor
.Un css suplementario de impresión simple muerto ocultará y mostrará los elementos respectivos. Algunos de los beneficios de este enfoque es que se conservan todos los estilos, no abre una nueva ventana, no hay necesidad de moverse por muchos elementos DOM y, en general, no es invasivo con su documento original.
Vea la demostración o lea el artículo relacionado para obtener más detalles .
fuente
Puede usar esto: http://vikku.info/codesnippets/javascript/print-div-content-print-only-the-content-of-an-html-element-and-not-the-whole-document/
O use
visibility:visible
yvisibility:hidden
propiedad css junto con@media print{}
'display: none' ocultará todos los 'display: block' anidados. Eso no es solución.
fuente
Encontré la solución.
fuente
En base a la respuesta de @Kevin Florida, hice una forma de evitar que la secuencia de comandos en la página actual se desactive debido al contenido de sobrescritura. Yo uso otro archivo llamado "printScreen.php" (o .html). Envuelva todo lo que quiera imprimir en un div "printSource". Y con javascript, abra una nueva ventana que creó antes ("printScreen.php") y luego tome el contenido en "printSource" de la ventana superior.
Aquí está el código.
Ventana principal :
Esto es "printScreen.php" - otro archivo para tomar contenido para imprimir
fuente