Чи можна примусити розірвати сторінку в друкуванні HTML?


188

Я складаю HTML-звіт, який буде друкованим, і він має "розділи", які повинні починатися на новій сторінці.

Чи є якийсь спосіб помістити в HTML / CSS щось, що буде сигналізувати браузеру про те, що йому потрібно змусити розрив сторінки (запустити нову сторінку) у цей момент?

Мені це не потрібно для роботи у кожному браузері, я думаю, що можу сказати людям використовувати певний набір браузерів для того, щоб надрукувати це.

Відповіді:


336

Додайте клас CSS під назвою "pagebreak" (або "pb") так:

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

Потім додайте порожній тег DIV ( або будь-який елемент блоку, який створює поле ), де ви хочете розірвати сторінку.

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

Він не відображатиметься на сторінці, але розбиває його під час друку.

PS Можливо, це стосується лише під час використання -after(а також того, що ви ще можете зробити з іншими <div>s на сторінці), але я виявив, що мені довелося збільшити клас CSS таким чином:

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

7
Але, як і всі хороші речі в CSS, це не завжди працює послідовно, тому випробовуйте живі денні світильники, щоб у вас не розсердилися користувачі, які цікавляться, чому ваш сайт друкує купу зайвих порожніх сторінок!
Зої

13
Згідно з MDN, page-break-after"застосовується до блокових елементів, що генерують поле", тому використання порожнього <span>елемента не працюватиме. Краще застосувати його до частини вашого вмісту. Дивіться developer.mozilla.org/en-US/docs/Web/CSS/page-break-after
зведення нанівець

1
@ незмінність: Хороший улов. Я в основному використовував це на своїй старій роботі в управлінні WebBrowser в WinForms, яка використовувала IE, золотий стандарт наступних стандартів.
Кріс Доггетт

1
Це не спрацювало для мене в Chrome ... Я намагаюсь зробити виправлення сторінки всередині після <tr> всередині <table>, чи буде це працювати в цьому випадку?
дельфірули

3
Чомусь при використанні цього фокусу в Chrome 1 рядок пікселів наступної сторінки просочився до попередньої (помітно при використанні фонового кольору). Я виправив це за допомогою.pagebreak { min-height: 1px; page-break-before: always; }
pzmarzly

44

Спробуйте це посилання

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

Я думаю, що це краща відповідь, оскільки не передбачає керування HTML для досягнення візуального ефекту.
FinnNk

Мені справді подобається інший краще, оскільки він дає мені більше контролю. Я завжди можу призначити клас "pagebreak" лише H1, який повинен зробити перехід сторінки. Але це все-таки хороше рішення. +1 для @media, хоча екран повинен ігнорувати попередній перерву сторінки. Дякую!
Даніель Маґіола

h1 - приклад того, що ви можете використовувати як тег для розриву друку. Ви можете замінити і позначати ім'я там, де вам подобається. ви також можете скористатися
переходом

1
h1не є хорошим прикладом, оскільки він означає заголовок 1-го рівня, і на сторінці зазвичай має бути лише один такий заголовок.
Юкка К. Корпела

6
Якщо ви хочете пропустити перший заголовок на першій сторінці, спробуйтеh1:not(:first-child) { page-break-before:always; }
Джефф Етвуд


7

Ви можете використовувати властивість CSS page-break-before(або page-break-after). Просто встановіть page-break-before: alwaysна ці блокові елементи (наприклад, заголовок, div, pабоtable елементи) , які повинні починатися з нового рядка.

Наприклад, щоб викликати розрив рядка перед будь-яким заголовком 2-го рівня та перед будь-яким елементом у класі newpage(наприклад, <div class=newpage>...), ви б використали

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>

Просто додайте це там, де вам потрібна сторінка, щоб перейти до наступної (текст "сторінка 1" буде на сторінці 1, а текст "сторінка 2" буде на другій сторінці).

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

Це також працює:

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

Скажімо, у вас є блог із такими статтями:

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

Просто додавання цього до CSS працювало для мене:

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

(випробувано та працює на Chrome 69 та Firefox 62).

Довідка:


0
  • Ми можемо додати тег розриву сторінки зі стилем " page-break-after: always " в тому місці, де ми хочемо ввести pagebreak на html-сторінці.
  • Також працює " розбиття сторінки "

Приклад:

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

Під час друку html-файлу з вищевказаним кодом попередній перегляд друку покаже три сторінки (по одній для кожного блоку html « HTML_BLOCK_n »), де, як і у браузері, усі три блоки з’являються послідовно один за одним.


0

Мені потрібен перерв сторінки після кожного 3-го рядка, коли ми використовуємо команду print у браузері.

Я додав <div style = 'page-break-before: always;'> </div>

після кожного третього ряду та мого батьківського діва відображається: flex; тому я зняв дисплей: flex; і це працювало так, як я хочу.



-7

@ Кріс Доггетт має ідеальний сенс. Хоча, я знайшов один веселий трюк на lvsys.com , і він насправді працює на firefox та chrome. Просто поставте цей коментар куди завгодно, щоб ви вставили перерву сторінки. Ви також можете замінити <p>тег будь-яким блоковим елементом.

<p><!-- pagebreak --></p>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.