Mencipta dokumen PDF ialah keperluan biasa dalam aplikasi web, terutamanya untuk menjana invois, resit, sijil, tiket dan pelbagai laporan. Dalam tutorial komprehensif ini, kami akan mendalami penggunaan Laravel dan DomPDF untuk menjana dokumen PDF dengan imej dan CSS. Kami akan merangkumi pilihan konfigurasi, pertimbangan reka bentuk, saiz output, prestasi dan pertanyaan pangkalan data. Selain itu, kami akan membincangkan petua dan kiat untuk mengendalikan pemisah halaman, memuatkan imej menggunakan base64 dan banyak lagi.
Sebelum kami mula, pastikan anda telah memasang yang berikut:
DomPDF ialah perpustakaan PHP popular yang membolehkan anda menjana dokumen PDF daripada kandungan HTML. Ia menyokong gaya CSS, imej, dan pelbagai pilihan konfigurasi. Dengan menyepadukan DomPDF dengan Laravel, anda boleh membuat dokumen PDF yang canggih dengan mudah menggunakan templat Blade dan ciri hebat Laravel.
Perpustakaan PDF popular lain termasuk TCPDF, FPDF dan Snappy.
Walau bagaimanapun, DomPDF digunakan secara meluas kerana kemudahan penyepaduan dan set ciri yang mantap.
Dalam tutorial ini, kami akan melalui proses menyediakan projek Laravel, mengkonfigurasi DomPDF, mencipta pengawal untuk mengendalikan penjanaan PDF, mereka bentuk templat Blade untuk kandungan PDF, menambah laluan dan mengoptimumkan prestasi. Kami juga akan membincangkan pilihan konfigurasi lanjutan dan menyediakan petua dan kiat untuk menjana dokumen PDF berkualiti tinggi.
Tutorial ini menganggap anda mempunyai pemahaman asas tentang Laravel dan PHP. Jika anda baru menggunakan Laravel, pertimbangkan untuk menyemak dokumentasi Laravel rasmi untuk membiasakan diri anda dengan rangka kerja tersebut. Dari segi lain, anda boleh mengikuti Bootcamp Laravel untuk bermula dengan Laravel.
Mula-mula, buat projek Laravel baharu jika anda belum memilikinya, atau gunakan projek sedia ada, Sudah tentu, anda boleh melangkau langkah ini jika anda sudah mempunyai projek Laravel.
composer create-project --prefer-dist laravel/laravel pdf-tutorial cd pdf-tutorial
Seterusnya, pasang DomPDF:
composer require barryvdh/laravel-dompdf
Terbitkan fail konfigurasi:
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
Buka fail config/dompdf.php. Fail konfigurasi mengandungi pelbagai pilihan untuk menyesuaikan output PDF. Di sini anda boleh menetapkan pelbagai pilihan termasuk saiz kertas lalai, orientasi, fon dan banyak lagi.
'default_paper_size' => 'a4',
'orientation' => 'portrait',
'default_font' => 'serif',
Buat pengawal untuk mengendalikan penjanaan PDF:
php artisan make:controller PDFController
Dalam app/Http/Controllers/PDFController.php, tambahkan kod berikut:
<?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'); } }
Buat templat Blade untuk kandungan PDF:
touch resources/views/myPDF.blade.php
Tambah kandungan berikut pada 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>
Tambah laluan untuk mengendalikan penjanaan PDF dalam route/web.php:
use App\Http\Controllers\PDFController; Route::get('generate-pdf', [PDFController::class, 'generatePDF']);
Anda boleh menambah imej pada PDF dengan membenamkannya sebagai rentetan berkod base64 atau menggunakan URL.
Imej boleh dibenamkan terus dalam templat Blade menggunakan pengekodan base64. Sebagai contoh, untuk membenamkan imej daripada orang ramai/imej ini ialah cara anda boleh melakukannya:
<img src="data:image/png;base64,%7B%7B%20base64_encode(file_get_contents(public_path('images/logo.png')))%20%7D%7D" alt="Menjana dokumen PDF dalam Laravel">
Atau terus dari URL:
<img src="%7B%7B%20asset('images/logo.png')%20%7D%7D" alt="Menjana dokumen PDF dalam Laravel">
Apabila berurusan dengan set data yang besar (cth., 1,000+ rekod), gunakan penomboran atau chunking untuk mengurus penggunaan memori:
$data = DB::table('users')->paginate(50); $pdf = PDF::loadView('myPDF', ['data' => $data]);
Untuk mengurangkan saiz output, kurangkan penggunaan imej berat dan pilih grafik vektor apabila boleh. Juga, gunakan CSS yang cekap.
Pastikan kandungan disusun dengan baik untuk pemisah halaman. Gunakan CSS untuk mengendalikan pemisah halaman:
.page-break { page-break-after: always; }
Dan dalam templat Blade anda:
<div class="page-break"></div>
Untuk konfigurasi lanjutan, rujuk dokumentasi DomPDF. Anda boleh menyesuaikan hampir semua perkara, daripada jidar hingga cara fon dimuatkan.
Untuk menggunakan fon tersuai, pertama, tambahkannya pada projek anda dan konfigurasikan DomPDF untuk menggunakannya:
'custom_font_dir' => base_path('resources/fonts/'), 'custom_font_data' => [ 'custom-font' => [ 'R' => 'CustomFont-Regular.ttf', 'B' => 'CustomFont-Bold.ttf', ] ],
Dalam templat Blade anda:
<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!
Atas ialah kandungan terperinci Menjana dokumen PDF dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!