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>

ページには表示されませんが、印刷時にページが分割されます。

PSおそらくこれは使用時にのみ適用されます-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
NULL可能

1
@nullability:良いキャッチ。私は主に、以下の標準のゴールドスタンダードであるIEを使用するWinFormsのWebBrowserコントロールの古い仕事でこれを使用していました。
Chris Doggett 2014年

1
これはChromeでは機能しませんでした... <table>内の<tr>の後で改ページしようとしていますが、この場合は機能しますか?
delphirules

3
何らかの理由で、Chromeでこのトリックを使用すると、次のページの1行のピクセルが前の行に漏れていました(background-colorを使用しているときに顕著です)。私はそれを使用して修正しました.pagebreak { min-height: 1px; page-break-before: always; }
pzmarzly

44

このリンクを試してください

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

これは、視覚効果を実現するためにHTMLを変換する必要がないため、より良い答えだと思います。
FinnNk 2009年

私はより多くのコントロールを与えるので、私は実際には他の方が好きです。ページをジャンプさせるH1にのみ、「ページ区切り」クラスを常に割り当てることができます。しかし、それはまだ良い解決策です。@mediaの+1、画面は改ページ前を無視する必要がありますが、私は推測します。ありがとう!
ダニエル・マグリオラ2009年

h1は、改ページのタグとして使用できるものの例です。代わりに、好きな名前にタグを付けることができます。常に:あなたはまた、改ページ後に使用することができます
jfarrell

1
h1これは1番目のレベルの見出しを意味するため、良い例ではありません。通常、ページにはそのような見出しが1つだけあるはずです。
Jukka K. Korpela

6
最初のページの最初のヘッダーをスキップする場合は、次を試してくださいh1:not(:first-child) { page-break-before:always; }
Jeff Atwood '21

10

アップデートを入れたかっただけです。page-break-after現在は古いプロパティです。

公式ページの状態

このプロパティは、break-afterプロパティに置き換えられました。


このプロパティは、Microsoft IEおよびEdgeブラウザーでのみサポートされていることに注意してください。caniuse.com/...
ベンジャミン

7

CSSプロパティpage-break-before(またはpage-break-after)を使用できます。ただ、設定されpage-break-before: alwaysたものブロックレベル要素(例えば、見出し、上divpまたは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」というテキストは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ページに改ページを紹介したいポイントで」。
  • 改ページ」も機能します

例:

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

上記のコードでhtmlファイルを印刷している間、印刷プレビューには3つのページ(各htmlブロック " HTML_BLOCK_n "に1つ)が表示されます。


0

ブラウザで印刷コマンドを使用している間、3行ごとに改ページが必要でした。

<div style = 'page-break-before:always;'> </ div>を追加しました

3行ごとと親divが表示された後:flex; だから私はディスプレイを削除しました:flex; 思い通りに動いていた。



-7

@ クリス・ドッグゲットは完全に理にかなっています。しかし、私はlvsys.comで1つの面白いトリックを見つけました、そしてそれは実際にはFirefoxとChromeで動作します。改ページを挿入したい場所にこのコメントを置くだけです。<p>タグを任意のブロック要素に置き換えることもできます。

<p><!-- pagebreak --></p>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.