Skip to main content

How to Generate PDF Documents File Laravel 5.x

สวัสดีครับ ในบทความวันนี้ เราจะมาแนะนำการ สร้างเอกสาร 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://medium.com/@Supperpin/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87-pdf-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-laravel-dompdf-%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B9%80%E0%B8%9E%E0%B8%B4%E0%B9%88%E0%B8%A1-font-%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%84%E0%B8%97%E0%B8%A2-2a34252421c8

https://www.ishare.in.th/articles/%E0%B8%A7%E0%B8%B4%E0%B8%98%E0%B8%B5%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%84%E0%B8%97%E0%B8%A2%E0%B8%9A%E0%B8%99-laravel-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-laravel-dompdf-%E0%B9%82%E0%B8%94%E0%B8%A2%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%9E%E0%B8%B4%E0%B9%88%E0%B8%A1-font-%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%84%E0%B8%97%E0%B8%A2%E0%B8%A5%E0%B8%87%E0%B9%84%E0%B8%9B

https://www.f0nt.com/release/th-sarabun-new/

 

 


Deprecated: Function create_function() is deprecated in /home/service1/domains/monkeywebstudio.com/public_html/wp-content/plugins/simple-lightbox/controller.php on line 1642