在 Laravel 中產生 PDF 文檔

WBOY
發布: 2024-07-17 13:09:06
原創
949 人瀏覽過

Generating PDF documents in Laravel

Laravel 和 DomPDF:使用圖片和 CSS 產生 PDF 文件的逐步指南

建立 PDF 文件是 Web 應用程式中的常見要求,尤其是產生發票、收據、證書、票據和各種報告。在這個綜合教學中,我們將深入研究如何使用 Laravel 和 DomPDF 產生帶有圖像和 CSS 的 PDF 文件。我們將介紹配置選項、設計注意事項、輸出大小、效能和資料庫查詢。此外,我們還將討論處理分頁符號、使用 Base64 載入圖片等的提示和技巧。

先決條件

在我們開始之前,請確保您已安裝以下軟體:

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

介紹

DomPDF 是一個受歡迎的 PHP 程式庫,可讓您從 HTML 內容產生 PDF 文件。它支援 CSS 樣式、圖像和各種配置選項。透過將 DomPDF 與 Laravel 集成,您可以使用 Blade 模板和 Laravel 的強大功能輕鬆建立複雜的 PDF 文件。

其他受歡迎的 PDF 庫包括 TCPDF、FPDF 和 Snappy。

然而,DomPDF 由於其易於整合和強大的功能集而被廣泛使用。

在本教學中,我們將逐步介紹設定 Laravel 專案、配置 DomPDF、建立處理 PDF 產生的控制器、為 PDF 內容設計 Blade 範本、新增路由和最佳化效能的過程。我們還將討論高級配置選項,並提供產生高品質 PDF 文件的提示和技巧。

假設

本教學假設您對 Laravel 和 PHP 有基本的了解。如果您是 Laravel 新手,請考慮閱讀官方 Laravel 文件來熟悉框架。否則,您可以按照 Laravel Bootcamp 開始使用 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',
登入後複製

第三步:建立控制器

建立一個控制器來處理 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!