Posso forzare un'interruzione di pagina nella stampa HTML?


188

Sto realizzando un rapporto HTML che sarà stampabile e ha "sezioni" che dovrebbero iniziare in una nuova pagina.

C'è un modo per inserire qualcosa nel codice HTML / CSS che segnalerà al browser che è necessario forzare un'interruzione di pagina (avviare una nuova pagina) a quel punto?

Non ho bisogno di questo per funzionare su tutti i browser là fuori, penso di poter dire alle persone di utilizzare un set specifico di browser per stampare questo.

Risposte:


336

Aggiungi una classe CSS chiamata "pagebreak" (o "pb"), in questo modo:

@media print {
    .pagebreak { page-break-before: always; } /* page-break-after works, as well */
}

Quindi aggiungere un tag DIV vuoto ( o qualsiasi elemento di blocco che genera una casella ) in cui si desidera l'interruzione di pagina.

<div class="pagebreak"> </div>

Non verrà visualizzato sulla pagina, ma si romperà la pagina durante la stampa.

PS Forse questo vale solo quando si utilizza -after(e anche cos'altro si potrebbe fare con altri messaggi <div>nella pagina), ma ho scoperto che dovevo aumentare la classe CSS come segue:

@media print {
    .pagebreak {
        clear: both;
        page-break-after: always;
    }
}

7
Ma come tutte le cose buone nei CSS, questo non funziona sempre in modo coerente su tutta la linea, quindi prova le luci del giorno vivente, per non avere utenti arrabbiati che si chiedono perché il tuo sito stampa pile di pagine vuote in più!
Zoe,

13
Secondo MDN, page-break-after"si applica agli elementi di blocco che generano una casella", quindi l'utilizzo di un <span>elemento vuoto non funzionerà. È un'idea migliore applicarlo a un pezzo del tuo contenuto. Vedi developer.mozilla.org/en-US/docs/Web/CSS/page-break-after
nullability

1
@nullability: buona cattura. Lo avevo usato principalmente nel mio vecchio lavoro in un controllo WebBrowser in WinForms che utilizzava IE, il gold standard dei seguenti standard.
Chris Doggett,

1
Questo non ha funzionato per me in Chrome ... Sto provando a fare un'interruzione di pagina all'interno dopo un <tr> all'interno di un <table>, funzionerà in questo caso?
delphirules,

3
Per qualche motivo, quando si utilizza questo trucco in Chrome, 1 riga di pixel della pagina successiva trapelava in quella precedente (evidente quando si utilizza il colore di sfondo). L'ho corretto usando.pagebreak { min-height: 1px; page-break-before: always; }
pzmarzly il

44

Prova questo link

<style>
@media print
{
h1 {page-break-before:always}
}
</style>

Penso che questa sia una risposta migliore in quanto non comporta la manipolazione dell'HTML per ottenere un effetto visivo.
FinnNk,

In realtà mi piace di più l'altro, poiché mi dà più controllo. Posso sempre assegnare la classe "pagebreak" solo agli H1 che dovrebbero far saltare la pagina. Ma è ancora una buona soluzione. +1 per @media, anche se lo schermo dovrebbe ignorare l'interruzione di pagina, suppongo. Grazie!
Daniel Magliola,

h1 è un esempio di ciò che è possibile utilizzare come tag per l'interruzione della stampa. Puoi sostituire e taggare il nome che preferisci. potresti anche usare page-break-after: sempre
jfarrell,

1
h1non è un buon esempio, poiché significa un'intestazione di 1 ° livello e una pagina dovrebbe normalmente avere solo un'intestazione di questo tipo.
Jukka K. Korpela,

6
Se vuoi saltare la prima intestazione nella prima pagina, provah1:not(:first-child) { page-break-before:always; }
Jeff Atwood il

10

Volevo solo mettere un aggiornamento. page-break-afterè una proprietà legacy ora.

Stati della pagina ufficiale

Questa proprietà è stata sostituita dalla proprietà break-after .


Va notato che questa proprietà è supportata solo dai browser Microsoft IE e Edge. caniuse.com/…
Benjamin,

7

È possibile utilizzare la proprietà CSS page-break-before(o page-break-after). Basta impostare page-break-before: alwayssu quegli elementi block-level (per esempio, rotta div, po tableelementi) che dovrebbero iniziare su una nuova linea.

Ad esempio, per causare un'interruzione di riga prima di qualsiasi intestazione di 2 ° livello e prima di qualsiasi elemento della classe newpage(ad es., <div class=newpage>...), dovrai utilizzare

h2, .newpage { page-break-before: always }

5

First page (scroll down to see the second page)
<div style="break-after:page"></div>
Second page
<br>
<br>
<button onclick="window.print();return false;" />Print (to see the result) </button>

Basta aggiungere questo dove è necessario che la pagina passi alla successiva (il testo "pagina 1" sarà sulla pagina 1 e il testo "pagina 2" sarà sulla seconda pagina).

Page 1
<div style='page-break-after:always'></div>
Page 2

Funziona anche questo:

First page (there is a break after this)
<div style="break-after:page"></div>
Second page (This will be printed in the second page)

1

Diciamo che hai un blog con articoli come questo:

<div class="article"> ... </div>

L'aggiunta di questo al CSS ha funzionato per me:

@media print {
  .article { page-break-after: always; }
}

(testato e funzionante su Chrome 69 e Firefox 62).

Riferimento:


0
  • Possiamo aggiungere un tag di interruzione di pagina con lo stile " interruzione di pagina: sempre " nel punto in cui vogliamo introdurre l'interruzione di pagina nella pagina html.
  • " page-break-before " funziona anche

Esempio:

HTML_BLOCK_1
<p style="page-break-after: always"></p>
HTML_BLOCK_2
<p style="page-break-after: always"></p>
HTML_BLOCK_3

Durante la stampa del file html con il codice sopra, l'anteprima di stampa mostrerà tre pagine (una per ogni blocco html " HTML_BLOCK_n ") dove come nel browser tutti e tre i blocchi appaiono in sequenza uno dopo l'altro.


0

Avevo bisogno di un'interruzione di pagina dopo ogni terza riga mentre usiamo il comando di stampa sul browser.

Ho aggiunto <div style = 'page-break-before: always;'> </div>

dopo ogni 3a fila e il mio genitore div ha display: flex; così ho rimosso display: flex; e funzionava come volevo.


0

CSS

@media print {
  .pagebreak { 
     page-break-before: always; 
  }
}

HTML

<div class="pagebreak"></div>

-7

@ Chris Doggett ha perfettamente senso. Tuttavia , ho trovato un trucco divertente su lvsys.com , e in realtà funziona su Firefox e Chrome. Inserisci questo commento ovunque desideri inserire l'interruzione di pagina. Puoi anche sostituire il <p>tag con qualsiasi elemento di blocco.

<p><!-- pagebreak --></p>
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.