Bisakah saya memaksakan istirahat halaman dalam pencetakan HTML?

188

Saya membuat laporan HTML yang akan dicetak, dan memiliki "bagian" yang harus dimulai di halaman baru.

Apakah ada cara untuk meletakkan sesuatu di HTML / CSS yang akan memberi sinyal ke browser bahwa ia perlu memaksa page break (mulai halaman baru) pada saat itu?

Saya tidak membutuhkan ini untuk bekerja di setiap browser di luar sana, saya pikir saya dapat memberitahu orang untuk menggunakan satu set browser tertentu untuk mencetak ini.

Daniel Magliola
sumber

Jawaban:

336

Tambahkan kelas CSS yang disebut "pagebreak" (atau "pb"), seperti:

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

Kemudian tambahkan tag DIV kosong ( atau elemen blok apa pun yang menghasilkan kotak ) di mana Anda ingin page break.

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

Itu tidak akan muncul di halaman, tetapi akan memecah halaman saat mencetak.

PS Mungkin ini hanya berlaku ketika menggunakan -after(dan juga apa lagi yang mungkin Anda lakukan dengan orang lain <div>di halaman), tetapi saya menemukan bahwa saya harus menambah kelas CSS sebagai berikut:

@media print {
    .pagebreak {
        clear: both;
        page-break-after: always;
    }
}
Chris Doggett
sumber
7
Tetapi seperti semua hal baik dalam CSS, ini tidak selalu bekerja secara konsisten, jadi coba gunakan lampu sorot, jangan sampai Anda membuat pengguna marah bertanya-tanya mengapa situs Anda mencetak tumpukan halaman kosong ekstra!
Zoe
13
Menurut MDN, page-break-after"berlaku untuk memblokir elemen yang menghasilkan kotak," jadi menggunakan <span>elemen kosong tidak akan berfungsi. Itu ide yang lebih baik untuk menerapkannya pada sepotong konten Anda. Lihat developer.mozilla.org/en-US/docs/Web/CSS/page-break-after
nullability
1
@nullability: Tangkapan bagus. Saya terutama menggunakan ini di pekerjaan lama saya di kontrol WebBrowser di WinForms yang menggunakan IE, standar emas mengikuti standar.
Chris Doggett
1
Ini tidak berfungsi untuk saya di Chrome ... Saya mencoba melakukan pagebreak di dalam setelah <tr> di dalam <tabel>, apakah ini akan berfungsi dalam kasus ini?
delphirules
3
Untuk beberapa alasan, ketika menggunakan trik ini di Chrome, 1 baris piksel halaman berikutnya bocor ke halaman sebelumnya (terlihat ketika menggunakan warna latar belakang). Saya memperbaikinya dengan menggunakan.pagebreak { min-height: 1px; page-break-before: always; }
pzmarzly
44

Coba tautan ini

<style>
@media print
{
h1 {page-break-before:always}
}
</style>
jfarrell
sumber
Saya pikir ini adalah jawaban yang lebih baik karena tidak melibatkan pengubahan HTML untuk mencapai efek visual.
FinnNk
Saya sebenarnya menyukai yang lain lebih baik, karena itu memberi saya lebih banyak kontrol. Saya selalu dapat menetapkan kelas "pagebreak" hanya untuk H1 yang seharusnya membuat halaman melompat. Tapi itu masih solusi yang bagus. +1 untuk @ media, meskipun layar harus mengabaikan break-page sebelumnya, saya kira. Terima kasih!
Daniel Magliola
h1 adalah contoh dari apa yang dapat Anda gunakan sebagai tag untuk istirahat cetak. Anda dapat mengganti dan memberi tag nama di sana yang Anda suka. Anda juga dapat menggunakan page-break-after: always
jfarrell
1
h1bukan contoh yang baik, karena ini berarti tajuk tingkat 1, dan halaman biasanya hanya memiliki satu tajuk seperti itu.
Jukka K. Korpela
6
Jika Anda ingin melewati tajuk pertama di halaman pertama, cobah1:not(:first-child) { page-break-before:always; }
Jeff Atwood
10

Hanya ingin menempatkan pembaruan. page-break-afteradalah properti warisan sekarang.

Resmi halaman negara

Properti ini telah digantikan oleh properti break-after .

shazyriver
sumber
Perlu dicatat bahwa properti ini hanya didukung oleh Microsoft IE dan browser Edge. caniuse.com/...
Benjamin
7

Anda dapat menggunakan properti CSS page-break-before(atau page-break-after). Hanya mengatur page-break-before: alwaystentang unsur-unsur blok-tingkat (misalnya, pos, div, p, atau tableelemen) yang harus mulai pada baris baru.

Misalnya, untuk menyebabkan garis terputus sebelum judul tingkat 2 dan sebelum elemen apa pun di kelas newpage(misalnya, <div class=newpage>...), Anda akan menggunakan

h2, .newpage { page-break-before: always }
Jukka K. Korpela
sumber
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>

Cukup tambahkan ini di mana Anda perlu halaman untuk pergi ke yang berikutnya (teks "halaman 1" akan di halaman 1 dan teks "halaman 2" akan berada di halaman kedua).

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

Ini juga berfungsi:

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

Katakanlah Anda memiliki blog dengan artikel seperti ini:

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

Hanya menambahkan ini ke CSS berfungsi untuk saya:

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

(diuji dan bekerja pada Chrome 69 dan Firefox 62).

Referensi:

Basj
sumber
0
  • Kita dapat menambahkan tag penghentian halaman dengan gaya " break-after-after: always " pada titik di mana kami ingin memperkenalkan pagebreak di halaman html.
  • " page-break-before " juga berfungsi

Contoh:

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

Saat mencetak file html dengan kode di atas, pratinjau cetak akan menampilkan tiga halaman (satu untuk setiap blok html " HTML_BLOCK_n ") di mana seperti di browser semua tiga blok muncul secara berurutan satu demi satu.

Chinmay
sumber
0

Saya perlu istirahat halaman setelah setiap baris ke-3 saat kami menggunakan perintah cetak pada browser.

Saya menambahkan <div style = 'page-break-before: always;'> </div>

setelah setiap baris ke-3 dan div orangtua saya memiliki tampilan: flex; jadi saya menghapus tampilan: flex; dan itu berfungsi seperti yang saya inginkan.

Dinesh Sharma
sumber
0

CSS

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

HTML

<div class="pagebreak"></div>
Vlad Hnatovskyi
sumber
-7

@ Chris Doggett masuk akal. Meskipun, saya menemukan satu trik lucu di lvsys.com , dan itu sebenarnya berfungsi pada firefox dan chrome. Letakkan komentar ini di mana saja Anda ingin page-break dimasukkan. Anda juga dapat mengganti <p>tag dengan elemen blok apa pun.

<p><!-- pagebreak --></p>
Oniya Daniel
sumber