概要
Laravelでpdfを扱うケースがあったので、Laravel-mpdfを導入した。
その時の手順を記載する。
dompdfとSnappyも検討したが、以下の理由により断念。
- dompdfは使えないcssが多すぎる。
- Snappyは必要なパッケージが多すぎてインストールが難しい。
docker環境のLaravelでSnappyを利用しようと考えましたが、パッケージが足りてなくて利用できなかった…。
本番環境でもパッケージのインストールが必要になると考えると、自分の知識では難しいと判断。
laravel-mpdfのインストール
composer require carlos-meneses/laravel-mpdf
プロバイダーとファサードの追加
config/app.php
に以下のprovidersとaliasesに以下を追加する。
'providers' => [
// ...
Meneses\LaravelMpdf\LaravelMpdfServiceProvider::class
]
'aliases' => [
// ...
'PDF' => Meneses\LaravelMpdf\Facades\LaravelMpdf::class
]
config
config/pdf.php
を作成して以下を記載する。
return [
'mode' => '',
'format' => 'A4',
'default_font_size' => '12',
'default_font' => 'sans-serif',
'margin_left' => 10,
'margin_right' => 10,
'margin_top' => 10,
'margin_bottom' => 10,
'margin_header' => 0,
'margin_footer' => 0,
'orientation' => 'P',
'title' => 'Laravel mPDF',
'author' => '',
'watermark' => '',
'show_watermark' => false,
'watermark_font' => 'sans-serif',
'display_mode' => 'fullpage',
'watermark_text_alpha' => 0.1,
'custom_font_dir' => '',
'custom_font_data' => [],
'auto_language_detection' => false,
'temp_dir' => rtrim(sys_get_temp_dir(), DIRECTORY_SEPARATOR),
'pdfa' => false,
'pdfaauto' => false,
];
フォント
今のままでは日本語を扱えないのでフォントを追加して、読み込むようにする。
以下のリンクからIPAフォントをダウンロードする。
ダウンロードしたフォントをresources/fonts/ipag.ttf
に配置する。
config.php
のreturn文に以下を追加する。
'custom_font_dir' => base_path('resources/fonts/'),
'custom_font_data' => [
'ipafont' => [
'R' => 'ipag.ttf',
]
]
cssに以下を追加する。
※追加しなくても日本語表示できたので、自動判別されている?
body {
font-family: 'ipafont', sans-serif;
}
サンプル
ビューは、resources/views/pdfs/test.blade.php
が配置されているとする。
<?php
namespace App\Http\Controllers;
use PDF;
use Illuminate\Http\Request;
class PdfsController extends Controller
{
public function test (Request $req)
{
$data = [
'name' => $req->name,
'age' => $req->age,
];
$pdf = PDF::loadView('pdfs.test', $data);
// 表示させる場合
// return $pdf->stream('document.pdf');
// ダウンロードさせる場合
return $pdf->download('test.pdf');
}
}