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.

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;
    }
}

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>

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


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 }

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)

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:


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.


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.


0

CSS

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

HTML

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

-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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.