Могу ли я заставить разрыв страницы при печати HTML?


200

Я делаю HTML-отчет, который будет печататься, и в нем есть «разделы», которые должны начинаться на новой странице.

Есть ли способ поместить что-то в HTML / CSS, которое будет сигнализировать браузеру о том, что в этот момент ему необходимо принудительно разорвать страницу (начать новую страницу)?

Мне не нужно, чтобы это работало в каждом браузере, я думаю, что могу посоветовать людям использовать определенный набор браузеров, чтобы распечатать это.

Ответы:


351

Добавьте класс 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;
    }
}

9
Но, как и все хорошие вещи в CSS, это не всегда работает одинаково по всем направлениям, поэтому проверьте, как это работает, чтобы не разозлить пользователей, которые недоумевают, почему ваш сайт печатает кучу лишних пустых страниц!
Zoe

14
Согласно MDN, page-break-after«применяется к блочным элементам, которые создают поле», поэтому использование пустого <span>элемента не сработает. Лучше применить его к части вашего контента. См developer.mozilla.org/en-US/docs/Web/CSS/page-break-after
допустимость пустых

1
@nullability: Хороший улов. В основном я использовал это на своей старой работе в элементе управления WebBrowser в WinForms, который использовал IE, золотой стандарт следующих стандартов.
Крис Доггетт

2
У меня это не сработало в Chrome ... Я пытаюсь сделать разрыв страницы внутри после <tr> внутри <table>, будет ли это работать в этом случае?
delphirules 05

3
По какой-то причине при использовании этого трюка в Chrome 1 строка пикселей следующей страницы просачивалась в предыдущую (это заметно при использовании background-color). Я исправил это с помощью.pagebreak { min-height: 1px; page-break-before: always; }
pzmarzly

45

Попробуйте эту ссылку

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

Я думаю, что это лучший ответ, поскольку он не требует искажения HTML для достижения визуального эффекта.
FinnNk 02

На самом деле мне больше нравится второй, поскольку он дает мне больше контроля. Я всегда могу назначить класс «pagebreak» только тем H1, которые должны заставить страницу прыгать. Но это все же хорошее решение. +1 за @media, хотя screen должен игнорировать разрыв страницы, я думаю. Благодарность!
Даниэль Маглиола 02

h1 - это пример того, что вы можете использовать в качестве тега для разрыва печати. Вы можете подставить и указать имя, которое вам нравится. вы также можете использовать page-break-after: always
jfarrell

1
h1не является хорошим примером, так как это означает заголовок 1-го уровня, а страница обычно должна иметь только один такой заголовок.
Jukka K. Korpela

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

14

Просто хотел поставить обнову. page-break-afterтеперь унаследованная собственность.

Официальная страница заявляет

Это свойство было заменено свойством break-after .


1
Следует отметить, что это свойство поддерживается только браузерами Microsoft IE и Edge. caniuse.com/…
Бенджамин

9

Вы можете использовать свойство 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 }

9

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).

Справка:


1

Мне нужен разрыв страницы после каждой третьей строки, пока мы используем команду печати в браузере.

я добавил

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

после каждой третьей строки и моего родительского div display: flex; я удалил, display: flex;и он работал так, как я хочу.


0
  • Мы можем добавить тег разрыва страницы со стилем « page-break-after: always » в том месте, где мы хотим ввести разрыв страницы на 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 »), где, как и в браузере, все три блока появляются последовательно один за другим.



-7

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

<p><!-- pagebreak --></p>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.