Skip to content

Tablas

Crea tablas profesionales usando el método writeHtml() de TCPDF-Next. Soporta <thead>, <tbody>, <tfoot>, colspan, rowspan y CSS inline.

Ejemplo completo

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 y rowspan

Combina celdas horizontalmente con colspan y verticalmente con rowspan, exactamente como HTML estándar:

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');

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():

PropiedadEjemplo
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 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.

Distribuido bajo la licencia LGPL-3.0-or-later.