×

Hướng dẫn viết class để tạo hóa đơn PDF trong PHP

Việc tạo hóa đơn PDF trong PHP là một nhu cầu phổ biến trong phát triển ứng dụng web, đặc biệt trong lĩnh vực thương mại điện tử và quản lý tài chính. Bài viết này sẽ hướng dẫn bạn cách viết một class đơn giản giúp bạn tạo hóa đơn PDF một cách dễ dàng và hiệu quả. Chúng ta sẽ sử dụng thư viện FPDF, một thư viện phổ biến cho việc tạo PDF trong PHP.

FPDF cho phép chúng ta dễ dàng tạo và định dạng tài liệu PDF mà không cần phải sử dụng nhiều mã phức tạp. Sau khi cài đặt FPDF, bạn sẽ có khả năng tạo ra các hóa đơn với thông tin chi tiết như tên khách hàng, sản phẩm, giá cả, và ngày tháng.

Cài đặt FPDF

Trước tiên, bạn cần tải xuống thư viện FPDF. Bạn có thể tải nó từ trang chính thức: FPDF Download

Sau khi tải về, bạn hãy giải nén nó và đưa thư mục vào dự án PHP của bạn. Đảm bảo rằng bạn đã cấu hình đúng đường dẫn trong mã của bạn để sử dụng thư viện này.

Tạo Class Hóa Đơn PDF

Dưới đây là mã mẫu cho class Hóa Đơn PDF:

<?php
require('fpdf.php');

class InvoicePDF extends FPDF {

    // Thuộc tính để lưu thông tin hóa đơn
    private $invoiceData;

    // Hàm khởi tạo
    public function __construct($data) {
        parent::__construct();
        $this->invoiceData = $data;
    }

    // Hàm thiết lập trang
    function Header() {
        // Thiết lập font
        $this->SetFont('Arial', 'B', 12);
        // Tiêu đề hóa đơn
        $this->Cell(0, 10, 'HÓA ĐƠN THANH TOÁN', 0, 1, 'C');
        $this->Ln(10);
    }

    // Hàm tạo nội dung hóa đơn
    function createInvoice() {
        $this->AddPage();
        $this->SetFont('Arial', '', 12);

        // Thông tin khách hàng
        $this->Cell(0, 10, 'Khách Hàng: ' . $this->invoiceData['customer_name'], 0, 1);
        $this->Cell(0, 10, 'Địa chỉ: ' . $this->invoiceData['customer_address'], 0, 1);
        $this->Cell(0, 10, 'Ngày: ' . date('d/m/Y'), 0, 1);
        $this->Ln(10);

        // Thông tin chi tiết hóa đơn
        $this->Cell(80, 10, 'Tên sản phẩm', 1);
        $this->Cell(40, 10, 'Đơn giá', 1);
        $this->Cell(30, 10, 'Số lượng', 1);
        $this->Cell(40, 10, 'Thành tiền', 1);
        $this->Ln();

        foreach ($this->invoiceData['items'] as $item) {
            $this->Cell(80, 10, $item['name'], 1);
            $this->Cell(40, 10, number_format($item['price'], 0, ',', '.') . ' VNĐ', 1);
            $this->Cell(30, 10, $item['quantity'], 1);
            $this->Cell(40, 10, number_format($item['price'] * $item['quantity'], 0, ',', '.') . ' VNĐ', 1);
            $this->Ln();
        }

        // Tính tổng tiền
        $total = 0;
        foreach ($this->invoiceData['items'] as $item) {
            $total += $item['price'] * $item['quantity'];
        }

        $this->Ln();
        $this->Cell(150, 10, 'Tổng cộng', 1);
        $this->Cell(40, 10, number_format($total, 0, ',', '.') . ' VNĐ', 1);
    }

    // Xuất PDF
    public function outputPDF($filename) {
        $this->createInvoice();
        $this->Output($filename, 'D'); // D để tải xuống
    }
}

// Dữ liệu hóa đơn mẫu
$invoiceData = [
    'customer_name' => 'Nguyễn Văn A',
    'customer_address' => '123 Đường Phố, Thành Phố',
    'items' => [
        ['name' => 'Sản phẩm 1', 'price' => 100000, 'quantity' => 2],
        ['name' => 'Sản phẩm 2', 'price' => 150000, 'quantity' => 1],
    ]
];

// Tạo đối tượng hóa đơn và xuất PDF
$invoice = new InvoicePDF($invoiceData);
$invoice->outputPDF('hoa_don.pdf');
?>

Giải thích mã nguồn

  • Đầu tiên, chúng ta yêu cầu thư viện FPDF bằng cách sử dụng require('fpdf.php');.
  • Tiếp theo, tạo một class InvoicePDF kế thừa từ FPDF, trong đó chúng ta định nghĩa các thuộc tính và phương thức cần thiết.
  • Trong phương thức khởi tạo, chúng ta nhận dữ liệu hóa đơn và lưu vào thuộc tính $invoiceData.
  • Phương thức Header() dùng để hiển thị tiêu đề hóa đơn trên đầu mỗi trang.
  • Phương thức createInvoice() xây dựng nội dung của hóa đơn, bao gồm thông tin khách hàng và chi tiết sản phẩm.
  • Cuối cùng, phương thức outputPDF() sẽ tạo hóa đơn PDF và xuất ra file.

Kết luận

Với class đã tạo, bạn có thể dễ dàng điều chỉnh và mở rộng để phù hợp với yêu cầu của riêng bạn. Ví dụ, bạn có thể thêm các phương thức kiểm tra dữ liệu trước khi tạo PDF hay tùy chỉnh định dạng cho từng phần trong hóa đơn.

Việc sử dụng thư viện FPDF trong PHP rất trực quan và dễ sử dụng, giúp bạn xử lý việc tạo tài liệu PDF một cách hiệu quả. Hy vọng rằng bài viết này sẽ giúp bạn trong quá trình phát triển ứng dụng của mình!

Comments