既存のPDFをテンプレートとして、Laravelで文字列を追加して出力してみます。
サンプルコード
composer.jsonにTCPDFとFPDIを追加します。
composer.json
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 変更前 "require" : { "php" : ">=5.5.9" , "laravel/framework" : "5.2.*" }, // 変更後 "require" : { "php" : ">=5.5.9" , "laravel/framework" : "5.2.*" , "tecnickcom/tcpdf" : "6.2.*" , "setasign/fpdi-tcpdf" : "1.6.1" }, |
tecnick.com/tcpdfは破棄されているようなので、tecnickcom/tcpdfを使うようにしてください。
setasign/fpdiは今回TCPDFを使用するので、setasign/fpdi-tcpdfとしています。
コマンドプロンプトで作業ディレクトリまで移動して、下記コマンドを実行します。
1 | composer update |
app\Http\routes.php
1 | Route::get( '/pdf' , 'PdfController@getIndex' ); |
app\Http\Controllers\PdfController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php namespace App\Http\Controllers; use FPDI; class PdfController extends Controller { public function getIndex() { $receipt = new FPDI(); // PDFの余白(上左右)を設定 $receipt ->SetMargins(0, 0, 0); // ヘッダー・フッターの出力を無効化 $receipt ->setPrintHeader(false); $receipt ->setPrintFooter(false); // ページを追加 $receipt ->AddPage(); // テンプレートを読み込み $receipt ->setSourceFile(public_path() . '/data/base.pdf' ); // 読み込んだPDFの1ページ目のインデックスを取得 $tplIdx = $receipt ->importPage(1); // 読み込んだPDFの1ページ目をテンプレートとして使用 $receipt ->useTemplate( $tplIdx , null, null, null, null, true); // 書き込む文字列のフォントを指定 $receipt ->SetFont( '' , '' , 20); // 書き込む位置 $receipt ->SetXY(13, 30); // 文字列を書き込む $receipt ->Write(0, 'add string test!!' ); // PDFを出力 $receipt ->Output( 'sample.pdf' , 'I' ); } } |
ベースになるPDFは、 \public\data\base.pdf に格納しています。
/pdfにアクセスすると、以下のように表示されました。
(This is an sample PDF printed with pdfMake.という文字列はPDFのテンプレートに含まれている文字列になります。)
【参考サイト】
- PHP – [PHP] ララベルでTCPDFを使うには?(6870)|teratail
- Laravel5.1でbladeテンプレートを用いてPDFを作る – Qiita
- PHPでPDF帳票を出力する方法(TCPDF + FPDI) – Qiita
- [PHP]既存テンプレート用PDFに書き込みをする。TCPDF + FPDI PHP| システム開発ブログ(システム開発のアイロベックス|東京都新宿区の業務システム開発会社)
コメントが承認されるまで時間がかかります。