Tablas
Crea tablas profesionales usando el método writeHtml() de TCPDF-Next. Soporta <thead>, <tbody>, <tfoot>, colspan, rowspan y CSS inline.
Ejemplo completo
<?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 y rowspan
Combina celdas horizontalmente con colspan y verticalmente con rowspan, exactamente como HTML estándar:
$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');Conceptos clave
writeHtml()
writeHtml(string $html): static renderiza HTML directamente en el PDF. Elementos de tabla soportados: <table>, <thead>, <tbody>, <tfoot>, <tr>, <th>, <td>.
Soporte CSS inline
Las siguientes propiedades CSS funcionan dentro de writeHtml():
| Propiedad | Ejemplo |
|---|---|
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 de página
En una página A4 con márgenes predeterminados de 10 mm, el ancho imprimible es aproximadamente 190 mm. Configurar width: 100% en la tabla llena toda esta área.
Salida
El primer ejemplo produce un PDF de una página con una tabla de inventario con header oscuro, colores de fila alternados, columnas de moneda alineadas a la derecha y un footer de gran total basado en colspan.