ホームページ >バックエンド開発 >PHPチュートリアル >LaravelでPDFドキュメントを生成する

LaravelでPDFドキュメントを生成する

WBOY
WBOYオリジナル
2024-07-17 13:09:06990ブラウズ

Generating PDF documents in Laravel

Laravel と DomPDF: 画像と CSS を含む PDF ドキュメントを生成するためのステップバイステップガイド

PDF ドキュメントの作成は、Web アプリケーション、特に請求書、領収書、証明書、チケット、およびさまざまなレポートを生成する場合の一般的な要件です。この包括的なチュートリアルでは、Laravel と DomPDF を使用して画像と CSS を含む PDF ドキュメントを生成する方法について詳しく説明します。構成オプション、設計上の考慮事項、出力サイズ、パフォーマンス、データベース クエリについて説明します。さらに、改ページの処理、base64 を使用した画像の読み込みなどに関するヒントやコツについても説明します。

前提条件

始める前に、以下がインストールされていることを確認してください:

  • PHP >=8.2
  • 作曲家 2+
  • Laravel 10+

導入

DomPDF は、HTML コンテンツから PDF ドキュメントを生成できる人気の PHP ライブラリです。 CSS スタイル、画像、さまざまな構成オプションをサポートしています。 DomPDF を Laravel と統合することで、Blade テンプレートと Laravel の強力な機能を使用して、洗練された PDF ドキュメントを簡単に作成できます。

その他の一般的な PDF ライブラリには、TCPDF、FPDF、Snappy などがあります。

ただし、DomPDF は、統合の容易さと堅牢な機能セットにより広く使用されています。

このチュートリアルでは、Laravel プロジェクトのセットアップ、DomPDF の構成、PDF 生成を処理するコントローラーの作成、PDF コンテンツ用の Blade テンプレートの設計、ルートの追加、パフォーマンスの最適化のプロセスを順を追って説明します。また、高度な構成オプションについて説明し、高品質の PDF ドキュメントを生成するためのヒントやコツも紹介します。

仮定

このチュートリアルは、Laravel と PHP の基本を理解していることを前提としています。 Laravel を初めて使用する場合は、Laravel の公式ドキュメントを読んでフレームワークに慣れることを検討してください。それ以外の場合は、Laravel ブートキャンプに従って Laravel を使い始めることができます。

ステップ 1: Laravel プロジェクトのセットアップ

まず、Laravel プロジェクトがまだない場合は新しい Laravel プロジェクトを作成するか、既存のプロジェクトを使用します。もちろん、Laravel プロジェクトがすでにある場合はこの手順をスキップできます。

composer create-project --prefer-dist laravel/laravel pdf-tutorial
cd pdf-tutorial

次に、DomPDF をインストールします。

composer require barryvdh/laravel-dompdf

設定ファイルを公開します:

php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"

ステップ 2: DomPDF の構成

config/dompdf.php ファイルを開きます。構成ファイルには、PDF 出力をカスタマイズするためのさまざまなオプションが含まれています。ここでは、デフォルトの用紙サイズ、向き、フォントなどのさまざまなオプションを設定できます。

  • 用紙サイズ: デフォルトの用紙サイズを設定できます。
  'default_paper_size' => 'a4',
  • 方向: デフォルトの方向 (縦または横) を設定します。
  'orientation' => 'portrait',
  • フォント: デフォルトのフォントを指定したり、カスタム フォントを追加したりできます。
  'default_font' => 'serif',

ステップ 3: コントローラーの作成

PDF 生成を処理するコントローラーを作成します:

php artisan make:controller PDFController

app/Http/Controllers/PDFController.php に次のコードを追加します:

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use PDF;

class PDFController extends Controller
{
    public function generatePDF()
    {
        $data = [
            'title' => 'Laravel PDF Example',
            'date' => date('m/d/Y'),
        ];

        $pdf = PDF::loadView('myPDF', $data);

        return $pdf->download('document.pdf');
    }
}

ステップ 4: ブレード テンプレートの作成

PDF コンテンツの Blade テンプレートを作成します:

touch resources/views/myPDF.blade.php

次のコンテンツを myPDF.blade.php に追加します:



    <title>Laravel PDF Example</title>
    <style>
        body {
            font-family: 'Arial, sans-serif';
        }
        .container {
            margin: 0 auto;
            padding: 20px;
        }
        .header {
            text-align: center;
            margin-bottom: 20px;
        }
        .content {
            font-size: 12px;
        }
    </style>


    <div class="container">
        <div class="header">
            <h1>{{ $title }}</h1>
            <p>Date: {{ $date }}</p>
        </div>
        <div class="content">
            <p>This is an example of a PDF document generated using Laravel and DomPDF.</p>
        </div>
    </div>


ステップ 5: ルートの追加

Routes/web.php で PDF 生成を処理するルートを追加します:

use App\Http\Controllers\PDFController;

Route::get('generate-pdf', [PDFController::class, 'generatePDF']);

ステップ 6: 画像を追加する

画像を Base64 でエンコードされた文字列として埋め込むか、URL を使用して PDF に追加できます。

画像は、base64 エンコードを使用して Blade テンプレートに直接埋め込むことができます。たとえば、public/images から画像を埋め込むには、次の方法で実行できます:

<img src="data:image/png;base64,%7B%7B%20base64_encode(file_get_contents(public_path('images/logo.png')))%20%7D%7D" alt="LaravelでPDFドキュメントを生成する">

または URL から直接:

<img src="%7B%7B%20asset('images/logo.png')%20%7D%7D" alt="LaravelでPDFドキュメントを生成する">

ステップ 7: パフォーマンスの最適化

データベースクエリ

大規模なデータセット (1,000 以上のレコードなど) を扱う場合は、ページネーションまたはチャンクを使用してメモリ使用量を管理します。

$data = DB::table('users')->paginate(50);

$pdf = PDF::loadView('myPDF', ['data' => $data]);

出力サイズ

出力サイズを小さくするには、重い画像の使用を最小限に抑え、可能な場合はベクター グラフィックスを選択します。また、効率的な CSS を使用してください。

改ページ

コンテンツが改ページのために適切に構造化されていることを確認します。 CSS を使用して改ページを処理します:

.page-break {
    page-break-after: always;
}

Blade テンプレート内:

<div class="page-break"></div>

ステップ 8: 高度な構成

より高度な構成については、DomPDF ドキュメントを参照してください。余白からフォントの読み込み方法まで、ほぼすべてをカスタマイズできます。

カスタムフォントの使用

カスタム フォントを使用するには、まずカスタム フォントをプロジェクトに追加し、それらを使用するように DomPDF を設定します。

'custom_font_dir' => base_path('resources/fonts/'),
'custom_font_data' => [
    'custom-font' => [
        'R' => 'CustomFont-Regular.ttf',
        'B' => 'CustomFont-Bold.ttf',
    ]
],

Blade テンプレート内:

<style>
    body {
        font-family: 'custom-font', sans-serif;
    }
</style>

Conclusion

By following this step-by-step guide, you can generate sophisticated PDF documents using Laravel and DomPDF, complete with images and CSS styling. This tutorial has covered essential configuration options, design considerations, performance optimization. You can expand this foundation to build a robust document generation system for your Laravel application.

Potential Series and Repository

This tutorial is part of a series on PDF generation with Laravel. A complete repository with various document templates (invoices, receipts, certificates, tickets, etc.) can be found here. Feel free to contribute and expand the collection.

Happy coding!

以上がLaravelでPDFドキュメントを生成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。