This TCPDF addon class allows creation of a “Advanced Tables” in the pdf document in a very simple way.

Features:

  • TCPDF class needs minimal extension, the pdf object will be passed as a parameter to the class constructor
  • Every table cell is a fully featured Tcpdf Advanced Multicell
  • The table cells can be aligned vertically and horizontally
  • Columns and rows can be spanned
  • The table splits automatically on page-break
  • The header can be added automatically on every new page
  • Multiple default properties can be defined for headers and rows, which can be overridden for every single cell
  • Advanced split mode for cells can be enabled
  • Table can be transparent
  • Images can be added to table cells

Requirements:

  • PHP version > 5.3.0

Resources:

PDF Addons are free!

More details here.

Pdf example #1:

<?php

use Interpid\PdfLib\Table;

$table = new Table($pdf);

$table->setStyle('p', 7, '', '130,0,30', 'helvetica');
$table->setStyle('b', 7, 'B', '130,0,30', 'helvetica');

$columns = 3;

/**
 * Set the tag styles
 */
$table->initialize([20, 30, 50]);

$header = array(
    ['TEXT' => 'Header #1'],
    ['TEXT' => 'Header #2'],
    ['TEXT' => 'Header #3'],
);

//add the header row
$table->addHeader($header);

for ($j = 1; $j < 3; $j++) {
    $row = [];
    $row[0]['TEXT'] = "Line $j";
    $row[1]['TEXT'] = "Lorem ipsum dolor sit amet...";
    $row[2]['TEXT'] = "<p>Simple text\n<b>Bold text</b></p>";

    //add the data row
    $table->addRow($row);
}

//close the table
$table->close();

Code language: PHP (php)
<?php

require('settings.php');

use Interpid\PdfLib\Table;

$table = new Table($pdf);

$table->setStyle('p', 7, '', '130,0,30', 'helvetica');
$table->setStyle('b', 7, 'B', '130,0,30', 'helvetica');
$table->setStyle('bi', 7, 'BI', '0,0,120', 'helvetica');

$columns = 3;

/**
 * Set the tag styles
 */

$table->initialize([20, 30, 80]);

$header = [
    ['TEXT' => 'Header #1'],
    ['TEXT' => 'Header #2'],
    ['TEXT' => 'Header #3']
];

//add the header row
$table->addHeader($header);

$imageCell = [
    'TYPE' => 'IMAGE',
    'FILE' => PDF_RESOURCES_IMAGES . '/dice.jpg',
    'WIDTH' => 10
];

//row 1 - add data as Array
$row = [];
$row[0]['TEXT'] = "Line <b>1</b>";

$row[1] = array(
    'TYPE' => 'IMAGE',
    'FILE' => PDF_RESOURCES_IMAGES . '/dice.jpg',
    'WIDTH' => 10
);

$row[2]['TEXT'] = "<p>All <b>table cells</b> are fully functional <bi>Advanced Multicells</bi>\nDetails on <bi href='http://www.interpid.eu'>www.interpid.eu</bi></p>";
$row[2]['ALIGN'] = 'L';

//add the data row
$table->addRow($row);

//row 2 - add data as Objects
$row = [];

//alternatively you can create directly the cell object
$row[0] = new Table\Cell\Image($pdf, PDF_RESOURCES_IMAGES . '/blog.jpg', 10);
$row[1] = array(
    'TEXT' => "<p><b>SVG Images</b> are supported\n<bi>(see right image >>>)</bi></p>",
    'BACKGROUND_COLOR' => $aColor[0]
);

$row[2] = new Table\Cell\ImageSVG($pdf, PDF_RESOURCES_IMAGES . '/Tiger.svg', 35, 35);

//add the data row
$table->addRow($row);

//close the table
$table->close();

Code language: PHP (php)

Pdf example #2:

<?php
/**
 * Pdf Advanced Table - Example
 * Copyright (c), Interpid, http://www.interpid.eu
 */

require_once __DIR__ . "/../autoload.php";

use Interpid\PdfLib\Table;
use Interpid\PdfExamples\PdfFactory;

$factory = new PdfFactory();

//get the PDF object
$pdf = PdfFactory::newPdf('table');

//define some background colors
$bgColor1 = [234, 255, 218];
$bgColor2 = [165, 250, 220];
$bgColor3 = [255, 252, 249];
/**
 * Create the pdf Table object
 * Alternative you can use the Singleton Instance
 *
 * @example : $table = Table::getInstance($pdf);
 */
$table = new Table($pdf);

/**
 * Set the tag styles
 */
$table->setStyle('p', 10, '', '130,0,30', 'helvetica');
$table->setStyle('b', 9, 'B', '80,80,260', 'helvetica');
$table->setStyle('h1', 10, '', '0,151,200', 'helvetica');
$table->setStyle('bi', 12, 'BI', '0,0,120', 'helvetica');

//set the style for utf8 texts, use 'dejavusans' fonts
$table->setStyle('u8', null, '', [0, 45, 179], 'dejavusans');
$table->setStyle('u8b', null, 'B', null, null, 'u8');

$txt1 = $title = file_get_contents(PDF_APPLICATION_PATH . '/content/table-cell-text.txt');

//Initialize the table, 5 columns with the specified widths
$table->initialize([35, 30, 40, 40, 25], [
    'TABLE' => ['TABLE_LEFT_MARGIN' => 0]
]);

$header = [
    ['TEXT' => 'Header 1'],
    ['TEXT' => 'Header 2'],
    ['TEXT' => 'Header 3'],
    ['TEXT' => 'Header 4'],
    ['TEXT' => 'Header 5']
];

