Trong thế giới phát triển web, việc tạo PDF từ HTML có thể rất hữu ích trong nhiều trường hợp, từ việc tạo hóa đơn, báo cáo cho đến các tài liệu khác. PHP cung cấp cho chúng ta nhiều thư viện và công cụ hỗ trợ cho nhiệm vụ này. Trong bài viết này, chúng ta sẽ khám phá cách viết một class trong PHP để tạo PDF từ HTML, đồng thời tìm hiểu về cách hoạt động của nó.
Yêu cầu trước khi bắt đầu
Trước khi bắt tay vào việc viết class, chúng ta cần một số thư viện hỗ trợ. Một trong những thư viện phổ biến nhất cho việc chuyển đổi HTML sang PDF trong PHP là TCPDF hoặc DOMPDF. Trong bài viết này, chúng ta sẽ sử dụng DOMPDF vì sự đơn giản và dễ sử dụng của nó.
Đầu tiên, bạn cần cài đặt DOMPDF. Bạn có thể thực hiện việc này thông qua Composer:
composer require dompdf/dompdf
Sau khi đã cài đặt thành công, chúng ta có thể bắt đầu viết class.
Viết Class tạo PDF
Khởi tạo class
require 'vendor/autoload.php';
use Dompdf\Dompdf;
use Dompdf\Options;
class PdfGenerator {
private $dompdf;
public function __construct() {
$options = new Options();
$options->set('defaultFont', 'Courier');
$this->dompdf = new Dompdf($options);
}
}
Trong đoạn mã trên, chúng ta khởi tạo một class có tên là PdfGenerator. Trong hàm khởi tạo, chúng ta tạo một phiên bản của Dompdf và thiết lập một số tùy chọn như font mặc định.
Thêm phương thức tạo PDF
public function createPDF($htmlContent, $fileName) {
// Load HTML content
$this->dompdf->loadHtml($htmlContent);
// (Optional) Set paper size and orientation
$this->dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$this->dompdf->render();
// Output the generated PDF to Browser
$this->dompdf->stream($fileName, array("Attachment" => true));
}
Trong phương thức createPDF, chúng ta:
- Tải nội dung HTML vào Dompdf.
- Tùy chọn về kích thước giấy và hướng là điện thoại:
A4vàportrait. - Kết xuất nội dung HTML về PDF.
- Xuất bản ra trình duyệt hoặc tải về một tệp PDF với tên được chỉ định.
Sử dụng Class
Bây giờ, để sử dụng class PdfGenerator, bạn chỉ cần tạo một đối tượng của nó và gọi phương thức createPDF.
$html = '<h1>Tiêu đề của PDF</h1><p>Đây là nội dung của PDF được tạo từ HTML. Chúc bạn thành công!</p>';
$pdf = new PdfGenerator();
$pdf->createPDF($html, 'my_document.pdf');
Kết hợp với Form
Đôi khi, chúng ta muốn tạo PDF từ dữ liệu nhận được từ người dùng thông qua một form.
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$htmlContent = '<h1>' . htmlspecialchars($_POST['title']) . '</h1>';
$htmlContent .= '<p>' . htmlspecialchars($_POST['content']) . '</p>';
$pdf = new PdfGenerator();
$pdf->createPDF($htmlContent, 'user_document.pdf');
}
Bạn chỉ cần một mẫu form HTML đơn giản để thu thập thông tin từ người dùng.
<form method="POST">
<input type="text" name="title" placeholder="Tiêu đề" required>
<textarea name="content" placeholder="Nội dung" required></textarea>
<button type="submit">Tạo PDF</button>
</form>
Cấu hình và Tùy chỉnh
Cấu hình cơ bản
DOMPDF cho phép bạn tùy chỉnh nhiều tham số khác nhau để điều chỉnh cách mà PDF của bạn được tạo ra. Dưới đây là một số tùy chọn mà bạn có thể thêm vào trong class:
$options->set('isHtml5ParserEnabled', true);
$options->set('isRemoteEnabled', true); // Nếu nội dung HTML có chứa hình ảnh từ URL
Hỗ trợ ảnh
Khi tạo PDF từ HTML, bạn có thể muốn chèn các hình ảnh. Để sử dụng hình ảnh từ URL, bạn cần đảm bảo rằng tùy chọn isRemoteEnabled được thiết lập thành true.
public function createPDF($htmlContent, $fileName) {
$this->dompdf->loadHtml($htmlContent);
$this->dompdf->setPaper('A4', 'portrait');
$this->dompdf->render();
// Xuất PDF
$this->dompdf->stream($fileName, array("Attachment" => false));
}
Khi Attachment được đặt thành false, PDF sẽ được mở trực tiếp trên trình duyệt thay vì tải xuống.
Kết luận
Việc tạo PDF từ HTML trong PHP là một công việc tương đối dễ dàng khi sử dụng thư viện phù hợp như DOMPDF. Bằng cách viết một class đơn giản chứa các phương thức cần thiết, bạn có thể tiết kiệm rất nhiều thời gian và công sức trong việc tạo ra những tài liệu đẹp mắt và chất lượng.
Hãy thử nghiệm với các tính năng của DOMPDF để tạo ra các tài liệu PDF phong phú và chuyên nghiệp hơn. Mọi ý tưởng có thể trau dồi thêm lựa chọn và thiết kế cho lịch sử cá nhân bạn. Chúc bạn thành công!
Comments