Skip to content

Bảng

Tạo bảng chuyên nghiệp dùng method writeHtml() của TCPDF-Next. Nó hỗ trợ <thead>, <tbody>, <tfoot>, colspan, rowspan, và inline CSS.

Ví dụ đầy đủ

php
<?php

declare(strict_types=1);

require __DIR__ . '/vendor/autoload.php';

use TcpdfNext\Document;

$html = <<<'HTML'
<style>
    table { width: 100%; border-collapse: collapse; }
    th {
        background-color: #1a2634;
        color: #ffffff;
        padding: 8px;
        font-size: 10pt;
    }
    td {
        padding: 6px 8px;
        border-bottom: 1px solid #dee2e6;
        font-size: 10pt;
    }
    tr:nth-child(even) { background-color: #f8f9fa; }
    .right  { text-align: right; }
    .center { text-align: center; }
    .total  {
        background-color: #1a2634;
        color: #ffffff;
        font-weight: bold;
    }
</style>

<table border="1" cellpadding="5">
    <thead>
        <tr>
            <th>SKU</th>
            <th>Product</th>
            <th class="center">Qty</th>
            <th class="right">Unit Price</th>
            <th class="right">Subtotal</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>WDG-001</td>
            <td>Precision Widget</td>
            <td class="center">120</td>
            <td class="right">$24.99</td>
            <td class="right">$2,998.80</td>
        </tr>
        <tr>
            <td>GDG-042</td>
            <td>Gadget Pro</td>
            <td class="center">85</td>
            <td class="right">$49.95</td>
            <td class="right">$4,245.75</td>
        </tr>
        <tr>
            <td>SPR-007</td>
            <td>Spring Assembly Kit</td>
            <td class="center">340</td>
            <td class="right">$12.50</td>
            <td class="right">$4,250.00</td>
        </tr>
    </tbody>
    <tfoot>
        <tr class="total">
            <td colspan="4" class="right">Grand Total</td>
            <td class="right">$11,494.55</td>
        </tr>
    </tfoot>
</table>
HTML;

Document::create()
    ->setTitle('Product Inventory')
    ->addPage()
    ->setFont('helvetica', size: 10)
    ->writeHtml($html)
    ->save(__DIR__ . '/tables.pdf');

echo 'PDF created.' . PHP_EOL;

colspan và rowspan

Merge ô theo chiều ngang với colspan và theo chiều dọc với rowspan, giống HTML chuẩn:

php
$html = <<<'HTML'
<table border="1" cellpadding="6" style="width:100%;">
    <tr style="background:#1a2634; color:#fff; font-weight:bold;">
        <th colspan="4" style="text-align:center;">Quarterly Sales Report</th>
    </tr>
    <tr style="background:#2c3e50; color:#fff;">
        <th>Quarter</th>
        <th>Product A</th>
        <th>Product B</th>
        <th>Total</th>
    </tr>
    <tr>
        <td>Q1</td>
        <td class="right">$120,000</td>
        <td class="right">$85,000</td>
        <td class="right" style="font-weight:bold;">$205,000</td>
    </tr>
    <tr style="background:#f5f7fa;">
        <td>Q2</td>
        <td class="right">$135,000</td>
        <td class="right">$92,000</td>
        <td class="right" style="font-weight:bold;">$227,000</td>
    </tr>
    <tr>
        <td rowspan="2" style="vertical-align:middle;">H2</td>
        <td class="right">$148,000</td>
        <td class="right">$103,000</td>
        <td class="right" style="font-weight:bold;">$251,000</td>
    </tr>
    <tr>
        <td class="right">$162,000</td>
        <td class="right">$118,000</td>
        <td class="right" style="font-weight:bold;">$280,000</td>
    </tr>
    <tr style="background:#1a2634; color:#fff; font-weight:bold;">
        <td>Annual</td>
        <td colspan="2" style="text-align:center;">--</td>
        <td class="right">$963,000</td>
    </tr>
</table>
HTML;

Document::create()
    ->setTitle('Quarterly Sales')
    ->addPage()
    ->setFont('helvetica', size: 10)
    ->writeHtml($html)
    ->save(__DIR__ . '/sales-report.pdf');

Khái niệm chính

writeHtml()

writeHtml(string $html): static render HTML trực tiếp vào PDF. Phần tử bảng được hỗ trợ: <table>, <thead>, <tbody>, <tfoot>, <tr>, <th>, <td>.

Hỗ trợ Inline CSS

Các thuộc tính CSS sau hoạt động trong writeHtml():

Thuộc tínhVí dụ
background-color#1a2634, rgb(26,38,52)
color#ffffff
font-weightbold
text-alignleft, center, right
padding6px 8px
border-bottom1px solid #dee2e6
width100%, 60mm
vertical-alignmiddle, top, bottom

Layout trang

Trên trang A4 với margin mặc định 10 mm, chiều rộng in được xấp xỉ 190 mm. Thiết lập width: 100% trên bảng sẽ lấp đầy toàn bộ vùng này.

Kết quả

Ví dụ đầu tiên tạo PDF một trang với bảng inventory header tối, màu hàng xen kẽ, cột tiền tệ căn phải, và footer tổng cộng dùng colspan.

Phân phối theo giấy phép LGPL-3.0-or-later.