| 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|---|
| 2 | <html>
|
|---|
| 3 | <head>
|
|---|
| 4 | <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
|---|
| 5 | <title>Tables</title>
|
|---|
| 6 | <link type="text/css" rel="stylesheet" href="../fpdf.css">
|
|---|
| 7 | </head>
|
|---|
| 8 | <body>
|
|---|
| 9 | <h1>Tables</h1>
|
|---|
| 10 | This tutorial shows different ways to make tables.
|
|---|
| 11 | <div class="source">
|
|---|
| 12 | <pre><code><?php
|
|---|
| 13 | <span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
|
|---|
| 14 |
|
|---|
| 15 | class </span>PDF <span class="kw">extends </span>FPDF
|
|---|
| 16 | <span class="kw">{
|
|---|
| 17 | </span><span class="cmt">// Load data
|
|---|
| 18 | </span><span class="kw">function </span>LoadData<span class="kw">(</span>$file<span class="kw">)
|
|---|
| 19 | {
|
|---|
| 20 | </span><span class="cmt">// Read file lines
|
|---|
| 21 | </span>$lines <span class="kw">= </span>file<span class="kw">(</span>$file<span class="kw">);
|
|---|
| 22 | </span>$data <span class="kw">= array();
|
|---|
| 23 | foreach(</span>$lines <span class="kw">as </span>$line<span class="kw">)
|
|---|
| 24 | </span>$data<span class="kw">[] = </span>explode<span class="kw">(</span><span class="str">';'</span><span class="kw">,</span>trim<span class="kw">(</span>$line<span class="kw">));
|
|---|
| 25 | return </span>$data<span class="kw">;
|
|---|
| 26 | }
|
|---|
| 27 |
|
|---|
| 28 | </span><span class="cmt">// Simple table
|
|---|
| 29 | </span><span class="kw">function </span>BasicTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
|
|---|
| 30 | {
|
|---|
| 31 | </span><span class="cmt">// Header
|
|---|
| 32 | </span><span class="kw">foreach(</span>$header <span class="kw">as </span>$col<span class="kw">)
|
|---|
| 33 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>40<span class="kw">,</span>7<span class="kw">,</span>$col<span class="kw">,</span>1<span class="kw">);
|
|---|
| 34 | </span>$<span class="kw">this-></span>Ln<span class="kw">();
|
|---|
| 35 | </span><span class="cmt">// Data
|
|---|
| 36 | </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
|
|---|
| 37 | {
|
|---|
| 38 | foreach(</span>$row <span class="kw">as </span>$col<span class="kw">)
|
|---|
| 39 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>40<span class="kw">,</span>6<span class="kw">,</span>$col<span class="kw">,</span>1<span class="kw">);
|
|---|
| 40 | </span>$<span class="kw">this-></span>Ln<span class="kw">();
|
|---|
| 41 | }
|
|---|
| 42 | }
|
|---|
| 43 |
|
|---|
| 44 | </span><span class="cmt">// Better table
|
|---|
| 45 | </span><span class="kw">function </span>ImprovedTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
|
|---|
| 46 | {
|
|---|
| 47 | </span><span class="cmt">// Column widths
|
|---|
| 48 | </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>40<span class="kw">, </span>45<span class="kw">);
|
|---|
| 49 | </span><span class="cmt">// Header
|
|---|
| 50 | </span><span class="kw">for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw"><</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++)
|
|---|
| 51 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>$i<span class="kw">],</span>7<span class="kw">,</span>$header<span class="kw">[</span>$i<span class="kw">],</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
|
|---|
| 52 | </span>$<span class="kw">this-></span>Ln<span class="kw">();
|
|---|
| 53 | </span><span class="cmt">// Data
|
|---|
| 54 | </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
|
|---|
| 55 | {
|
|---|
| 56 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>0<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>0<span class="kw">],</span><span class="str">'LR'</span><span class="kw">);
|
|---|
| 57 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>1<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>1<span class="kw">],</span><span class="str">'LR'</span><span class="kw">);
|
|---|
| 58 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>2<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>2<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">);
|
|---|
| 59 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>3<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>3<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">);
|
|---|
| 60 | </span>$<span class="kw">this-></span>Ln<span class="kw">();
|
|---|
| 61 | }
|
|---|
| 62 | </span><span class="cmt">// Closing line
|
|---|
| 63 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>array_sum<span class="kw">(</span>$w<span class="kw">),</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'T'</span><span class="kw">);
|
|---|
| 64 | }
|
|---|
| 65 |
|
|---|
| 66 | </span><span class="cmt">// Colored table
|
|---|
| 67 | </span><span class="kw">function </span>FancyTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
|
|---|
| 68 | {
|
|---|
| 69 | </span><span class="cmt">// Colors, line width and bold font
|
|---|
| 70 | </span>$<span class="kw">this-></span>SetFillColor<span class="kw">(</span>255<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">);
|
|---|
| 71 | </span>$<span class="kw">this-></span>SetTextColor<span class="kw">(</span>255<span class="kw">);
|
|---|
| 72 | </span>$<span class="kw">this-></span>SetDrawColor<span class="kw">(</span>128<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">);
|
|---|
| 73 | </span>$<span class="kw">this-></span>SetLineWidth<span class="kw">(</span>.3<span class="kw">);
|
|---|
| 74 | </span>$<span class="kw">this-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">);
|
|---|
| 75 | </span><span class="cmt">// Header
|
|---|
| 76 | </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>40<span class="kw">, </span>45<span class="kw">);
|
|---|
| 77 | for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw"><</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++)
|
|---|
| 78 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>$i<span class="kw">],</span>7<span class="kw">,</span>$header<span class="kw">[</span>$i<span class="kw">],</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">);
|
|---|
| 79 | </span>$<span class="kw">this-></span>Ln<span class="kw">();
|
|---|
| 80 | </span><span class="cmt">// Color and font restoration
|
|---|
| 81 | </span>$<span class="kw">this-></span>SetFillColor<span class="kw">(</span>224<span class="kw">,</span>235<span class="kw">,</span>255<span class="kw">);
|
|---|
| 82 | </span>$<span class="kw">this-></span>SetTextColor<span class="kw">(</span>0<span class="kw">);
|
|---|
| 83 | </span>$<span class="kw">this-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
|
|---|
| 84 | </span><span class="cmt">// Data
|
|---|
| 85 | </span>$fill <span class="kw">= </span>false<span class="kw">;
|
|---|
| 86 | foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
|
|---|
| 87 | {
|
|---|
| 88 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>0<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>0<span class="kw">],</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>$fill<span class="kw">);
|
|---|
| 89 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>1<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>1<span class="kw">],</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>$fill<span class="kw">);
|
|---|
| 90 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>2<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>2<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">,</span>$fill<span class="kw">);
|
|---|
| 91 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>$w<span class="kw">[</span>3<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>3<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">,</span>$fill<span class="kw">);
|
|---|
| 92 | </span>$<span class="kw">this-></span>Ln<span class="kw">();
|
|---|
| 93 | </span>$fill <span class="kw">= !</span>$fill<span class="kw">;
|
|---|
| 94 | }
|
|---|
| 95 | </span><span class="cmt">// Closing line
|
|---|
| 96 | </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>array_sum<span class="kw">(</span>$w<span class="kw">),</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'T'</span><span class="kw">);
|
|---|
| 97 | }
|
|---|
| 98 | }
|
|---|
| 99 |
|
|---|
| 100 | </span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
|
|---|
| 101 | </span><span class="cmt">// Column headings
|
|---|
| 102 | </span>$header <span class="kw">= array(</span><span class="str">'Country'</span><span class="kw">, </span><span class="str">'Capital'</span><span class="kw">, </span><span class="str">'Area (sq km)'</span><span class="kw">, </span><span class="str">'Pop. (thousands)'</span><span class="kw">);
|
|---|
| 103 | </span><span class="cmt">// Data loading
|
|---|
| 104 | </span>$data <span class="kw">= </span>$pdf<span class="kw">-></span>LoadData<span class="kw">(</span><span class="str">'countries.txt'</span><span class="kw">);
|
|---|
| 105 | </span>$pdf<span class="kw">-></span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>14<span class="kw">);
|
|---|
| 106 | </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
|---|
| 107 | </span>$pdf<span class="kw">-></span>BasicTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
|
|---|
| 108 | </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
|---|
| 109 | </span>$pdf<span class="kw">-></span>ImprovedTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
|
|---|
| 110 | </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
|---|
| 111 | </span>$pdf<span class="kw">-></span>FancyTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
|
|---|
| 112 | </span>$pdf<span class="kw">-></span>Output<span class="kw">();
|
|---|
| 113 | </span>?></code></pre>
|
|---|
| 114 | </div>
|
|---|
| 115 | <p class='demo'><a href='tuto5.php' target='_blank' class='demo'>[Demo]</a></p>
|
|---|
| 116 | A table being just a collection of cells, it's natural to build one from them. The first
|
|---|
| 117 | example is achieved in the most basic way possible: simple framed cells, all of the same size
|
|---|
| 118 | and left aligned. The result is rudimentary but very quick to obtain.
|
|---|
| 119 | <br>
|
|---|
| 120 | <br>
|
|---|
| 121 | The second table brings some improvements: each column has its own width, headings are centered,
|
|---|
| 122 | and numbers right aligned. Moreover, horizontal lines have been removed. This is done by means
|
|---|
| 123 | of the <code>border</code> parameter of the <a href='../doc/cell.htm'>Cell()</a> method, which specifies which sides of the
|
|---|
| 124 | cell must be drawn. Here we want the left (<code>L</code>) and right (<code>R</code>) ones. It remains
|
|---|
| 125 | the problem of the horizontal line to finish the table. There are two possibilities: either
|
|---|
| 126 | check for the last line in the loop, in which case we use <code>LRB</code> for the <code>border</code>
|
|---|
| 127 | parameter; or, as done here, add the line once the loop is over.
|
|---|
| 128 | <br>
|
|---|
| 129 | <br>
|
|---|
| 130 | The third table is similar to the second one but uses colors. Fill, text and line colors are
|
|---|
| 131 | simply specified. Alternate coloring for rows is obtained by using alternatively transparent
|
|---|
| 132 | and filled cells.
|
|---|
| 133 | </body>
|
|---|
| 134 | </html>
|
|---|