建立 PDF 文件是 Web 應用程式中的常見要求,尤其是產生發票、收據、證書、票據和各種報告。在這個綜合教學中,我們將深入研究如何使用 Laravel 和 DomPDF 產生帶有圖像和 CSS 的 PDF 文件。我們將介紹配置選項、設計注意事項、輸出大小、效能和資料庫查詢。此外,我們還將討論處理分頁符號、使用 Base64 載入圖片等的提示和技巧。
在我們開始之前,請確保您已安裝以下軟體:
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。
首先,如果您還沒有 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"
開啟 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'); } }
為 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>
在routes/web.php中加入處理PDF產生的路由:
use App\Http\Controllers\PDFController; Route::get('generate-pdf', [PDFController::class, 'generatePDF']);
您可以透過將圖像嵌入為 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 文檔">
處理大型資料集(例如 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>
更進階的配置,請參考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>
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.
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中文網其他相關文章!