LaravelでPDFを作成する

既存の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のテンプレートに含まれている文字列になります。)

to-create-a-pdf-with-laravel01

 

【参考サイト】

 

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2025年3月
 1
2345678
9101112131415
16171819202122
23242526272829
3031