| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Tablas</title>
- <link type="text/css" rel="stylesheet" href="../fpdf.css">
- </head>
- <body>
- <h1>Tablas</h1>
- Este tutorial se explicará como crear tablas fácilmente.
- <div class="source">
- <pre><code><?php
- <span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
- class </span>PDF <span class="kw">extends </span>FPDF
- <span class="kw">{
- </span><span class="cmt">// Cargar los datos
- </span><span class="kw">function </span>LoadData<span class="kw">(</span>$file<span class="kw">)
- {
- </span><span class="cmt">// Leer las líneas del fichero
- </span>$lines <span class="kw">= </span>file<span class="kw">(</span>$file<span class="kw">);
- </span>$data <span class="kw">= array();
- foreach(</span>$lines <span class="kw">as </span>$line<span class="kw">)
- </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">));
- return </span>$data<span class="kw">;
- }
- </span><span class="cmt">// Tabla simple
- </span><span class="kw">function </span>BasicTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
- {
- </span><span class="cmt">// Cabecera
- </span><span class="kw">foreach(</span>$header <span class="kw">as </span>$col<span class="kw">)
- </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">);
- </span>$<span class="kw">this-></span>Ln<span class="kw">();
- </span><span class="cmt">// Datos
- </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
- {
- foreach(</span>$row <span class="kw">as </span>$col<span class="kw">)
- </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">);
- </span>$<span class="kw">this-></span>Ln<span class="kw">();
- }
- }
- </span><span class="cmt">// Una tabla más completa
- </span><span class="kw">function </span>ImprovedTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
- {
- </span><span class="cmt">// Anchuras de las columnas
- </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>45<span class="kw">, </span>40<span class="kw">);
- </span><span class="cmt">// Cabeceras
- </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">++)
- </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>$<span class="kw">this-></span>Ln<span class="kw">();
- </span><span class="cmt">// Datos
- </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
- {
- </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>$<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>$<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>$<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>$<span class="kw">this-></span>Ln<span class="kw">();
- }
- </span><span class="cmt">// Línea de cierre
- </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">);
- }
- </span><span class="cmt">// Tabla coloreada
- </span><span class="kw">function </span>FancyTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
- {
- </span><span class="cmt">// Colores, ancho de línea y fuente en negrita
- </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">);
- </span>$<span class="kw">this-></span>SetTextColor<span class="kw">(</span>255<span class="kw">);
- </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">);
- </span>$<span class="kw">this-></span>SetLineWidth<span class="kw">(</span>.3<span class="kw">);
- </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">);
- </span><span class="cmt">// Cabecera
- </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>45<span class="kw">, </span>40<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">++)
- </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">);
- </span>$<span class="kw">this-></span>Ln<span class="kw">();
- </span><span class="cmt">// Restauración de colores y fuentes
- </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">);
- </span>$<span class="kw">this-></span>SetTextColor<span class="kw">(</span>0<span class="kw">);
- </span>$<span class="kw">this-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
- </span><span class="cmt">// Datos
- </span>$fill <span class="kw">= </span>false<span class="kw">;
- foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
- {
- </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">);
- </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">);
- </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">);
- </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">);
- </span>$<span class="kw">this-></span>Ln<span class="kw">();
- </span>$fill <span class="kw">= !</span>$fill<span class="kw">;
- }
- </span><span class="cmt">// Línea de cierre
- </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">);
- }
- }
- </span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
- </span><span class="cmt">// Títulos de las columnas
- </span>$header <span class="kw">= array(</span><span class="str">'País'</span><span class="kw">, </span><span class="str">'Capital'</span><span class="kw">, </span><span class="str">'Superficie (km2)'</span><span class="kw">, </span><span class="str">'Pobl. (en miles)'</span><span class="kw">);
- </span><span class="cmt">// Carga de datos
- </span>$data <span class="kw">= </span>$pdf<span class="kw">-></span>LoadData<span class="kw">(</span><span class="str">'paises.txt'</span><span class="kw">);
- </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">);
- </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
- </span>$pdf<span class="kw">-></span>BasicTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
- </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
- </span>$pdf<span class="kw">-></span>ImprovedTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
- </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
- </span>$pdf<span class="kw">-></span>FancyTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
- </span>$pdf<span class="kw">-></span>Output<span class="kw">();
- </span>?></code></pre>
- </div>
- <p class='demo'><a href='tuto5.php' target='_blank' class='demo'>[Demo]</a></p>
- Siendo una tabla un conjunto de celdas, lo natural es construirla de ellas. El
- primer ejemplo es el más básico posible: celdas con bordes simples, todas del mismo
- tamaño y alineadas a la izquierda. El resultado es algo rudimentario, pero es
- muy rápido de conseguir.
- <br>
- <br>
- La segunda tabla tiene algunas mejoras: cada columna tiene su propio ancho, los títulos
- están centrados y el texto se alinea a la derecha. Más aún, las líneas horizontales se
- han eliminado. Esto se consigue mediante el parámetro <code>border</code>
- del método <a href='../doc/cell.htm'>Cell()</a>, que especifica qué bordes de la celda deben imprimirse.
- En este caso, queremos que sean los de la izquierda (<code>L</code>) y los de la derecha
- (<code>R</code>). Seguimos teniendo el problema de la línea horizontal de fin de tabla.
- Hay dos posibilidades: o comprobar si estamos en la última línea en el bucle, en cuyo caso
- usaremos <code>LRB</code> para el parámtro <code>border</code>; o, como hemos hecho aquí,
- añadir la línea una vez que el bucle ha terminado.
- <br>
- <br>
- La tercera tabla es similar a la segunda, salvo por el uso de colores. Simplemente hemos
- especificado los colores de relleno, texto y línea. El coloreado alternativo de las filas
- se consigue alternando celdas transparentes y coloreadas.
- </body>
- </html>
|