テーブルは次の部分からなっています。
強制改ページは、指定した場所で強制的に改ページを発生させる機能です。 強制改ページを指定出来るのは次の場所です。
ただし、上記の場所であっても浮動ボックス内、絶対配置ボックス内、テーブルセル内では強制改ページを発生することは出来ません。
要素の直前の強制改ページの指定は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>
また、単純に改ページするためではなく、改ページした直後のページが右になるか、左になるかを指定することが出来ます。 この場合、調整のために空白のページがつくられる可能性があります。
強制改ページの後のページが右になるか、左になるかを指定するには、 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と解釈されます。
orphansとwidowsプロパティは、 段落(ここでは通常のフローのブロックを指し、<br>による空行等は段落の区切りとは認識されません) の途中で改ページが発生する場合、必ず前のページに残す行数と、 後のページに表示される行数を指定するものです。
なお、Copper PDFは実際の行数ではなく、行から行までの長さを標準的な行の高さ (段落に適用されたline-heightによる高さ) で割った値を整数に丸めた数値を基準に計算します。 そのため、行内に大きな画像が存在したり、インラインに対するfont-size の指定により、例えば通常の2倍の高さに拡張されている行が存在すれば、2行として計算します。 これはCSS 2.1の仕様にはありませんが、より直感的な改ページとするための仕様です。
ある段落がページの下端にかかっている場合、段落を途中で分割して改ページする必要があります。 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は改ページされた後のページに最低限表示されなければならない行数で、 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ページ目 |
---|
orphansとwidows の両方の条件を同時に満たすことが出来ない場合も、orphans を満たせなかった場合と同様に段落を丸ごと次ページに移動します。
例えば、以下の状況ではorphansとwindows の両方が満たされています。
(段落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行が前ページに残されます。
次の場所には、改ページの抑制を指定することが出来ます。
内部での改ページを抑制するには、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; が指定されています。
Copper PDFは、文書の内容がページの下端にさしかかった部分で、自動的に改ページします。 自動的な改ページが発生するのは次の場所です。
逆に、以下の場所ではどのような場合も改ページされることはありません。
通常のフローでは orphans, widows を尊重して改ページが行われます。 ブロックに境界線がある場合に境界線の直後、あるいは高さが指定されていて内容がないブロックの内部では なるべく改ページを避けますが、ブロックがページの先頭ある場合は改ページが発生します。
浮動ボックスがページの下端をはみ出した場合、浮動ボックスは分割され、 次ページに送られた部分は浮動ボックスとして再配置されます。 浮動ボックスの分割でも、orphans, windows の指定は尊重されますが、条件を満たせない場合であっても浮動ボックスを丸ごと次ページに送られることはなく、 その場合はorphans, widowsを無視して分割されます。
画像およびpage-break-inside: avoid;が指定された浮動ボックスは分割されることはなく、 ページの下端をはみ出した場合は丸ごと次のページに持ち越されます。 ただし、浮動ボックスの中に入れ子になった浮動ボックスではpage-break-inside: avoid;は無効です。