Come creare una pagina Twitter Bootstrap stampabile


162

Sto usando Twitter-Bootstrap e devo essere in grado di stampare la pagina come appare sul browser. Sono in grado di stampare bene altre pagine realizzate con Twitter-Bootstrap ma non riesco a stampare la mia pagina che utilizza puramente Twitter-Bootstrap. Mi sto perdendo un tag da qualche parte?

Pagina TB ufficiale quando stampata: Pagina Bootstrap di Twitter

La mia pagina quando viene stampata: inserisci qui la descrizione dell'immagine

Come appare la mia pagina: inserisci qui la descrizione dell'immagine


2
Stai specificando un attributo media = "screen"? Dai un'occhiata alla mia risposta.
albertedevigo,

Risposte:


156

Assicurati di avere un foglio di stile assegnato per la stampa.
Potrebbe essere un foglio di stile separato:

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

o uno che condividi per tutti i dispositivi:

<link rel="stylesheet" type="text/css" href="bootstrap.min.css"> # Note there's no media attribute

Quindi, puoi scrivere i tuoi stili per le stampanti nei fogli di stile separati o in quelli condivisi usando le query multimediali:

@media print {
    /* Your styles here */
}

29
Ho appena aggiunto questo: <link rel = "stylesheet" type = "text / css" media = "print" href = "bootstrap.min.css"> e non ho bisogno di fare altro. Ha funzionato come un fascino. Grazie!
Jay Q.

13
Se stai già utilizzando questo foglio di stile, è probabile che tu abbia attualmente media="screen", che non sarà visto da una stampante. Puoi passare a questo media="all"o semplicemente rimuoverlo mediacome suggerisce la risposta sopra.
Wex,

albertedevigo, ho bisogno di aiuto per quanto riguarda lo stile. Come cambiare la dimensione del carattere, le larghezze, ... cosa bisognava esattamente cambiare? TIA. @JayQ. : Funziona ancora o non è aggiornato? perché non riesco a farlo funzionare.
musafar006,

@dreamster, includi solo i tuoi stili nel foglio di stile che si applica alla stampa. Si noti che CSS CSS funziona ancora; pertanto l'ordine, l'eredità e le priorità di selezione influenzeranno il risultato. Probabilmente faresti una nuova domanda con il tuo codice.
albertedevigo,

181

Aggiornamento Bootstrap 3.2: (versione corrente)

La versione attuale di Bootstrap è 3.2.0 .
Con la versione 3.2 visibile-print deprecata, quindi dovresti usare così:

Class                        Browser    Print
 -------------------------------------------------
.visible-print-block         Hidden        Visible (as block)
.visible-print-inline        Hidden        Visible (as inline)
.visible-print-inline-block  Hidden        Visible (as inline-block)
.hidden-print                Visible       Hidden

Aggiornamento Bootstrap 3:

Le lezioni di stampa sono ora nei documenti: http://getbootstrap.com/css/#responsive-utilities-print

Similar to the regular responsive classes,
       use these for toggling content for print.

Class            Browser    Print
 ----------------------------------------
.visible-print   Hidden     Visible
.hidden-print    Visible    Hidden

Versione Bootstrap 2.3.1:

Dopo aver aggiunto il file bootstrap.css nel tuo HTML,
trova le parti che non vuoi stampare e aggiungi hidden-printclasse ai tag. Perché il file css include questo:

@media print {
  .visible-print  { display: inherit !important; }
  .hidden-print   { display: none !important; }
}

4
Non esiste una classe per rendere visibile qualcosa sia sul browser che sulla stampante nel caso in cui renda tutto ( body) invisibile .hidden-print, ma voglio sovrascrivere un elemento specifico da mostrare?
Vincent Poirier,

1
@VincentPoirier - se un elemento è nascosto, tutto al suo interno è nascosto. Quindi non è significativo nascondere il corpo, ma scoprire qualcosa che fa parte del corpo. Perché non ci sarebbe alcun contesto (contenitore) in cui mostrare quell'elemento secondario. Invece fai css per nascondere tutti i tuoi elementi foglia (es. Metti una classe predefinita sui tuoi div interni), quindi usa la classe css appropriata o l'id dove desideri essere visibile. Probabilmente richiederà qualche sperimentazione per farlo esattamente bene.
ToolmakerSteve

112

Sostituisci ogni col-md-concol-xs-

ad es .: sostituire ogni col-md-6a col-xs-6.

Questa è la cosa che ha funzionato per me per sbarazzarmi di questo problema, puoi vedere cosa devi sostituire.


Grazie ! Si è verificato un problema con la scala della vista HTML rispetto alla vista Stampa ... ora tutto è a posto!
David Bélanger,

