Pagina

Rust 製の HTML + CSS → PDF 変換エンジン。CSS Paged Media 仕様の実装を目指す OSS (MIT / Apache-2.0)。

リポジトリ: github.com/O6lvl4/pagina

アーキテクチャ

flowchart LR
    HTML["HTML<br/>html5ever"] --> DOM["DOM Tree"]
    CSS["CSS<br/>cssparser"] --> Rules["Style Rules<br/>+ @page"]
    DOM --> Styled["Styled Tree<br/>cascade + inherit"]
    Rules --> Styled
    Styled --> Layout["Paged Layout<br/>break / footnote"]
    Layout --> PDF["PDF<br/>printpdf"]

Servo プロジェクトの html5ever(HTML パーサー)と cssparser(CSS パーサー)を使用。レイアウトエンジンと PDF 出力は自前実装。

Cargo Workspace 構成

クレート役割
pagina-coreエンジン本体(DOM, CSS, スタイル, レイアウト, PDF)
pagina-cliCLI バイナリ(pagina input.html -o output.pdf)

対応機能

機能状態
@page { size, margin }対応(A4/A3/A5/B4/B5/letter/legal + landscape)
マージンボックス(@top-center 等 16 箇所)対応
counter(page) / counter(pages)対応
柱 — string-set + string()対応
@page :first / :left / :right対応
改ページ — break-before / break-after: page対応
脚注 — float: footnote対応
CSS カスケード(タグ/クラス/ID + inline style)対応
font-size / font-weight / font-style / color対応
text-align / line-height / margin / padding対応
テーブル(基本)対応
リスト(ol/ul)対応
罫線(border-bottom / hr)対応
SVG 埋め込み未対応
フォント埋め込み(日本語等)未対応
target-counter()(目次)パーサーのみ
MathML未対応
PDF/A / PDF/UA未対応
JavaScript 実行未対応
CMYK カラー未対応

差別化ポイント

関連

Graph