皆さん、こんばんは。
今日は「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ファイルや多くのページを扱う場合、メモリ使用量や処理時間に注意してください。必要に応じて、サーバーの設定を調整することを検討してください。
ぜひ参考にしてみてください。
今日は以上です。
ありがとうございました。
よろしくお願いいたします。