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 how to make tables easily.
|
---|
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>chop<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">//Closure 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="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">);
|
---|
96 | }
|
---|
97 | }
|
---|
98 |
|
---|
99 | </span>$pdf<span class="kw">=new </span>PDF<span class="kw">();
|
---|
100 | </span><span class="cmt">//Column titles
|
---|
101 | </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">);
|
---|
102 | </span><span class="cmt">//Data loading
|
---|
103 | </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">);
|
---|
104 | </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">);
|
---|
105 | </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
---|
106 | </span>$pdf<span class="kw">-></span>BasicTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
|
---|
107 | </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
---|
108 | </span>$pdf<span class="kw">-></span>ImprovedTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
|
---|
109 | </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
---|
110 | </span>$pdf<span class="kw">-></span>FancyTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
|
---|
111 | </span>$pdf<span class="kw">-></span>Output<span class="kw">();
|
---|
112 | </span>?></code></pre>
|
---|
113 | </div>
|
---|
114 | <p class='demo'><a href='tuto5.php' target='_blank' class='demo'>[Demo]</a></p>
|
---|
115 | A table being just a collection of cells, it is natural to build one from them. The first
|
---|
116 | example is achieved in the most basic way possible: simple framed cells, all of the same size
|
---|
117 | and left aligned. The result is rudimentary but very quick to obtain.
|
---|
118 | <br>
|
---|
119 | <br>
|
---|
120 | The second table brings some improvements: each column has its own width, titles are centered
|
---|
121 | and figures right aligned. Moreover, horizontal lines have been removed. This is done by means
|
---|
122 | of the <code>border</code> parameter of the <a href='../doc/cell.htm'>Cell()</a> method, which specifies which sides of the
|
---|
123 | cell must be drawn. Here we want the left (<code>L</code>) and right (<code>R</code>) ones. It remains
|
---|
124 | the problem of the horizontal line to finish the table. There are two possibilities: either
|
---|
125 | check for the last line in the loop, in which case we use <code>LRB</code> for the <code>border</code>
|
---|
126 | parameter; or, as done here, add the line once the loop is over.
|
---|
127 | <br>
|
---|
128 | <br>
|
---|
129 | The third table is similar to the second one but uses colors. Fill, text and line colors are
|
---|
130 | simply specified. Alternate coloring for rows is obtained by using alternatively transparent
|
---|
131 | and filled cells.
|
---|
132 | </body>
|
---|
133 | </html>
|
---|