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ính | Ví dụ |
|---|---|
background-color | #1a2634, rgb(26,38,52) |
color | #ffffff |
font-weight | bold |
text-align | left, center, right |
padding | 6px 8px |
border-bottom | 1px solid #dee2e6 |
width | 100%, 60mm |
vertical-align | middle, 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.