📚

LaravelでPDF出力する場合はlaravel-snappyがおすすめ

2021/05/21に公開

やりたいこと

PHP/LaravelでBladeのHTMLをPDFに変換して表示・ダウンロードしたい。

結論

laravel-snappyを使えばほぼ問題なかったです。
理由としては laravel-snappy で使用している HTML → PDF の変換は wkhtmltopdf というHTML5/CSS3にほぼ対応しているライブラリを利用しているからです。

laravel-dompdf を使った場合

最初にLaravelで選択肢に入ったライブラリはlaravel-dompdfだったのですが、こちらは CSS2.1 が標準かつ CSS2.1 も完全対応しているわけではないという残念な仕様でした。
厳密に言うとラッパーしているdompdfの対応状況なのですが…。
こちらを使用したところ flexbox でのレイアウトが崩れ、妥協して使ってみた float もうまく行かず嫌になってやめました。

Laravel 以外で使う

PHPで直接Snappyを使うか、 Snappy のreadmeに書いてある Symfony や Zend のラッパーライブラリを使うのが良さそうです。

wkhtmltopdf だから完璧というわけでもないみたい

laravel-snappysnappyを、 snappy はwkhtmltopdfをラッパーしているようです。
wkhtmltopdf の使っているレンダリング用の Chromium エンジンが古いようで一部対応していない CSS があるようです。
私の場合だとobject-fitが効かず画像サイズのレイアウトが少し崩れました。
この程度は書き方変えればしのげるので許容範囲かなと思います。

GitHubで編集を提案

Discussion