2
Ehi grazie! Stavo affrontando un problema durante la stampa della mia pagina, ognuna divera sotto la precedente. Questa risposta mi ha dato un suggerimento, ho aggiunto col-xs-*prima di ognuno col-md-*e questo ha risolto il problema. NOTA BENE: non ho testato l'aggiunta di un contenitore in quanto <div class="row"></div>potrebbe anche aver risolto il problema (sembra ovvio).
Fr0zenFir

6
A meno che uno non abbia un layout diverso per schermi stretti (ad es. Telefono) rispetto alla stampa. Sembra strano che la logica della stampante bootstrap pensi che la sua schermata di stampa sia così stretta.
ToolmakerSteve

3
Questo dovrebbe essere in cima.
Suraj,

Solo per aggiungere che puoi sostituire col-md- come dice la risposta o puoi semplicemente aggiungere col-xs-like: class = "col-md-6 col-xs-6" e puoi mescolare e abbinare a seconda delle esigenze del tuo design.
zaidorx,

17

C'è una sezione di @media printcodice nel file css (Bootstrap da 3.3.1 [AGGIORNAMENTO:] a 3.3.5), che rimuove praticamente tutto lo stile, in modo da ottenere stampe abbastanza blande anche quando funziona.

Per ora ho dovuto ricorrere a nudo la @media printsezione dalla bootstrap.css - che sono davvero , non contento, ma i miei utenti vogliono screen-palio diretti quindi questo dovrà fare per ora. Se qualcuno sa come eliminarlo senza modifiche ai file bootstrap, sarei molto interessato.

Ecco il blocco di codice "offensivo", inizia alla riga 192:

@media print {
  *,
  *:before,enter code here
  *:after {
    color: #000 !important;
    text-shadow: none !important;
    background: transparent !important;
    -webkit-box-shadow: none !important;
            box-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;

    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  select {
    background: #fff !important;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}

6

La migliore opzione che ho trovato è stata http://html2canvas.hertzen.com/
http://jsfiddle.net/nurbsurf/1235emen/

html2canvas(document.body, {  
  onrendered: function(canvas) {
    $("#page").hide();
    document.body.appendChild(canvas);
    window.print();
    $('canvas').remove();
    $("#page").show();
  }
});

Ho provato sia 0,4 che 0,5 ma nessuno dei due ha funzionato. 0,5 ha aggiunto alcune cose interessanti dopo la mia pagina, ma la pagina originale era ancora lì, e poi come avrei dovuto stamparla? Provare 0.4 ha innescato una stampa, anche la pagina originale era ancora lì e il rendering era un po 'rotto.
Csaba Toth,

3

Nel caso in cui qualcuno stia cercando una soluzione per Bootstrap v2.XX qui. Lascio la soluzione che stavo usando. Questo non è completamente testato su tutti i browser, tuttavia potrebbe essere un buon inizio.

1) assicurarsi che l'attributo media di bootstrap-responsive.csssia screen.

<link href="/css/bootstrap-responsive.min.css" rel="stylesheet" media="screen" />

2) crea a print.csse assicurati che il suo attributo mediaprint

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

3) all'interno print.css, aggiungi la "larghezza" del tuo sito Web in HTML e body

html, 
body {
    width: 1200px !important;
}

4.) riprodurre le classi di media query necessarie print.cssperché erano all'interno bootstrap-responsive.csse le abbiamo disabilitate durante la stampa.

.hidden{display:none;visibility:hidden}
.visible-phone{display:none!important}
.visible-tablet{display:none!important}
.hidden-desktop{display:none!important}
.visible-desktop{display:inherit!important}

Ecco la versione completa di print.css:

html, 
body {
    width: 1200px !important;
}

.hidden{display:none;visibility:hidden}
.visible-phone{display:none!important}
.visible-tablet{display:none!important}
.hidden-desktop{display:none!important}
.visible-desktop{display:inherit!important}


0

Per fare in modo che la vista di stampa assomigli a tablet o desktop includi bootstrap come .less, non come .css e quindi puoi sovrascrivere le classi responsive bootstrap alla fine del file bootstrap_variables, ad esempio in questo modo:

@container-sm:      1200px;
@container-md:      1200px;
@container-lg:      1200px;
@screen-sm:         0;

Non preoccuparti di inserire queste variabili alla fine del file. LESS supporta il caricamento lento delle variabili in modo che vengano applicate.


0

Se vuoi mantenere le colonne sulla stampa A4 (che è di circa 540 px) questa è una buona idea

@media print {
    .make-grid(print-A4);
}

.make-print-A4-column(@columns) {
    @media print {
        float: left;
        width: percentage((@columns / @grid-columns));
    }
}

Puoi usarlo in questo modo:

<div class="col-sm-4 col-print-A4-4">

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.