Search code examples
phpmysqlfpdf

Basic table creation fpdf


I can't find a decent tutorials for making tables using fpdf and fetching data from the mysql database. I just want to know how to create one. I've been getting lot of errors for trying samples across the web.

For example, I have columns, First Name, Middle Name, Last Name, Age, and Email.

How do I create a table using fpdf and echo the entries from the database?


Solution

  • Reading and following a tutorial on FPDF site might be a good start.

    Assuming that you have a table (lets call it people) and sample data like this

    CREATE TABLE People
        (id int, 
         first_name varchar(5), 
         middle_name varchar(4), 
         last_name varchar(5), 
         age int, 
         email varchar(15));
    
    INSERT INTO People
        (id, first_name, middle_name, last_name, age, email)
    VALUES
        (1, 'Jhon', NULL, 'Doe', 27, 'jhon@email.com'),
        (2, 'Mark', 'J', 'Lee', 35, 'mark@email.com'),
        (3, 'Helen', 'P', 'Smith', 30, 'helen@email.com');
    

    Here is a basic php script that do what you want. Note: code lacks any error handling for brevity's sake.

    <?php
    require('fpdf.php');
    
    class People {
        public function all() {
            try {
                $db = new PDO('mysql:host=localhost;dbname=test;charset=UTF-8', 'user', 'password');
                $query = $db->prepare("SELECT first_name, middle_name, last_name, age, email FROM people ");
                $query->execute();
                $people = $query->fetchAll(PDO::FETCH_ASSOC);
            } catch (PDOException $e) {
                //echo "Exeption: " .$e->getMessage();
                $result = false;
            }
            $query = null;
            $db = null;
            return $people;        
        }
    }
    
    class PeoplePDF extends FPDF {
        // Create basic table
        public function CreateTable($header, $data)
        {
            // Header
            $this->SetFillColor(0);
            $this->SetTextColor(255);
            $this->SetFont('','B');
            foreach ($header as $col) {
                //Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, boolean fill [, mixed link]]]]]]])
                $this->Cell($col[1], 10, $col[0], 1, 0, 'L', true);
            }
            $this->Ln();
            // Data
            $this->SetFillColor(255);
            $this->SetTextColor(0);
            $this->SetFont('');
            foreach ($data as $row)
            {
                $i = 0;
                foreach ($row as $field) {
                    $this->Cell($header[$i][1], 6, $field, 1, 0, 'L', true);
                    $i++;
                }
                $this->Ln();
            }
        }
    }
    
    // Column headings
    $header = array(
                 array('First Name',  30), 
                 array('Middle Name', 30), 
                 array('Last Name',   30),
                 array('Age',         12),
                 array('Email',       47)
              );
    // Get data
    $people = new People();
    $data = $people->all();
    
    $pdf = new PeoplePDF();
    $pdf->SetFont('Arial', '', 12);
    $pdf->AddPage();
    $pdf->CreateTable($header,$data);
    $pdf->Output();
    

    Make sure to change connection string

    $db = new PDO('mysql:host=localhost;dbname=test;charset=UTF-8', 'user', 'password');
                              ^^^^^^^^^        ^^^^                  ^^^^    ^^^^^^^^