はじめに
Laravelではdompdfライブラリを使って、簡単にPDFの出力ができます。
今回はLaravelでPDF出力時に、日本語が文字化けした時の対策を簡略にまとめてみました。
実装
Controller
$pdf = PDF::loadView(
// bladeファイル名
'pdf',
// PDFの中身
['title' => 'こんにちは', 'content' => '内容が入ります']
);
// A4サイズ、横向き
$pdf->setPaper('A4', 'landscape');
// PDFファイルをダウンロード
return $pdf->download('download.pdf');
View
<x-pdf-layout>
@section('css')
<style type="text/css">
body {
page-break-inside: avoid;
text-align: center;
font-size: 3rem;
}
</style>
@endsection
<x-slot name="header">title: {{ $title }}</x-slot>
<div>
content: {{ $content }}
</div>
</x-pdf-layout>
PHP Dockerfile
install Font
migmixを使用
https://mix-mplus-ipa.osdn.jp/migmix/
RUN cd /tmp && \
wget --trust-server-names 'https://osdn.net/projects/mix-mplus-ipa/downloads/72510/migmix-1p-20200307.zip' && \
unzip migmix-1p-20200307.zip && \
mkdir -p /var/www/app/public/fonts && \
cp /tmp/migmix-1p-20200307/*.ttf \
/var/www/app/public/fonts/ && \
chmod 777 /var/www/app/public/fonts
View
<x-pdf-layout>
@section('css')
<style type="text/css">
/* 追加 */
@font-face{
font-family: migmix;
font-style: normal;
font-weight: normal;
src: url("fonts/migmix-1p-regular.ttf") format('truetype');
}
body {
/* 追加 */
font-family: migmix;
page-break-inside: avoid;
text-align: center;
font-size: 3rem;
}
</style>
@endsection
<x-slot name="header">title: {{ $title }}</x-slot>
<div>
content: {{ $content }}
</div>
</x-pdf-layout>
さいごに
dompdfのバージョン次第、サポートしないフォントフォーマットもあるので、ご注意ください。
それが原因でフォント変更の時にだいぶ時間使いました
参考