2018.11.21
Laravel-SnappyでPDF作成(&メール添付)

こんにちは。
今回はLaravel-Snappyを用いてのPDF作成、
そこからのメール添付の方法をまとめて記載したいと思います。
大枠は後述の記事を参考にさせていただきました。
laravel-snappy
github
https://github.com/barryvdh/laravel-snappy
何ができるか
- CSSがインラインではなく、CSSファイルとして定義できる
- JSファイルも同様に可能
- HTML出力、ダウンロード出力、保存、バイナリ出力等一通り手軽にサポート
導入
https://qiita.com/ats05/items/cbb2956727cad2681d1d
https://qiita.com/qwe001/items/7eb3e338fc48325be08d
を参考に導入
【変更箇所まとめ】
composer.json追加分
"require": {
・・・・
"h4cc/wkhtmltopdf-i386": "0.12.x",
"h4cc/wkhtmltoimage-i386": "0.12.x",
"barryvdh/laravel-snappy": "^0.4.1",
"h4cc/wkhtmltopdf-amd64": "^0.12.4",
"h4cc/wkhtmltoimage-amd64": "^0.12.4"
},
app.php追加分
'providers' => [
・・・
Barryvdh\Snappy\ServiceProvider::class,
],
'aliases' => [
・・・
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
],
snappy.php
<?php
return array(
'pdf' => array(
'enabled' => true,
'binary' => base_path('vendor/bin/wkhtmltopdf-amd64'), //これを追加
'timeout' => false,
'options' => array(),
'env' => array(),
),
'image' => array(
'enabled' => true,
'binary' => base_path('vendor/bin/wkhtmltoimage-amd64'), //追加
'timeout' => false,
'options' => array(),
'env' => array(),
),
);
呼び出し
一通りいれ終わったらいざ実装!
TestSendPdf.php
//template内で使うパラメータ
$params = ・・・;
//PDF作成
$pdf = \PDF::loadView('file.pdf_test', ['params' => $params])
->setOption('encoding', 'utf-8') //文字コード
->setOption('user-style-sheet', public_path() . '/pdf/pdf_test.css'); //スタイルシート
//ブラウザで表示
return $pdf->inline('filename.pdf');
//ダウンロード
return $pdf->download('filename.pdf');
//保存(上書き)
$pdf->save('filename.pdf', true);
//バイナリ出力
$pdfBinary = $pdf->output();
メールに添付
今回はメール添付送信するのがゴールの為、メールを作成します。
細かいメールの設定等は割愛して、PDFを添付する部分のみ記載します。
TestSendPdfMail.php
$mailer->send($this->view, $this->data, function ($message) use ($config) {
$message->subject($config['subject'])
->from($config['from'])
->to($config['to'])
->cc($config['cc'])
->attach($config['file_name']) //ファイルパスを指定する場合
->attachData($config['file_data']); //$pdf->output()で出したバイナリを指定する場合
});
複数のファイルを添付する際は、attach・attachDataを複数回呼べば可能です。
以上で、Laravel-Snappyを用いたPDFの作成から、メールへの添付までの手順となります。