สวัสดีครับ ในบทความวันนี้ เราจะมาแนะนำการ สร้างเอกสาร PDF ใน Laravel กันครับ สำหรับตัวอย่างจะใช้ Laravel 5.7 ครับ
ก่อนอื่น เรามาติดตั้ง DOMPDF Wrapper for Laravel 5 กันก่อนครับ
composer require barryvdh/laravel-dompdf
เมื่อติดตั้งเรียบร้อย เปิดไฟล์ config/app.php เพิ่ม Code ดังนี้
'providers' => [ .... Barryvdh\DomPDF\ServiceProvider::class,// Add Code ], 'aliases' => [ .... 'PDF' => Barryvdh\DomPDF\Facade::class,// Add Code ]
สร้าง PdfController ด้วยคำสั่ง
php artisan make:controller PdfController
จากนั้นไปที่ ไฟล์ app/Http/Controllers/PdfController.php เพิ่มเติม Code ดังนี้
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use PDF; class PdfController extends Controller { public function index(){ $data = [ 'title' => 'Inspirational Quotes', 'content' => 'แรงบันดาลใจเป็นส่วนสำคัญที่จะกระตุ้นให้เราเริ่มต้นลงมือทำ มุ่งไปยังเป้าหมายที่วางไว้ รักษาโมเมนตัม มีความสม่ำเสมอและอดทน แล้วเราจะพบความก้าวหน้าที่เร็วขึ้นแรงบันดาลใจที่จะกระตุ้นตัวเอง เราหาได้จากบุคคลที่ชื่นชม บุคคลที่ประสบความสำเร็จ คนที่มีประสบการณ์ชีวิตมากมาย เราได้รับแรงบันดาลใจจากคำพูดของคนเหล่านั้น คำพูดที่สร้างแรงบันดาลใจ ให้แง่คิด คำพูดที่เปี่ยมด้วยพลังที่ขับดันให้เราลงมือทำ ช่วยให้เราเกิดความชัดเจน ทำให้เรารู้ตัว เข้าใจอย่างชัดเจน ถึงเส้นทางที่เรากำลังเดินไป คำคม ข้อคิด เป็นบทเรียนชีวิตที่สื่อผ่านคำพูดสั้นๆ ของบุคคลที่ประสบความสำเร็จ ประโยชน์ของคำคมหรือข้อคิดดีๆ มันจะช่วยให้เรารู้ตัวอยู่เสมอ มันจะคอยสะกิดเรา ทำให้เรารู้ ว่าเราทำได้ สร้างแรงกระตุ้น จุดประกายให้เราตื่นในทุกๆ วัน ในแต่ละวันที่เราต้องเจอปัญหา ความคิดแง่ลบที่เกิดขึ้น มันจะทำให้อารมณ์ไม่ดี มันรบกวนจิตใจ และการใช้คำคมหรือข้อคิดเพื่อจุดประกาย มันจะเปลี่ยนอารมณ์ให้เป็นบวก ทำให้เราคิดบวกได้' ]; $pdf = PDF::loadView('pdf.pdf',$data); return $pdf->stream(); } }
สร้าง views สำหรับแสดงผล ไปที่ resource/views/pdf/pdf.blade.php
<!DOCTYPE html> <html lang="th" dir="ltr"><head> <title>PDF</title> <meta charset="utf-8"> </head> <body> <h2>{{$title}}</h2> <p>{{$content}}</p> </body> </html>
ไปที่ไฟล์ routes/web.php เพิ่ม Code สำหรับการเรียก Controller ดังนี้
Route::get('pdf','PdfController@index');
ทดสอบการทำงานไปที่ http://localhost/laravel/public/pdf
จะเห็นว่า laravel สามารถแสดง เอกสารในรูปแบบ PDF ได้ แต่ติดปัญหาอีกอย่างคือ ในส่วนของภาษาไทยไม่สามารถแสดงผลได้ ต่อไปเราจะมาเพิ่ม fonts ในเอกสาร PDF เพื่อให้รองรับการแสดงผลภาษาไทยกันครับ
การติดตั้ง Fonts ภาษาไทยลงใน DOMPDF
ก่อนอื่นเราต้องมี fonts ภาษาไทย กันก่อนครับ ใครยังไม่มีไป Download ได้ที่
https://www.f0nt.com/release/th-sarabun-new/
จากนั้นนำไฟล์ที่ได้ไปไว้ใน public/fonts ตามภาพ
สร้าง Folder fonts ไว้ใน storage/fonts (สำหรับ Cache Fonts เก็บไว้เวลาเรียกหน้าเว็บครั้งต่อไปจะได้เร็วขึ้น)
แก้ไขไฟล์ resource/views/pdf/pdf.blade.php เพิ่มส่วนของการเรียกใช้ Font ดังนี้
<!DOCTYPE html> <html lang="th" dir="ltr"><head> <title>PDF</title> <meta charset="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <style> @font-face { font-family: 'THSarabunNew'; font-style: normal; font-weight: normal; src: url("{{ public_path('fonts/THSarabunNew.ttf') }}") format('truetype'); } @font-face { font-family: 'THSarabunNew'; font-style: normal; font-weight: bold; src: url("{{ public_path('fonts/THSarabunNew Bold.ttf') }}") format('truetype'); } @font-face { font-family: 'THSarabunNew'; font-style: italic; font-weight: normal; src: url("{{ public_path('fonts/THSarabunNew Italic.ttf') }}") format('truetype'); } @font-face { font-family: 'THSarabunNew'; font-style: italic; font-weight: bold; src: url("{{ public_path('fonts/THSarabunNew BoldItalic.ttf') }}") format('truetype'); } body { font-family: "THSarabunNew"; } </style> </head> <body> <h2>{{$title}}</h2> <p>{{$content}}</p> </body> </html>
จากนั้นทดสอบอีกครั้ง หากไม่มีอะไรผิดพลาด laravel จะแสดงข้อมูลใน PDF เป็นภาษาไทยดังภาพ
อ้างอิง : ขอขอบคุณข้อมูลจาก
https://itsolutionstuff.com/post/laravel-57-generate-pdf-from-html-exampleexample.html
https://www.f0nt.com/release/th-sarabun-new/