「sghtmltopdf」なら表が改ページしても見出し行が次ページに付いてくる

sghtmltopdf
ヘッドレスブラウザを使わずに HTML を PDF に変換する、Rust 製のレンダラー
GitHub公式サイト
公開
正式公開 2026-07-20
作り手
yo_waka(個人)
対応
CLI・Rust(crates.io)・Ruby(gem)・Docker(linux/amd64・linux/arm64)
言語
日本語・英語
価格
無料(MIT ライセンス)
評価
GitHub のスター 308(2026-10-08)

どんなアプリか

sghtmltopdf は、HTML をそのまま PDF として出力する変換器です。Rust で書かれていて、Chromium・WebKit・Gecko のヘッドレスブラウザをインストールしなくても PDF を出力できます。使い方は CLI・HTTP サーバ・ライブラリの3種類から選べ、ライブラリは Ruby の gem と Rust のクレートで提供されています。

対象として想定しているのは、任意の Web ページではなく、請求書・領収書・レポートのように上から下へ流れ、区切りのはっきりした文書です。

個人的にwkhtmltopdf のアプローチがとても好きだったので、使っていて感じた課題を解消させてモダナイズした wkhtmltopdf を作ろうと思いました。

yo_waka さん、sghtmltopdf 公式サイト「wkhtmltopdf/WickedPDF への感謝」

名前の「sg」は Second Generation の略です。2023年1月にアーカイブされた wkhtmltopdf で感じていた課題に対して、Flexbox・Grid・カスタムプロパティを含む CSS3 への対応や、表の途中で改ページしても の行を次のページの先頭に繰り返す仕組みを入れています。

公式サイトに載っている実測値では、wkhtmltopdf 0.12.6.1 と Google Chrome 151 のヘッドレスモードを比べ、60,000要素の文書で wkhtmltopdf の約21倍、ヘッドレス Chrome の約53倍の速さとしています。メモリは wkhtmltopdf とほぼ同等で、ストリーミングモードを使うと段落が主体の文書では25MBまで下がると書かれています。

Rails では gem を追加すると Railtie が設定を行い、wicked_pdf と同じキーで使える :pdf レンダラーが登録されます。既存のコントローラーを変えずに済むことも多いと説明されています。

料金とデータの置き場所

MIT ライセンスのオープンソースとして GitHub で公開されています。

同じ分野のアプリ

名前型仕掛け対応料金
sghtmltopdfHTML→PDF 変換ブラウザを起動せず、PDF 出力に特化したエンジンで HTML を PDF にするCLI / Rust / Ruby / Docker無料(MIT)
minitype組版エンジンTypeScript から呼べる、日本語組版に対応したヘッドレス組版エンジンnpm(Node.js / Bun / ブラウザ)個人・同人利用は自由。本体は PolyForm Noncommercial 1.0.0(商用は問い合わせ)
servo-fetchWeb ページ取得・描画Servo を内蔵し、Web ページを Markdown / JSON / スクリーンショットにする単一バイナリCLI / Rust / Python / Node.js無料(Apache-2.0)
Office Open XML Viewer文書ビューアWord・Excel・PowerPoint 文書をブラウザ内で HTML Canvas に描画するWeb(ブラウザ、HTML Canvas)無料(MIT)

入れる前に

CSS への対応はブラウザが扱うものの一部です。グラデーションなど対応していないものはプロパティ対応表にまとめられていて、JavaScript の実行、ブラウザとのピクセル単位の一致、CSS の全面対応は今後の目標として挙げられています。

ストリーミングモードは 直下の要素単位で書き出すため、巨大な表が1つだけの帳票では効果がありません。

Windows のように gem が動かない環境では、server_url を設定すると、同じ呼び出しを別プロセスの sghtmltopdf server に任せられます。

CLI のフラグの多くは wkhtmltopdf と同じ名前・意味です。実装しないフラグは黙って無視せず、理由と代わりの方法を示して終了します。同じ名前でも挙動が違う点として、CSS の @page が CLI より優先されることや、既定の余白が1インチであることが挙げられています。

公式の Docker イメージには BIZ UDPゴシックと BIZ UDP明朝が入っていて、フォントを用意しなくても日本語の文書を出力できます。