果たして私は手順を簡潔に説明できるのか.....
That is the question.
【LaravelでViewからExcelを作りPDFでエクスポートする方法】
★手順1ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
composer.jsonに以下の2行を追加して、composer update を実行します。
PHPExcelライブラリが入っていない人は、それも追加しないとダメだと思います。
"maatwebsite/excel": "1.*",
"tecnick.com/tcpdf": "~6.0.0"
★手順2ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
IPAフォントダウンロードページよりIPAゴシックというフォントをダウンロードし
ipag.ttfをvendor/tecnick.com/tcpdf/toolsのフォルダの中に入れます。
★手順3ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ターミナルでフォントを入れた階層へ移動します。
$ cd vendor/tecnick.com/tcpdf/tools
同じフォルダの中にconvert_fonts_examples.txtというマニュアルが入っているので、そちらを参考にして以下の例のようなコマンドを入力します。
※フォントを同じ階層に入れてから実行してください。
$ php ./tcpdf_addfont.php -b -t TrueTypeUnicode -f 32 -i ./ipag.ttf
★手順4ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Laravel ExcelのPDFドライバをtcPDFに変更します。
vendor/maatwebsite/excel/src/config/export.php の157行目です。
★手順5ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
views/test/にpdf_view.blade.phpを作成しViewにmetaタグを挿入します。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
★手順6ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Controllerに以下のようなコードを書きます。
例)views/test/pdf_view.blade.phpのViewをPDFに出力したい場合
$data = [
'sampleModelObject' => $sampleModelObject
];
Excel::create('sample', function($excel) use($data) {
$excel->sheet('sample', function($sheet) use($data) {
$sheet->setFontFamily('ipag');
// PDFを横にしたい場合
$sheet->setOrientation('landscape');
$sheet->loadView('test.pdf_view', $data);
});
})->export('pdf');
これでViewをExcelにしてPDFで出力できます。
最後の行を以下のようにすると、Excelファイルを保存しつつ、PDFをダウンロードさせるということができます。
})->store('xls')->export('pdf');
保存する場所はvendor/maatwebsite/excel/src/config/export.phpの130行目にあるstoreの箇所で指定します。
ということで、手順をまとめてみました!
今回はtcpdfを使っていますが、結局、dompdfでも無事にPDF出力できましたのでどちらでもよいのですが、barryvdh/laravel-dompdfを使いたい場合はdompdfで日本語フォントをインストールしてください!
その場合のコードサンプルはこちらです。
$data = [
'sampleModelObject' => $sampleModelObject
];
$pdf = PDF::loadView('test.pdf_view', $data);
return $pdf->download('sample.pdf');
barryvdh/laravel-dompdfの場合はapp/config/app.phpの
providers に 'Barryvdh\DomPDF\ServiceProvider', を追記し
aliases に 'PDF' => 'Barryvdh\DomPDF\Facade', を追記するのをお忘れなく。
ではでは、長々とお付き合いくださりありがとうございましたm(_ _)m