CSS には印刷のスタイルを指定できるルール・プロパティが用意されています。 そして Chromium や Google Chrome は標準で PDF 出力ができます。 つまり厄介な PDF ファイル作成を CSS で簡単にできるようになります。 この記事は、CSS でいい感じに PDF 出力する例を説明します。
サンプルは CodePen で公開しています。
https://codepen.io/ueokande/pen/yoBwrq
CSS の印刷サポート
CSS には、以下のような印刷の設定ができるルール・プロパティが用意されています。
@media print { ... }
: このルール内に記述された CSS は、印刷時のみ適用される。@page { ... }
: 印刷時のページサイズやマージンを指定する。page-break-before
プロパティ: 要素の直前で改ページを制御するpage-break-after
プロパティ: 要素の直後で改ページを制御するpage-break-inside
プロパティ: 要素の中で改ページを制御する-webkit-print-color-adjust
プロパティ ...要素の背景色、背景画像を印刷するかを指定する
例: スライドを出力
プレゼンテーションのスライドを例にします。
まず、こんな感じの HTML を用意します。
<section>
<h1>What is Lorem Ipsum?</h1>
<ul>
<li>
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
</li>
<li>
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to
make a type specimen book.
</li>
</ul>
</section>
<section>...</section>
<section>...</section>
<section>...</section>
そして CSS でsection
のスタイルを適用します。
section {
width: 640px;
height: 480px;
display: inline-block;
margin: 12px;
box-shadow: 0 0 4px black;
box-sizing: border-box;
}
するとこんな感じの、スライドのような感じで表示されます。
これで 1 ページ 1section
で出力できるように CSS を指定します。
適用した CSS は次のような感じです。
@media print {
@page {
size: 640px 480px;
margin: 0;
}
* {
-webkit-print-color-adjust: exact;
}
body {
margin: 0;
padding: 0;
}
section {
margin: 0;
box-shadow: none;
page-break-before: always;
}
}
まず@page
ルールで、印刷時の余白を 0 にして、ページサイズをsection
と一致させます。
-webkit-print-color-adjust: exact
で、印刷時に背景色・背景画像を出力します。
section
にpage-break-before: always
を指定して、section
の直前で改ページするようにします。
これは、もしsection
より大きなページで出力した場合でも、各section
ごとに改ページされるようにします。
Chromium/Google Chromium で印刷ダイアログを表示して、1 ページ 1section
のようにプレビューされれば OK です。