HTML yazdırmada sayfa sonunu zorlayabilir miyim?


188

Yazdırılabilir bir HTML raporu hazırlıyorum ve yeni bir sayfada başlaması gereken "bölümler" var.

HTML / CSS'ye tarayıcıya o noktada bir sayfa sonunu (yeni bir sayfa başlat) zorlaması gerektiğini bildirecek bir şey koymanın bir yolu var mı?

Buradaki her tarayıcıda çalışmak için buna ihtiyacım yok, sanırım insanlara bunu yazdırmak için belirli bir tarayıcı seti kullanmalarını söyleyebilirim.

Yanıtlar:


336

"Pagebreak" (veya "pb") adlı bir CSS sınıfı ekleyin, şöyle:

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

Ardından , sayfanın kesilmesini istediğiniz yere boş bir DIV etiketi ( veya bir kutu oluşturan herhangi bir blok öğesi ) ekleyin.

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

Sayfada görünmez, ancak yazdırırken sayfayı keser.

PS Belki de bu sadece -after(ve <div>sayfadaki diğer s ile ne yapıyor olabilirsiniz) kullanırken geçerlidir , ancak aşağıdaki gibi CSS sınıfını artırmak zorunda buldum:

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

7
Ancak, CSS'deki tüm iyi şeyler gibi, bu her zaman tahtada tutarlı bir şekilde çalışmaz, bu yüzden canlı gün ışığını test edin, öfkeli kullanıcıların sitenizin neden fazladan boş sayfa yığınları yazdırdığını merak ediyorsanız!
Zoe

13
MDN'ye göre, page-break-after"bir kutu oluşturan blok öğelerine uygulanır", bu nedenle boş bir <span>eleman kullanmak işe yaramaz. İçeriğinizin bir parçasına uygulamak daha iyi bir fikirdir. Bkz. Developer.mozilla.org/tr-TR/docs/Web/CSS/page-break-after
nullability

1
@ nullability: İyi av. Ben esas olarak WinForms bir WebBrowser denetiminde IE, hangi standartların altın standart kullanılan eski işimde kullanmıştı.
Chris Doggett

1
Bu benim için Chrome'da işe yaramadı ... Bir <table> içindeki <tr> sonra içeride bir pagebreak yapmaya çalışıyorum, bu durumda işe yarar mı?
delphirules

3
Bazı nedenlerden dolayı, bu hileyi Chrome'da kullanırken, sonraki sayfanın 1 satır pikseli bir öncekine sızıyordu (arka plan rengi kullanılırken fark edilir). Kullanarak düzelttim.pagebreak { min-height: 1px; page-break-before: always; }
pzmarzly

44

Bu bağlantıyı deneyin

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

Görsel efekt elde etmek için HTML'nin yönetilmesini gerektirmediği için bu daha iyi bir yanıt.
FinnNk

Aslında diğerini daha çok seviyorum çünkü bana daha fazla kontrol sağlıyor. Her zaman "pagebreak" sınıfını sadece sayfa atlama yapması gereken H1'lere atayabilirim. Ama yine de iyi bir çözüm. @Media için +1, ancak ekran sayfa sonunu yoksaysa da, sanırım. Teşekkürler!
Daniel Magliola

h1, yazdırma molası için etiket olarak nelerin kullanabileceğinize bir örnektir. İstediğiniz adı değiştirebilir ve adınızı etiketleyebilirsiniz. Ayrıca sayfa sonu özelliğini de kullanabilirsiniz: always
jfarrell

1
h1iyi bir örnek değildir, çünkü 1. düzey başlık anlamına gelir ve bir sayfanın normalde böyle bir başlığı olması gerekir.
Jukka K. Korpela

6
İlk sayfadaki ilk başlığı atlamak istiyorsanız, deneyinh1:not(:first-child) { page-break-before:always; }
Jeff Atwood

10

Sadece bir güncelleme koymak istedim. page-break-afterartık eski bir mülktür.

Resmi sayfa durumları

Bu özelliğin yerini ayırma özelliği aldı.


Bu özelliğin yalnızca Microsoft IE ve Edge tarayıcıları tarafından desteklendiğine dikkat edilmelidir. caniuse.com/…
Benjamin

7

CSS özelliğini page-break-before(veya page-break-after) kullanabilirsiniz. Sadece set page-break-before: alwaysolanlar blok seviyesinden elemanlar (örneğin, başlığı, üzerinde div, pya da tableyeni bir satırda başlamalı elemanları).

Örneğin, herhangi bir 2. düzey başlıktan önce ve sınıftaki herhangi bir öğeden önce newpage(örneğin, <div class=newpage>...) satır kesmesine neden olmak için ,

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>

Bunu, bir sonrakine gitmek için sayfanın gerekli olduğu yere ekleyin ("sayfa 1" metni sayfa 1'de ve "sayfa 2" metni ikinci sayfada olacaktır).

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

Bu da işe yarıyor:

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

Diyelim ki böyle makaleler içeren bir blogunuz var:

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

Sadece CSS'ye eklemek benim için çalıştı:

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

(Chrome 69 ve Firefox 62 üzerinde test edildi ve çalışıyor).

Referans:


0
  • Html sayfasında pagebreak'i tanıtmak istediğimiz noktaya " page-break-after: always " tarzında bir sayfa sonu etiketi ekleyebiliriz .
  • " page-break-before " da çalışır

Misal:

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

Yukarıdaki kodla html dosyasını yazdırırken, baskı önizlemesi üç sayfa gösterir (her html bloğu için bir tane " tarayıcıda olduğu gibi üç bloğun da birbiri ardına göründüğü HTML_BLOCK_n " için bir tane) gösterir.


0

Tarayıcıda print komutunu kullanırken her 3 satırdan sonra bir sayfa sonu almam gerekiyordu.

<Div style = 'page-break-before: always;'> </div> ekledim

her 3. sırada ve ana div ekranımda: flex; bu yüzden ekranı kaldırdım: flex; ve istediğim gibi çalışıyordu.


0

CSS

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

HTML

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

-7

@ Chris Doggett mükemmel bir anlam ifade ediyor. Her ne kadar, lvsys.com'da komik bir numara buldum ve aslında firefox ve krom üzerinde çalışıyor. Bu yorumu sayfa sonunun eklenmesini istediğiniz yere koymanız yeterlidir. <p>Etiketi herhangi bir blok öğesiyle de değiştirebilirsiniz .

<p><!-- pagebreak --></p>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.