Talvolta capita di dover prevedere la possibilità di stampare su carta una pagina web : se la formattazione è un fattore importante (ad esempio pensiamo alla generaizone della stampa di un catagolo o di un brochure) suggerisco la generazione di un pdf tramite una libreria dedicata.
Talvolta però la formattazione stessa è così complessa e ricca di elementi che è più comodo tentare la stampa della pagina mediante la funzionalità base di stampa prevista dal browser…. e qui nascono i problemi!
Tramite le media query (in particolare quella standard per la stampa) è possibile cercare di adattare la pagina per ottenere il risultato ottimale su carta anche se spesso tale risultato fa veramente cagare non è propriamente adeguato!

Il mio consiglio? usiamo tutte le tecnologie a nostra disposizione per ottenere il meglio possibile!

E’ inutile fare salti mortali sulla media query print: preparate una pagina ad-hoc e otterrete esattamente il risultato desiderato, formattato come volete voi e senza inutile zavorra. Ovviamente una pagina ad-hoc non esula dall’utilizzo della media query print ma consente di usarla in modo specifico su una struttura il più possibile vicina alla nostra esigenza.

Trattandosi di una pagina ad-hoc è abbastanza brutto e poco professionale aprire un popup html per lanciare la stampa e poi lasciarlo aperto: si può risolvere tutto con poche righe di javascript.

    (function() {

        var printWindow = window;
        setTimeout(function () {
            printWindow.print();
            var ival = setInterval(function() {
                printWindow.close();
                clearInterval(ival);
            }, 200);
        }, 500);
    }());

All’apertura del popup si apre subito la maschera della stampa in preview mode, alla conferma (o annullamento) il popup si chiude da solo.

Se servono dei salti pagina è possibile utilizzare nei css il page-break-before
Per usarlo è sufficiente creare una classe ad-hoc da attribuire ad un < div > o ad un < p > e poi definire nei css il comportamento previsto:

@media all {
	.page-break	{ display: none; }
}

@media print {

     .col-xs-1, .col-xs-10, .col-xs-11, .col-xs-12, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9 {
         float: none;
     }

    .page-break	{ display: block; page-break-before: always; position: relative; }
}

Attenzione: vi dò una dritta importante (visto l’approssimarsi del Santo Natale) : se usate bootstrap i var col-md-xx, col-sx-xx aggiungono dei float:left che annullano i salti pagina pertanto eliminateli dai contenitori (o dappertutto come ho fatto io nello snippet di css che vedete sopra).

Infine, altra grossa rottura di scatole, stampare le immagini di backgroud: si tratta di un’opzione presente nella maschera di stampa della maggior parte dei browser ed è un’opzione che mi aspetterei attiva per default invece… invece no (mai ‘na gioia!).
Per ovviare assegnate la proprietà -webkit-print-color-adjust: exact; al container dell’oggetto che ha l’immagine di sfondo.
Questo risulta MOLTO utile per le mappe statiche di google!

Infine potreste desiderare di rimuovere i link alla pagina di origine che vengono mostrati per default in testa e a piede della pagina, se usate Bootstrap la regola è :

  a[href]:after {
    content: none !important;
  }
stampare coi css, media print query ed amenità varie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *