Laravel」カテゴリーアーカイブ

Laravel Snappy でヘッダに日本語が使用できない件

Laravel で PDF 生成に便利に使える Laravel Snappy だけど…。ヘッダ、フッタに日本語(マルチバイト文字)を使おうとすると該当部分が表示されないという問題が生じた。

普通ならこうする。

でもこれじゃあダメなんである。

ググってみると同じ問題に直面した海外ニキがいて、その投稿によるとheader-left ではなく header-html にしてHTMLを埋め込めばいいらしい。

viewname.header.blade.php の中身はこう。

重要なのはDOCTYPE、charset=utf-8の指定、margin0の指定であった。

Laravel Snappy を使ってPDFを生成してみる

wkhtmltopdf のPHPラッパー Snappy を Laravel に組み込んだ Laravel-Snappy を使ってみる。

インストール

公式の README に目を通しておくといい。

app/snappy.php を編集して、実パスへの位置を定義。
.env に定義があればそれを、無ければ Composer のデフォルト位置を指定。

追加ライブラリ入れる

The exit status code ‘127’ says something went wrong: stderr: “/var/www/html/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory

とか出た場合。メッセージの通り、ライブラリがない。
dockerイメージに libXrender が含まれないので、これを追加する。

/docker/Dockerfile の apt-get install な列に一行追加。

(autoremove の直前でいいと思う)

ついでに日本語フォント(IPAフォント─素晴らしいプロジェクトですよね)も入れておく。

使ってみよう

Hタグを入れると目次も自動で作ってくれる。スゴイ!

日本語が文字化けするんだが?

html 内の meta タグで utf8 を指定する。

PDF::loadFile(url)で外部サイトを読み込むとSSL絡みのエラーが出るんだが?

調べてみたところ、ライブラリの問題でバージョンアップするしか無さそう。しかしメンテナが手を離してしまってるみたいで、SSLのバージョンを落とすか(無意味)か、自力で wkhtmltopdf のバージョンを 0.12.5 以上に上げるしかないらしい。厳しい。