はじめに
PHPでHTMLからPDFに変換するというといくつか選択肢があるが、今回は Headless Chrome
を使用しているライブラリを使って実践してみる。
環境
Docker Desktop 4.23.0 (120376)
nginx 1.25.2
php 8.2
composer 2.6.3
使用するライブラリ
下記を使用する
https://github.com/spiritix/php-chrome-html2pdf
その他のライブラリ
- mPDF
https://mpdf.github.io/ - TCPDF
https://tcpdf.org/ - Snappy
https://github.com/KnpLabs/snappy - chrome-php/chrome
https://github.com/chrome-php/chrome
mPDF
, TCPDF
は HTMLからPDFにするには適用できるCSSが少ないため除外した。
Snappyに関しては、wkhtmltopdf
に依存しているため除外した。
※wkhtmltopdf
はEOLとなっているため、使用しない。chrome-php/chrome
については、Headless chrome
として使えるので、期待した動作になるが、今回はコード量を少なくしたかったので使用しなかった。
構築
下記リポジトリを使用する。
https://github.com/katsuobushiFPGA/html-to-pdf-php-example
git clone https://github.com/katsuobushiFPGA/html-to-pdf-php-example.git
その後、構築を行う。
docker compose up -d
動作確認
docker
が立ち上がったら、http://localhost:8000にアクセスする。
index.php
では、PDFをページに埋め込む形にしているので下記の表示となる。
コミットしたコードでは、 ニコニコ動画のページが表示されるが、今回はYahooの天気情報にした。
参考
- trouble shooting
https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md https://deno.land/x/puppeteer_plus@0.12.0/vendor/puppeteer/docs/troubleshooting.md?source= - Docker image
https://hub.docker.com/_/php - wkhtmltopdfの次どうするか問題
https://blog.willnet.in/entry/2023/02/10/233053 - 文書配付機能でPDFレンダリングのライブラリを置き換えた話 - SmartHR Tech Blog
https://tech.smarthr.jp/entry/2023/07/03/170509
おわりに
wkhtmltopdf
の代替を探していた中で上記のライブラリに出会ったので、PDFの完成度に感動した。Headless Chrome
でPDFを生成するのがベストなのかな〜。
PDF系のライブラリは難しいな。