//add the header line
$table->addHeader($header);

//do some adjustments in the header
$header[2]['TEXT'] = 'Header Colspan/Rowspan';
$header[2]['COLSPAN'] = 2;
$header[2]['ROWSPAN'] = 2;
$header[2]['TEXT_COLOR'] = [10, 20, 100];
$header[2]['BACKGROUND_COLOR'] = $bgColor2;

$table->addHeader($header);

//add an empty header line
$table->addHeader();

$fsize = 5;
$colspan = 2;
$rowspan = 2;

$rgb_r = 255;
$rgb_g = 255;
$rgb_b = 255;

for ($j = 0; $j < 45; $j++) {
    $row = [];
    $row[0]['TEXT'] = "Row No - $j";
    $row[0]['TEXT_SIZE'] = $fsize;
    $row[1]['TEXT'] = "Test Text Column 1- $j";
    $row[1]['TEXT_SIZE'] = 13 - $fsize;
    $row[2]['TEXT'] = "Test Text Column 2- $j";
    $row[3]['TEXT'] = "Longer text, this will split sometimes...";
    $row[3]['TEXT_SIZE'] = 15 - $fsize;
    $row[4]['TEXT'] = "Short 4- $j";
    $row[4]['TEXT_SIZE'] = 7;

    if ($j == 0) {
        $row[1]['TEXT'] = $txt1;
        $row[1]['COLSPAN'] = 4;
        $row[1]['ALIGN'] = 'C';
        $row[1]['LINE_SIZE'] = 5;
    } elseif ($j == 1) {
        $row[0]['TEXT'] = "Top Right Align <p>Align Top</p> Right Right Align";
        $row[0]['ALIGN'] = 'RT';

        $row[1]['TEXT'] = "Middle Center Align Bold Italic";
        $row[1]['TEXT_TYPE'] = 'BI';
        $row[1]['ALIGN'] = 'MC';

        $row[2]['TEXT'] = "\n\n\n\n\nBottom Left Align";
        $row[2]['ALIGN'] = 'BL';

        $row[3]['TEXT'] = "Middle Justified Align Longer text";
        $row[3]['ALIGN'] = 'MJ';

        $row[4]['TEXT'] = "TOP RIGHT Align with top padding(5)";
        $row[4]['ALIGN'] = 'TR';
        $row[4]['PADDING_TOP'] = 5;
    }

    if ($j == 2) {
        $row[1]['TEXT'] = "Cells can be images -->>>";
        $row[2] = array(
            'TYPE' => 'IMAGE',
            'FILE' => PDF_RESOURCES_IMAGES . '/dice.jpg',
            'WIDTH' => 15
        );
    }

    if ($j > 0) {
        $row[0]['BACKGROUND_COLOR'] = [255 - $rgb_b, $rgb_g, $rgb_r];
        $row[1]['BACKGROUND_COLOR'] = [$rgb_r, $rgb_g, $rgb_b];
    }

    if ($j > 3 and $j < 7) {
        $row[1]['TEXT'] = "Colspan Example - Center Align";
        $row[1]['COLSPAN'] = $colspan;
        $row[1]['BACKGROUND_COLOR'] = [$rgb_b, 50, 50];
        $row[1]['TEXT_COLOR'] = [255, 255, $rgb_g];
        $row[1]['TEXT_ALIGN'] = 'C';
        $colspan++;
        if ($colspan > 4) {
            $colspan = 2;
        }
    }

    if ($j == 7) {
        $row[3]['TEXT'] = "Rowspan Example";
        $row[3]['BACKGROUND_COLOR'] = [$rgb_b, $rgb_b, 250];
        $row[3]['ROWSPAN'] = 4;
    }

    if ($j == 8) {
        $row[1]['TEXT'] = "Rowspan Example";
        $row[1]['BACKGROUND_COLOR'] = [$rgb_b, 50, 50];
        $row[1]['ROWSPAN'] = 6;
    }

    if ($j == 9) {
        $row[2]['TEXT'] = "Rowspan Example";
        $row[2]['BACKGROUND_COLOR'] = [$rgb_r, $rgb_r, $rgb_r];
        $row[2]['ROWSPAN'] = 3;
    }

    if ($j == 12) {
        $row[2]['TEXT'] = "Rowspan and Colspan Example\n\nCenter/Middle Allignment";
        $row[2]['TEXT_ALIGN'] = 'C';
        $row[2]['VERTICAL_ALIGN'] = 'M';
        $row[2]['BACKGROUND_COLOR'] = [234, 255, 218];
        $row[2]['ROWSPAN'] = 5;
        $row[2]['COLSPAN'] = 2;
    }

    if ($j == 17) {
        $row[0]['TEXT'] = $txt1;
        $row[0]['TEXT_ALIGN'] = 'C';
        $row[0]['VERTICAL_ALIGN'] = 'M';
        $row[0]['BACKGROUND_COLOR'] = [234, 255, 218];
        $row[0]['ROWSPAN'] = 5;
        $row[0]['LINE_SIZE'] = 7;
        $row[0]['COLSPAN'] = 4;
    }

    $fsize += 0.5;

    if ($fsize > 10) {
        $fsize = 5;
    }

    $rgb_b -= 10;
    $rgb_g -= 5;
    $rgb_b -= 20;

    if ($rgb_b < 150) {
        $rgb_b = 255;
    }
    if ($rgb_g < 150) {
        $rgb_g = 255;
    }
    if ($rgb_b < 150) {
        $rgb_b = 255;
    }

    $table->addRow($row);
}

//close the table
$table->close();

//send the pdf to the browser
$pdf->Output();

Code language: PHP (php)