2010-07-27 29 views
6

Tengo una página desde la que el usuario podrá imprimir. Sin embargo, la página que se imprimirá no es la que el usuario está viendo, sino más bien una nueva que me gustaría generar en el fondo y (posiblemente) solo mostrar el diálogo de impresión para ella.Imprimir una página sin mostrarla?

sólo para hacer las cosas claras:

  1. usuario está en "View.aspx" y hace clic en mi botón Imprimir (no del navegador uno).
  2. Los Imprimir botón carga el contenido de "Printable.aspx" y muestra un cuadro de diálogo de impresión para que mientras el usuario está todavía en "View.aspx".

su información, lo que estoy tratando de evitar es tener el "Printable.aspx" abrir en una nueva ventana y luego mostrar su cuadro de diálogo de impresión.

Gracias de antemano.

Respuesta

12

Utilice una combinación de etiquetas MEDIA en CSS para mostrar u ocultar objetos para imprimir.

<STYLE type="text/css"> 
@media print { 
    .PrintOnly {font-size: 10pt; line-height: 120%; background: white;} 
} 
@media screen { 
    .PrintOnly {display: none} 
} 
</STYLE> 

Puede realizar los controles que son de estilo Display:none en la pantalla de los medios de comunicación, por lo que el usuario sólo los ve cuando se imprime.

<DIV class="PrintOnly"> 
This control will only show up during printing 
</DIV> 

Cualquiera de sus controles pueden ser clasificados como "PrintOnly" por lo que sólo los ve cuando se imprime. Solo necesita tener la clase css definida una vez para "@media screen" y una vez para "@media print" para asegurarse de que se comporten de manera diferente.

También puede traer una hoja de estilo completa solo para imprimir.

<LINK rel="stylesheet" type"text/css" href="screen.css" media="screen"> 
<LINK rel="stylesheet" type"text/css" href="print.css" media="print"> 
+1

+1: De esta manera usted ni siquiera necesita una segunda página, sólo un segundo de estilo. La misma página simplemente se procesará de manera diferente a través de la impresora. – David

+0

Me encantaría un ejemplo práctico de esto. Tengo varios controles y contenedores que no me gustaría que se impriman, pero no tengo ni idea de cómo lo haría efectivamente. Gracias. – rebelliard

+1

@Rafael: Actualicé el ejemplo para que no sea específico de DIV. –

0

No creo que lo que estás intentando hacer sea posible. Pero podría estar equivocado. Aunque la mejor manera de abordar esto es utilizar una hoja de estilos CSS diferente.

0

Puede cargar la página en un elemento IFrame oculto, luego use javascript para ejecutar la función de impresión de esa página.

Pero, como se sugirió @carter, CSS es el mejor enfoque. ¿Por qué cargar contenido duplicado más de una vez cuando puede simplemente cambiar el estilo del contenido actual?

+0

¿Qué pasa si los datos que se mostrarán no se cargan en la página actual, y la versión imprimible contiene todos sus detalles: sería mejor cargar el contenido restante a través de algo como ajax o simplemente cargar el contenido en un panel oculto? – rebelliard

1

Cuando se hace clic en el botón Imprimir , agregue el Printable.aspx en un panel oculto de view.aspx. Responda agregando javascript al evento de carga de la vista .aspx & de impresión con el panel oculto window.print()

Cuestiones relacionadas