2010-07-27 17 views
6

Ho una pagina da cui l'utente sarà in grado di stampare . Tuttavia, la pagina che verrà stampata non è quella che l'utente sta visualizzando, ma piuttosto una nuova che vorrei generare sullo sfondo e (possibilmente) mostrare solo la finestra di dialogo di stampa per esso.Stampa una pagina senza visualizzarla?

Giusto per fare chiarezza:

  1. Utente su "View.aspx" e scatta il mio Stampa pulsante (non del browser uno).
  2. I Stampa pulsante carica il contenuto di "Printable.aspx" e visualizza una finestra di stampa per esso mentre l'utente è ancora in "View.aspx".

FYI, quello che sto cercando di evitare è quello di avere scoperto "Printable.aspx" in una nuova finestra e poi mostrare la sua finestra di dialogo di stampa.

Grazie in anticipo.

risposta

12

Utilizzare una combinazione di tag MEDIA in CSS per mostrare/nascondere oggetti per la stampa.

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

È possibile effettuare i controlli che sono stile Display:none sullo schermo dei media, in modo che l'utente vede solo quando la stampa.

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

Qualsiasi dei controlli può essere classificato come "PrintOnly" in modo da vedere solo per loro durante la stampa. Devi solo avere la classe css definita una volta per "@media screen" e una volta per "@media print" per assicurarti che si comportino diversamente.

È anche possibile portare un intero foglio di stile per la sola stampa.

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

+1: In questo modo non avrete nemmeno bisogno di una seconda pagina, solo un secondo foglio di stile. La stessa pagina sarà semplicemente renderizzata in modo diverso attraverso la stampante. – David

+0

Mi piacerebbe un esempio funzionante di questo. Ho diversi controlli e contenitori che non vorrei essere stampato, ma non ho assolutamente idea di come andrei in giro a farlo in modo efficace. Grazie. – rebelliard

+1

@Rafael: ho aggiornato l'esempio per non specifico DIV. –

0

Non credo che quello che stai cercando sia possibile. Ma potrei sbagliarmi. Anche se il modo migliore per avvicinarsi a questo è usare un diverso foglio di stile CSS.

0

È possibile caricare la pagina in un elemento IFrame nascosto, quindi utilizzare javascript per eseguire la funzione di stampa di tale pagina.

Ma, come suggerito da @carter, CSS è l'approccio migliore. Perché caricare i contenuti duplicati più di una volta quando puoi semplicemente ridisporre il contenuto corrente?

+0

Cosa succede se i dati da visualizzare non vengono caricati nella pagina corrente e la versione stampabile contiene tutti i suoi dettagli: sarebbe meglio caricare il contenuto rimanente tramite qualcosa come ajax o semplicemente caricare il contenuto su un pannello nascosto? – rebelliard

1

Quando il pulsante Stampa viene cliccato , aggiungi Stampabile.aspx in un pannello nascosto di view.aspx. Rispondere aggiungendo javascript all'evento onload della vista .aspx & stampa il pannello nascosto con window.print()

Problemi correlati