HTML 인쇄시 페이지를 강제로 끊을 수 있습니까?


188

인쇄 가능한 HTML 보고서를 만들고 있는데 새 페이지에서 시작해야하는 "섹션"이 있습니다.

HTML / CSS에 무언가를 넣을 수있는 방법이 있습니까? 브라우저에게 그 시점에서 페이지를 강제로 끊어야한다고 (새 페이지를 시작해야 함) 알릴 수 있습니까?

나는 모든 브라우저에서 작동하기 위해 이것을 필요로하지 않는다. 나는 이것을 인쇄하기 위해 사람들에게 특정 브라우저 세트를 사용하도록 지시 할 수 있다고 생각한다.

답변:


336

"pagebreak"(또는 "pb")라는 CSS 클래스를 다음과 같이 추가하십시오.

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

그런 다음 페이지 나누기를 원하는 빈 DIV 태그 ( 또는 상자를 생성하는 모든 블록 요소)를 추가 하십시오.

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

페이지에는 표시되지 않지만 인쇄시 페이지가 분리됩니다.

추신 : 이것은 아마도 사용할 때 -after(그리고 <div>페이지의 다른 것들과 함께 할 수있는 것) 에만 적용 되지만 CSS 클래스를 다음과 같이 보강해야한다는 것을 알았습니다.

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

7
그러나 CSS의 모든 좋은 점과 마찬가지로, 이것이 전반적으로 일관되게 작동하지는 않으므로 사이트에서 빈 페이지 더미를 왜 인쇄하는지 궁금해하는 화난 사용자가 있는지 확인하십시오.
Zoe

13
MDN에 따르면 page-break-after"상자를 생성하는 블록 요소에 적용"되므로 빈 <span>요소를 사용하면 작동하지 않습니다. 콘텐츠에 적용하는 것이 좋습니다. developer.mozilla.org/en-US/docs/Web/CSS/page-break-after
nullability

1
@ nullability : 잘 잡습니다. 나는 주로 이전 작업에서 WinForms의 WebBrowser 컨트롤에서 IE를 사용하는 표준을 따르는 황금 표준을 사용했습니다.
Chris Doggett

1
Chrome에서 작동하지 않습니다 ... <table> 내부에서 <tr> 다음에 페이지 나누기를하려고 하는데이 경우 작동합니까?
delphirules

3
어떤 이유로 Chrome 에서이 트릭을 사용할 때 다음 페이지의 1 행 픽셀이 이전 페이지로 누출되었습니다 (배경색을 사용할 때 주목할 만 함). .pagebreak { min-height: 1px; page-break-before: always; }
pzmarzly

44

링크를 사용해보십시오

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

시각적 효과를 얻기 위해 HTML을 조작하지 않아도되므로 이것이 더 나은 대답이라고 생각합니다.
FinnNk 2009

실제로 다른 제어 기능을 더 좋아합니다. 제어 기능이 향상 되었기 때문입니다. 페이지 점프를해야하는 H1에만 클래스 "pagebreak"을 할당 할 수 있습니다. 그러나 여전히 좋은 해결책입니다. @media의 경우 +1이지만 화면에서 페이지 구분을 무시해야한다고 생각합니다. 감사!
Daniel Magliola

h1은 인쇄 나누기의 태그로 사용할 수있는 예입니다. 당신은 당신이 원하는 이름을 대체하고 태그를 지정할 수 있습니다. 항상 : 당신은 또한 페이지 나누기 - 후 사용할 수 있습니다
jfarrell

1
h1첫 번째 수준 제목을 의미하기 때문에 좋은 예는 아닙니다. 페이지에는 일반적으로 하나의 제목 만 있어야합니다.
Jukka K. Korpela

6
첫 페이지의 첫 번째 헤더를 건너 뛰려면h1:not(:first-child) { page-break-before:always; }
Jeff Atwood


7

CSS 속성 page-break-before(또는 page-break-after)을 사용할 수 있습니다 . 그냥 설정 page-break-before: always하는 블록 수준 요소 (예를 들어, 제목에 div, p또는 table새로운 행에서 시작해야 요소).

예를 들어, 두 번째 수준 제목 앞과 클래스의 요소 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
  • html 페이지에서 페이지 나누기 를 소개하려는 지점에서 " page-break-after : always " 스타일 의 페이지 나누기 태그를 추가 할 수 있습니다 .
  • " page-break-before "도 작동합니다

예:

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 번째 줄마다 페이지 나누기가 필요했습니다.

<div style = 'page-break-before : always;'> </ div>를 추가했습니다.

모든 세 번째 행과 부모 div가 표시된 후 : flex; 그래서 표시를 제거했습니다 : flex; 내가 원하는대로 작동했습니다.



-7

@ Chris Doggett 는 완벽한 의미를 갖습니다. lvsys.com 에서 재미있는 트릭을 발견했지만 실제로 파이어 폭스와 크롬에서 작동합니다. 페이지 나누기를 삽입하려는 위치에이 주석을 넣으십시오. <p>태그를 블록 요소로 바꿀 수도 있습니다 .

<p><!-- pagebreak --></p>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.