←前へ 目次↑ 次へ→

4.10. 改ページ制御

4.10.1. 用語の定義

この章では、以下の用語を使って説明します。
絶対配置ボックス
position: absolute;が指定された要素です。 position: fixed;が指定された要素やページごとに生成されるコンテンツも 広義の絶対配置ボックスです。
浮動ボックス
float: left;またはfloat: right; が指定された要素です。
通常のフローのブロック
何も指定されていない<p>要素や<div>要素やdisplay: block;が 指定された要素で絶対配置ボックスでも浮動ボックスでもないものです。

テーブルは次の部分からなっています。

テーブルキャプション
HTMLのcaptionタグ、あるいはdisplayがtable-captionと指定された部分。
テーブルヘッダ
HTMLのtheadタグ、あるいはdisplayがtable-header-groupと指定された部分。
テーブルフッタ
HTMLのtfootタグ、あるいはdisplayがtable-footer-groupと指定された部分。
テーブル行グループ
HTMLのtbodyタグ、あるいはdisplayがtable-row-groupと指定された部分。 ただし、tbodyやtable-row-groupを省略して、テーブルの中に直接存在する行も行グループに属すると見なされます。

4.10.2. 強制改ページ

強制改ページは、指定した場所で強制的に改ページを発生させる機能です。 強制改ページを指定できるのは次の場所です。

ただし、上記の場所であっても浮動ボックス内、絶対配置ボックス内、テーブルセル内では強制改ページを発生することはできません。

要素の直前の強制改ページの指定はpage-break-before: always;です。 要素の直後の強制改ページの指定はpage-break-after: always;です。

以下は強制改ページを使って表紙を作る例です。

<html>
  <head>
    <title>ドキュメント</title>
  </head>
  <body>
    <h1 style="page-break-after: always;">表紙</h1>
    <p>本文...</p>
  </body>
</html>

また、単純に改ページするためではなく、改ページした直後のページが右になるか、左になるかを指定することができます。 この場合、調整のために空白のページが1つつくられる可能性があります。

強制改ページの後のページが右になるか、左になるかを指定するには、 page-break-beforeおよびpage-break-afterプロパティの値として、alwaysの代わりに left(左ページにする場合)またはright(右ページにする場合)を指定します。

以下の例では、必ず右側になる中表紙を生成しています。

<html>
  <head>
    <title>ドキュメント</title>
  </head>
  <body>
    <h1 style="page-break-after: always;">表紙</h1>
    <p style="page-break-after: always;">本文1...</p>
    <p>本文2...</p>
    <h1 style="page-break-before: right;">中表紙</h1>
  </body>
</html>

ただし、強制改ページのleft, rightの指定はテーブル内部では適用されず、いずれもalwaysと解釈されます。

4.10.3. orphanswidows

orphanswidowsプロパティは、 段落(ここでは通常のフローのブロックを指し、<br>による空行等は段落の区切りとは認識されません) の途中で改ページが発生する場合、必ず前のページに残す行数と、 後のページに表示される行数を指定するものです。

なお、Copper PDFは実際の行数ではなく、行から行までの長さを標準的な行の高さ (段落に適用されたline-heightによる高さ) で割った値を整数に丸めた数値を基準に計算します。 そのため、行内に大きな画像が存在したり、インラインに対するfont-size の指定により、例えば通常の2倍の高さに拡張されている行が存在すれば、2行として計算します。 これはCSS 2.1の仕様にはありませんが、より直感的な改ページとするための仕様です。

orphans

ある段落がページの下端にかかっている場合、段落を途中で分割して改ページする必要があります。 orphansはそのような場合に、 改ページされる前のページに最低限残さなければならない行数です。 例えば、以下の例ではorphansが3に対して 改ページ前のページに3行があるので、条件を満たしています。

(段落1)1行目...
2行目...
3行目...
4行目...
5行目...
6行目...
7行目...
8行目...

(段落2)1行目...
2行目...
3行目...
4行目...
5行目...
1ページ目 2ページ目

同じ文書でorphansを4に指定すると、 そのままではorphansを満たすことができないため、 段落をまるごと次ページに移動してしまいます。

(段落1)1行目...
2行目...
3行目...
4行目...
5行目...
6行目...
7行目...
8行目...




(段落2)1行目...
2行目...
3行目...
4行目...
5行目...
1ページ目 2ページ目

widows

