12/08/2018, 00:12

[CakePHP] Sử dụng thư viện mPDF

Trong công việc của một developer, tôi nghĩ có khả năng bạn đã từng gặp dự án nào đó mà khách hàng yêu cầu trang web của họ có một hoặc nhiều chỗ có chức năng xuất file excel, csv, pdf ... để phục vụ cho mục đích nghiệp vụ của họ. Hoặc cũng có thể trong tương lai bạn sẽ gặp những dự án có chức năng ...

Trong công việc của một developer, tôi nghĩ có khả năng bạn đã từng gặp dự án nào đó mà khách hàng yêu cầu trang web của họ có một hoặc nhiều chỗ có chức năng xuất file excel, csv, pdf ... để phục vụ cho mục đích nghiệp vụ của họ. Hoặc cũng có thể trong tương lai bạn sẽ gặp những dự án có chức năng dạng như vậy. Tôi chưa từng làm qua dự án nào như thế nên cũng muốn tìm hiểu để có thêm kiến thức, đồng thời cũng coi như là sự chuẩn bị cho các dự án tương lai. Trước hết, do đã có tìm hiểu được một chút về thư viện mPDF hỗ trợ khá nhiều cho việc kết xuất file PDF với PHP, mà cụ thể trong bài này và các bài sau tôi sẽ dùng CakePHP để chia sẻ những kiến thức tôi tìm hiểu được. về mPDF.

Giới thiệu mPDF

mPDF là một thư viện có khả năng kết xuất ra file dưới định dạng PDF từ HTML được encode UTF-8. Nó được xây dựng và phát triển thêm dựa trên FPDF và HTML2FPDF.

Với rất nhiều chức năng (Watermark, barcode, CSS, Protection, Tables, Page headers & footers ...), tôi nghĩ mPDF là một thư viện tuyệt vời nếu bạn đi tìm những chức năng hỗ trợ đến từng chi tiết trong việc kết xuất PDF. mPDF hỗ trợ rất nhiều ngôn ngữ khác nhau (bao gồm cả tiếng Trung, Hàn, Nhật hay Ả Rập).

Tất nhiên, để sử dụng được thư viện này bạn cần biết nó có những yêu cầu cần thiết nào. Hiện tại mPDF đang có phiên bản mới nhất là 5.7.4 nhưng trong loạt bài với CakePHP 2.x thì bản tôi dùng sẽ là 5.7.3. Với mPDF từ bản 5 trở lên, bạn hãy lưu ý :

  • PHP tối thiểu là 4.3.10 và 5.0.3
  • Từ bản 5.7.1 thì tối thiểu bạn phải dùng PHP 5.5
  • Hãy enable gói mb_string, tuy nhiên mPDF ko tương thích với mbstring.func_overload.
  • Bạn cần thư viện zlib (dùng trong việc nén) nếu dùng FPDF

Tích hợp mPDF với CakePHP 2.x

Tác giả Segy trong link github dưới đây đã viết sẵn một component cho CakePHP 2.x để tích hợp mPDF nên tôi sẽ dùng component này để gọi và sử dụng mPDF trong các bài viết của mình.

https://github.com/segy/Mpdf

Việc tích hợp rất đơn giản, bạn hãy clone hoặc download theo link trên và đưa vào các thư mục có trong đó theo đường dẫn tương ứng.

  • Thư mục mpdf để trong app/Vendor/
  • File MpdfComponent.php để trong app/Controller/Component

OK, bạn đã xong một nửa, việc còn lại là thiết lập quyền 600 hoặc 700 cho các thư mục nằm trong thư mục mpdf dưới đây :

  • /ttfontdata/ - thư mục dùng để cache dữ liệu font giúp tăng performance (bắt buộc)
  • /tmp/ - dùng để thực hiện các xử lý tạm thời (bắt buộc)
  • _/graph_cache/ _- nếu bạn dùng JpGraph kết hợp với mPDF

Xây dựng demo

1) Vài thiết lập ban đầu

Chú ý : Phiên bản CakePHP tôi dùng là 2.4.7 nên có thể có sự sai khác với phiên bản bạn đang có.

Bạn đã có Mpdf component cũng như thư viện mpdf rồi, tiếp theo chúng ta sẽ cùng làm một demo sử dụng một số chức năng để hiểu hơn về mpdf.

Trước tiên bạn cần tạo một DB có một bảng đơn giản, trong bài tôi sẽ sử dụng bài hướng dẫn về tạo web blog trong CakePHP CookBook. Nhưng tôi sẽ lược bỏ đi các phần code về add, edit, delete và chỉ để lại phần show list các bài blog cho đơn giản và cũng dễ nhìn hơn             </div>
            
            <div class=

0