ウェブアプリケーションでPDF生成
ドキュメントの性質
何ページにも渡るのか、
ウェブページと同程度の情報量なのか
で変わる。
生成のタイミング
アクセス時
非同期
生成プロセス
アプリケーションの言語でそのまま作る
HTML文字列を生成するように
別言語(処理プロセス)を経由する
TeX
Postscript
ブラウザーのレンダラー
wkhtmltopdf
ヘッドレスブラウザー
CDP
フロントエンドで作る
ブラウザー拡張
ブラウザーの印刷機能を使ってねと案内する
ウェブアプリケーションの場合、サーバーサイドではHTML文字列書き出すまでをやっていればよくて、HTMLとCSSからレンダリングするのはブラウザーに任せられるのが開発側の手間が少なくサーバーリソースも使わなくてよかったわけだけど、PDFは従来はレンダリング相当のこともサーバーサイドでやらなければない辛さがあった
リソース食うし、処理の分レスポンスが遅くなる
厳密にはレンダリングは閲覧者側のPDFビューワーアプリケーションではあるけど、サーバーサイドでも殆ど同じことを一度やらねばならない。それがPDFファイル形式の特徴
厳密にはHTML生成に相当する部分は共通していて、ウェブページはCSSをアクセスのたびに計算で作らず、一度作ったのを渡すだけでブラウザー側でHTMLと合わせてレイアウト計算してくれるところが差分なのかな
そうだとするとCSS in JSな昨今(レイアウトのロジックもページごと、コンポーネントごとに毎回JavaScriptで計算している)はそこのアドバンテージも実はない? というのが逆説的にブラウザー側でPDF作っても同じじゃんとなってるのかも、無意識に
HTMLはテキストデータだから生成も送信もストリーミングし易いという性質の違いはある。バイナリー扱うのに慣れてる人にはそうでもない?
スクリプト言語の場合は、処理系の最適化が入っているというのもありそう
画像やフォントの埋め込みを、PDFの場合はファイル作成時にしないといけない。HTMLの場合はブラウザーが別のURIから取得して、ブラウザーが画面を作るのに任せられる。これは、特に画像が多い場合、全然変わってくる。