Stampare una parte di una pagina ASP.NET cosi come la si vede

giovedì 16 gennaio 2014 - 18.50
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows XP  |  Visual Studio Express  |  MySQL 5.1  |  Firefox  |  Javascript  |  CSS 2.1  |  CSS 3.0  |  XHTML 1.1

ravalon Profilo | Expert

Salve a tutti, vorrei chiedervi un consiglio ...

Mi servirebbe un metodo per mandare a stampa con anteprima una parte di una pagina ASP.NET, precisamente un PANEL control ma posso anche mettere il panel in un DIV se necessario...

Ho provato a inviare a stampa via JS, tramite una funzione modificata che prende tutto quello che sta dentro un DIV e lo manda a stampa con il metodo window.print, mostrando anche una sorta di anteprima...

...funziona, ma lo stile è tutto piatto, il testo è senza formattazione e non vedo la tabella che nella pagina esiste...
.... io vorrei invece che mi venisse stampato come lo vedo sulla pagina ASP.NET chiamante...

...è possibile o devo obbligatoriamente riscrivere riga per riga la pagina ?

Grazie a chi vorrà darmi un consiglio

0v3rCl0ck Profilo | Guru

Ciao, prova a vedere i fogli di stile per la stampa:

http://coding.smashingmagazine.com/2011/11/24/how-to-set-up-a-print-style-sheet/

http://www.webdesignerdepot.com/2010/01/10-tips-for-better-print-style-sheets/

Ti permettono di modificare completamente la pagina solo per la stampa senza dovere usare particolari script, ma semplicemente escludendo tutte le parti del sito che non si vogliono mettere focalizzandosi sul contenuto.

Ad ogni modo ti può essere utile per applicare uno stile personalizzato per il contenuto che vuoi mostrare in stampa.

Come isoli il codice da mandare in stampa? Mandaci lo script che hai utilizzato così possiamo darti un indicazione più precisa.


Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

ravalon Profilo | Expert

Ciao e grazie per la risposta...

il mio lavoro non si basa sui CSS ma sui table per cui faccio fatica si a a capire i CSS che ad escludere i pezzi della pagina tramite fogli di stile...

Io ho una pagina che vorrei mandare in stampa... facciamo conto che il codice sia questo (lo semplifico per incollarlo) :


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

La funzione JS che mi invia la stampa che ho trovato su internet e che ho leggermente modificato è questa:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

I dati mi vanno tutti sulla popup che si apre ma non hanno lo stesso aspetto della pagina originaria, vedo solo i dati privi di formattazione, tabelle, font e tutto il resto...

0v3rCl0ck Profilo | Guru

Vedo che nella funzione di apertura della nuova Window inserisci anche un foglio di stile e credo sia la strada giusta, secondo me ti manca poco per ottenere quello che vuoi.

Esiste quel css "stileprint.css"?

Dato che la Window la crei da zero puoi anche omettere la proprietà media, tanto è l'unico css che metterai su quella pagina.


Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

ravalon Profilo | Expert

Ah si, quella era una prova che avevo fatto l'ultima volta e che mi è rimasta dentro ma in realtà non succede assolutamente niente, non cambia una virgola, è come se saltasse tutto...

....poi sai che, potrei capire che non mi cambia un font e allora proverei e riproverei.... ma non capisco perchè mi esclude anche il bordo delle tabelle ad esempio...

...ma più che altro, è la via giusta o è meglio che tenti un approccio di tutt'altro tipo ?

Per esempio, sarebbe forse meglio riscrivere una pagina da capo con i soli oggetti e dati che mi interessano secondo te ? Perchè attualmente mando in stampa una parte di pagina già costruita per fare prima ma pare che non funzioni...
In altre aree del mio lavoro, come ad esempio la pagina riassuntiva del carrello della spesa, mi sono ricostruito tutti i dati che volevo da zero, cosi che ho ovviamente potuto dare lo stile di gradimento senza problemi, però ripescare i dati dalla pagina chiamante e ri-processarli tutti ha un costo di tempo che se non necessario vorrei evitare, anche perchè se questo sistemino di mandare in stampa solo una parte della pagina mi funzionasse otterrei un codice riutilizzabile per molte altre occasioni, il che non è poco !!!