文書の内容の高さがページの高さよりわずかに高い場合、 次のページに文書の内容のうち何行かを先送りしなければなりません。 widowsは改ページされた後のページに最低限表示されなければならない行数で、 Copper PDFはwidowsを満たすように先送りする行数を調整します。 例えば、widowsが2の場合、以下の例では2ページ目に2行存在するので条件を満たしています。

(段落1)1行目...
2行目...
3行目...
4行目...
5行目...
6行目...
7行目...
8行目...

(段落2)1行目...
2行目...
3行目...
4行目...
5行目...
1ページ目 2ページ目

同じ文書でwidowsを3に指定すると、 以下のように前のページから次のページへ行を移動して、widowsを満たすようにします。

(段落1)1行目...
2行目...
3行目...
4行目...
5行目...
6行目...
7行目...
8行目...

(段落2)1行目...
2行目...

3行目...
4行目...
5行目...
1ページ目 2ページ目

orphanswidowsの競合

orphanswidows の両方の条件を同時に満たすことができない場合も、orphans を満たせなかった場合と同様に段落を丸ごと次ページに移動します。

例えば、以下の状況ではorphanswindows の両方が満たされています。

(段落1)1行目...
2行目...
3行目...
4行目...
5行目...
6行目...
7行目...
8行目...

(段落2)1行目...
2行目...
3行目...
4行目...
5行目...
1ページ目 2ページ目

この状態でwidowsを3に設定すると、 orphansは満たせるがwidowsは 満たせない状態になります。

(段落1)1行目...
2行目...
3行目...
4行目...
5行目...
6行目...
7行目...
8行目...




(段落2)1行目...
2行目...
3行目...
4行目...
5行目...
1ページ目 2ページ目

ただし、段落がページの先頭にある場合は、orphansが無視され、 少なくとも1行が前ページに残されます。

4.10.4. 改ページの抑制

次の場所には、改ページの抑制を指定することができます。

内部の改ページ抑制

内部での改ページを抑制するには、page-break-inside: avoid;という指定をします。

改ページ抑制されたボックスがページをはみ出す場合は、ボックスが丸ごと次のページの先頭に先送りされます。 ただし、ボックスが(先送りの結果か、元々そこにあるかに関わらず)ページの先頭にある場合、かつボックスの高さがページの高さを超えてしまう場合は、 改ページの抑制を無視してページ分割されます。

前後の改ページ抑制

ボックスの前後での改ページを抑制するには、page-break-before: avoid;(ボックスの前)あるいは page-break-after: avoid;(ボックスの後)を指定します。 Copper PDFは改ページが抑制された箇所での改ページを避け、前後の何行かを必ず1つのページに含めるようにします。 改ページが抑制されたポイントの前に入れる行数はorphansに依存します。

強制改ページと改ページの抑制が競合する場合は、強制改ページが優先されます。。 例えば、page-break-after: always;と指定された段落の直後に、 page-break-before: avoid;と指定された段落がある場合です。 このような競合が起こった場合、常に強制改ページが優先されます。 つまり、このケースではpage-break-before: avoid;は無視されて改ページが発生します。

なお、HTMLのh1〜h6要素にはデフォルトでpage-break-before: avoid; が指定されています。

4.10.5. 自動改ページ

Copper PDFは、文書の内容がページの下端にさしかかった部分で、自動的に改ページします。 自動的な改ページが発生するのは次の場所です。

逆に、以下の場所ではどのような場合も改ページされることはありません。

通常のフローのブロック

通常のフローでは orphans, widows を尊重して改ページが行われます。 ブロックに境界線がある場合に境界線の直後、あるいは高さが指定されていて内容がないブロックの内部では なるべく改ページを避けますが、ブロックがページの先頭ある場合は改ページが発生します。

浮動ボックス

浮動ボックスがページの下端をはみ出した場合、浮動ボックスは分割され、 次ページに送られた部分は浮動ボックスとして再配置されます。 浮動ボックスの分割でも、orphans, windows の指定は尊重されますが、条件を満たせない場合であっても浮動ボックスを丸ごと次ページに送られることはなく、 その場合はorphans, widowsを無視して分割されます。

画像およびpage-break-inside: avoid;が指定された浮動ボックスは分割されることはなく、 ページの下端をはみ出した場合は丸ごと次のページに持ち越されます。 ただし、浮動ボックスの中に入れ子になった浮動ボックスではpage-break-inside: avoid;は無効です。


←前へ 目次↑ 次へ→
Copper PDF ©2012 Zamasoft. All rights reserved.