Могу ли я заставить разрыв страницы при печати 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.