0v3rCl0ck Profilo | Guru

Puoi postare un po' di codice html che veramente ti viene generato (ovviamente togliendo eventuali dati sensibili), e anche il foglio di stile "StilePrint.css", così posso riprodurre la cosa e vedere cosa non va...

potrebbe essere che non trova il foglio di stile in questo modo:

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

perchè la window creata non ha un url ben definito e quindi stileprint.css non sa proprio dove prenderlo, potresti provare a dargli un url completo:

<link rel="stylesheet" type="text/css" media="print" href="http://miosito.com/StilePrint.css"/>

quell'url può essere generato da asp.net in modo che tu non debba forzarlo fisso e cambiarlo tutte le volte che cambi dominio.


Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

ravalon Profilo | Expert

Hai ragione....mettendo

myWin.document.write('<link rel="stylesheet" type="text/css" href="../includes/StilePrint.css"/>');

anzichè

myWin.document.write('<link rel="stylesheet" media="print" type="text/css" href="StilePrint.css"/>');

Riesce a trovare il CSS e renderizzare correttamente il foglio di stile!

Come vedi devo anche togliere media="print"....

Purtroppo però a questo punto quando vado a salvare come PDF mi accorgo che comunque la formattazione viene perduta...

...mi sa che la cosa migliore è ricreare una pagina da zero con i dati di mio interesse, almeno posso anche aggiungere le intestazioni che desidero oltre che al pezzo della pagina contenente i dati da stampare...
....cosi mi viene un format più professionale, che ne pensi ?

0v3rCl0ck Profilo | Guru

>Hai ragione....mettendo
>
>myWin.document.write('<link rel="stylesheet" type="text/css"
>href="../includes/StilePrint.css"/>');

pensavo non riuscisse neanche così e che avresti dovuto mettere un url assoluto, megli così... si vede che fa riferimento comunque alla pagina da cui è stata aperta.

>Come vedi devo anche togliere media="print"....

credo che lo stile venga applicato solo quando è proprio in stampa, quindi a video lo vedresti senza, di solito serve per avere uno stile di visualizzazione a video e uno completamente diverso in stampa, penso sia il comportamento corretto.

>Purtroppo però a questo punto quando vado a salvare come PDF
>mi accorgo che comunque la formattazione viene perduta...

quindi in pratica ora lo stile a video lo vedi perfettamente come vorresti, ma in stampa vedi ancora senza stile?

Prova a rimettere media="print" e a vedere come lo stampa così... altrimenti ho paura che hai sfruttato tag html poco compatibili per la stampa, invece che usare semplici div con stile dato da css.

Con il foglio di stile cosa fai? Come cambi la presentazione?

>...mi sa che la cosa migliore è ricreare una pagina da zero con
>i dati di mio interesse, almeno posso anche aggiungere le intestazioni
>che desidero oltre che al pezzo della pagina contenente i dati
>da stampare...
>....cosi mi viene un format più professionale, che ne pensi ?

Sicuramente riscrivendo una pagina, hai la possibilità di avere più controllo sulla vista per la sola stampa, e di conseguenza essere disaccoppiato da quello che è la pagina visualizzata a monitor, anche perchè se in futuro fai una modifica alla pagina, potresti rompere il layout della stampa accidentalmente, mentre se sono due pagine separate ne hai più controllo. Cercherei piuttosto di mantenere lo stesso servizio dati, cioè avere un classe che ti prepara i dati esattamente nello stesso modo, senza dovere riscrivere una riga di codice dupplicata.

Detto questo, devi comunque capire perchè non ti stampa come vuoi, perchè se fai anche un altra pagina, ma poi il problema sono i controlli che utilizzi o uno stile sbagliato, il problema ti rimarrebbe.


Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

ravalon Profilo | Expert

Ti ringrazio, sei stato molto utile, terrò a mente i tuoi consigli ... alla prossima

0v3rCl0ck Profilo | Guru

>Ti ringrazio, sei stato molto utile, terrò a mente i tuoi consigli
>... alla prossima

alla prossima


Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5