Generate PDF In Laravel 5

บางครั้งเราอาจต้องการแสดง Content ในรูปแบบของ PDF แทนที่จะแสดงผลหน้าเว็บทั่วไป ตัวอย่างนี้จะแนะนำการสร้าง PDF ผ่าน package ที่ชื่อว่า laravel-dompdf วิธีการใช้งานค่อนข้างง่าย มาดูกันว่าจะต้องมีขั้นตอนอะไรบ้าง

  1. ติดตั้ง package
composer require barryvdh/laravel-dompdf

2. จากนั้นเพิ่ม “Barryvdh\DomPDF\ServiceProvider” ใน “providers” array แก้ไขไฟล์ config/app.php ดังตัวอย่างโค้ดต่อไปนี้

'providers' => [
...
//Add this line of code
Barryvdh\DomPDF\ServiceProvider::class,
],

3. จากนั้นเพิ่ม “Barryvdh\DomPDF\Facade” ใน “aliases” array แก้ไขไฟล์ config/app.php ดังตัวอย่างโค้ดต่อไปนี้

'aliases' => [
....
//Add this line of code
'PDF' => Barryvdh\DomPDF\Facade::class,
],

4. routes/web.php ในกรณีไม่มี controller ก็เขียนประมาณนี้

Route::get('/example/pdf', 'ExampleController@pdf_index');

หรืออะไรแบบนี้ ก็ไม่ผิดกติกา

Route::get('/example/{id}/pdf', 'ExampleController@pdf_show');

5. ExampleController

ถ้ามี controller ก็เรียกใช้งาน controller ได้ตามปกติ อย่างลืม keyword “use PDF” เพื่อ import library

use PDF;
...

public function pdf_index() {
$data = [ ];
$pdf = PDF::loadView('test_pdf',$data);
return $pdf->stream('test.pdf'); //แบบนี้จะ stream มา preview

//return $pdf->download('test.pdf'); //แบบนี้จะดาวโหลดเลย
}

6. download font ภาษาไทย ยกตัวอย่างเช่น THSarabunNew ดาวโหลดได้ที่นี่

7. สร้างโฟลเดอร์ public/fonts แล้วนำฟอนด์ที่ดาวโหลดวางลงไป

8. สร้างโฟลเดอร์ storage/fonts เปล่าๆ (ถ้าขาด step นี้เวลารันจะ Error)

***หากมีการย้ายเครื่องอย่าลืมลบข้อมูลในโฟลเดอร์นี้ทิ้งด้วย***

8. หน้า test_pdf.blade.php ก็ใส่ font ด้วย css พร้อมข้อความที่ต้องการ

<style>
@font-face{
font-family: 'THSarabunNew';
font-style: normal;
font-weight: normal;
src: url("{{ asset('fonts/THSarabunNew.ttf') }}") format('truetype');
}
@font-face{
font-family: 'THSarabunNew';
font-style: normal;
font-weight: bold;
src: url("{{ asset('fonts/THSarabunNew Bold.ttf') }}") format('truetype');
}
@font-face{
font-family: 'THSarabunNew';
font-style: italic;
font-weight: normal;
src: url("{{ asset('fonts/THSarabunNew Italic.ttf') }}") format('truetype');
}
@font-face{
font-family: 'THSarabunNew';
font-style: italic;
font-weight: bold;
src: url("{{ asset('fonts/THSarabunNew BoldItalic.ttf') }}") format('truetype');
}
body{
font-family: "THSarabunNew";
font-size: 16px;
}
@page {
size: A4;
padding: 15px;
}
@media print {
html, body {
width: 210mm;
height: 297mm;
/*font-size : 16px;*/
}
}
</style><div>สวัสดีวันจันทร์</div>

Finally : (แบบ stream ขึ้น preview)

localhost/laravel_project/example/pdf

ข้อจำกัด

ckartisan

Build anythings

Chavalit Koweerawong

Written by

ckartisan

ckartisan

Build anythings

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade