0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LaravelでTCPDFとFPDIを使用してPDFを作成する方法

Posted at

皆さん、こんばんは。

今日は「LaravelでTCPDFとFPDIを使用してPDFを作成する方法」についてご紹介します。

TCPDFはPDF生成ライブラリで、FPDIは既存のPDFを読み込んで編集するためのライブラリです。これらを組み合わせることで、強力なPDF操作が可能になります。

パッケージのインストール

まず、Composerを使用して必要なパッケージをインストールします。

composer require tecnickcom/tcpdf
composer require setasign/fpdi

setasign/fpdi はFPDIの公式パッケージです。TCPDFとの互換性を確保するため、追加で setasign/fpdi-tcpdf をインストールすることも推奨されます。

composer require setasign/fpdi-tcpdf

ライブラリの設定

LaravelでTCPDFとFPDIを使用するために、サービスプロバイダやファサードを設定する必要はありません。直接クラスをインポートして使用できます。

PDFの作成方法

TCPDFとFPDIを使用して新しいPDFを作成し、既存のPDFにページを追加する基本的な例です。

コントローラにコードを追加

app/Http/Controllers/PdfController.php を以下のように編集します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use setasign\Fpdi\TcpdfFpdi;

class PdfController extends Controller
{
    public function createPdf()
    {
        // FPDIのインスタンスを作成(TCPDFをベースに)
        $pdf = new TcpdfFpdi();

        // ドキュメント情報を設定
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor('あなたの名前');
        $pdf->SetTitle('サンプルPDF');
        $pdf->SetSubject('TCPDFとFPDIの統合');

        // デフォルトのヘッダーとフッターを設定
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);

        // フォントの設定
        $pdf->SetFont('helvetica', '', 12);

        // 新しいページを追加
        $pdf->AddPage();

        // テキストを追加
        $pdf->Write(0, 'こんにちは、これはTCPDFとFPDIを使用したサンプルPDFです。');

        // 既存のPDFを読み込んでページを追加(オプション)
        // 例として、storage/app/public/sample.pdf を使用
        $existingPdfPath = storage_path('app/public/sample.pdf');
        if (file_exists($existingPdfPath)) {
            $pageCount = $pdf->setSourceFile($existingPdfPath);
            for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
                $tplId = $pdf->importPage($pageNo);
                $size = $pdf->getTemplateSize($tplId);

                // 新しいページを追加し、既存のページをテンプレートとして使用
                $pdf->AddPage($size['orientation'], [$size['width'], $size['height']]);
                $pdf->useTemplate($tplId);

                // 必要に応じて追加のコンテンツを挿入
                $pdf->SetFont('helvetica', '', 10);
                $pdf->SetXY(10, 10);
                $pdf->Write(0, "これはページ {$pageNo} の上に追加されたテキストです。");
            }
        }

        // PDFを出力(ブラウザで表示)
        return response($pdf->Output('sample.pdf', 'S'), 200)
                  ->header('Content-Type', 'application/pdf');
    }
}

既存のPDFを操作する場合は、storage/app/public/sample.pdf に対象のPDFファイルを配置してください。必要に応じて、ストレージへのアクセス権限を設定します。

画像の追加

Image関数で画像も追加できます。

$pdf->Image('@'.$fileContent, $x, $y, '', '');

ルートの設定

routes/web.php にルートを追加します。

use App\Http\Controllers\PdfController;

Route::get('/create-pdf', [PdfController::class, 'createPdf']);

注意点

  • フォントの設定: TCPDFは多くのフォントをサポートしていますが、日本語フォントを使用する場合は、フォントファイルを適切に設定する必要があります。例えば、mplus-1p-regular.ttf などの日本語フォントをTCPDFに読み込ませてください。
  • エラーハンドリング: 実際のアプリケーションでは、ファイルの存在確認や読み込み時のエラーハンドリングを適切に行うことが重要です。
  • パフォーマンス: 大きなPDFファイルや多くのページを扱う場合、メモリ使用量や処理時間に注意してください。必要に応じて、サーバーの設定を調整することを検討してください。

ぜひ参考にしてみてください。

今日は以上です。

ありがとうございました。
よろしくお願いいたします。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?