Paged.js

W3C の CSS Paged Media / Generated Content for Paged Media 仕様をブラウザ上でポリフィルする OSS の JavaScript ライブラリ。HTML+CSS をページに分割して印刷・PDF にできる。Coko Foundation(pagedmedia.org)が開発、MIT ライセンス。商用エンジン Prince のオープンな対抗。

何をするか

ブラウザは本来「無限に縦スクロールする1枚」しか描けず、@page や running header などの Paged Media CSS をネイティブには解釈しない。Paged.js は JS で:

  1. chunker / fragmenter — コンテンツを走査し、ページの高さで改ページ位置を計算して .pagedjs_page の連なりに分割
  2. page box の生成 — @page のマージン領域(上下左右の16スロット)を実 DOM として作る
  3. running headers/footers・ページ番号・相互参照 — string-set / counter(page) / target-counter() などを JS で解決

結果の DOM を Chromium(多くは Puppeteer/ヘッドレス)で印刷すれば PDF になる。

立ち位置(HTML→PDF エンジン比較)

実行環境CSS Paged Mediaライセンス
Paged.jsブラウザ(Chromium)上の JS ポリフィル部分的(ポリフィルできる範囲)OSS (MIT)
Prince独自エンジンほぼフル商用
Vivliostyleブラウザ上の JS(同系)部分的OSS
WeasyPrint独自エンジン(Python)部分的OSS

ポリフィル方式の利点は「ブラウザの CSS/フォント/レイアウトをそのまま使える」こと。欠点は Chromium 依存と、複雑な改ページ制御で独自エンジンに劣る点。

なぜ重要か

「Web 標準(HTML/CSS)だけで組版する」思想の代表格。専用 DSL や商用エンジンを使わず、デザイナーが知っている CSS で本・帳票を作れる。CSS Paged Media を「未来の標準」として先取りするのが狙い。

関連

Graph