tuto5.htm 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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>Tablas</title>
  6. <link type="text/css" rel="stylesheet" href="../fpdf.css">
  7. </head>
  8. <body>
  9. <h1>Tablas</h1>
  10. Este tutorial se explicará como crear tablas fácilmente.
  11. <div class="source">
  12. <pre><code>&lt;?php
  13. <span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
  14. class </span>PDF <span class="kw">extends </span>FPDF
  15. <span class="kw">{
  16. </span><span class="cmt">// Cargar los datos
  17. </span><span class="kw">function </span>LoadData<span class="kw">(</span>$file<span class="kw">)
  18. {
  19. </span><span class="cmt">// Leer las líneas del fichero
  20. </span>$lines <span class="kw">= </span>file<span class="kw">(</span>$file<span class="kw">);
  21. </span>$data <span class="kw">= array();
  22. foreach(</span>$lines <span class="kw">as </span>$line<span class="kw">)
  23. </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">));
  24. return </span>$data<span class="kw">;
  25. }
  26. </span><span class="cmt">// Tabla simple
  27. </span><span class="kw">function </span>BasicTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
  28. {
  29. </span><span class="cmt">// Cabecera
  30. </span><span class="kw">foreach(</span>$header <span class="kw">as </span>$col<span class="kw">)
  31. </span>$<span class="kw">this-&gt;</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">);
  32. </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
  33. </span><span class="cmt">// Datos
  34. </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
  35. {
  36. foreach(</span>$row <span class="kw">as </span>$col<span class="kw">)
  37. </span>$<span class="kw">this-&gt;</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">);
  38. </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
  39. }
  40. }
  41. </span><span class="cmt">// Una tabla más completa
  42. </span><span class="kw">function </span>ImprovedTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
  43. {
  44. </span><span class="cmt">// Anchuras de las columnas
  45. </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">);
  46. </span><span class="cmt">// Cabeceras
  47. </span><span class="kw">for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw">&lt;</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++)
  48. </span>$<span class="kw">this-&gt;</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">);
  49. </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
  50. </span><span class="cmt">// Datos
  51. </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
  52. {
  53. </span>$<span class="kw">this-&gt;</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">);
  54. </span>$<span class="kw">this-&gt;</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">);
  55. </span>$<span class="kw">this-&gt;</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">);
  56. </span>$<span class="kw">this-&gt;</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">);
  57. </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
  58. }
  59. </span><span class="cmt">// Línea de cierre
  60. </span>$<span class="kw">this-&gt;</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">);
  61. }
  62. </span><span class="cmt">// Tabla coloreada
  63. </span><span class="kw">function </span>FancyTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
  64. {
  65. </span><span class="cmt">// Colores, ancho de línea y fuente en negrita
  66. </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>255<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">);
  67. </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>255<span class="kw">);
  68. </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>128<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">);
  69. </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>.3<span class="kw">);
  70. </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">);
  71. </span><span class="cmt">// Cabecera
  72. </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">);
  73. for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw">&lt;</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++)
  74. </span>$<span class="kw">this-&gt;</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">);
  75. </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
  76. </span><span class="cmt">// Restauración de colores y fuentes
  77. </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>224<span class="kw">,</span>235<span class="kw">,</span>255<span class="kw">);
  78. </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">);
  79. </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
  80. </span><span class="cmt">// Datos
  81. </span>$fill <span class="kw">= </span>false<span class="kw">;
  82. foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
  83. {
  84. </span>$<span class="kw">this-&gt;</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">);
  85. </span>$<span class="kw">this-&gt;</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">);
  86. </span>$<span class="kw">this-&gt;</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">);
  87. </span>$<span class="kw">this-&gt;</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">);
  88. </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
  89. </span>$fill <span class="kw">= !</span>$fill<span class="kw">;
  90. }
  91. </span><span class="cmt">// Línea de cierre
  92. </span>$<span class="kw">this-&gt;</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">);
  93. }
  94. }
  95. </span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
  96. </span><span class="cmt">// Títulos de las columnas
  97. </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">);
  98. </span><span class="cmt">// Carga de datos
  99. </span>$data <span class="kw">= </span>$pdf<span class="kw">-&gt;</span>LoadData<span class="kw">(</span><span class="str">'paises.txt'</span><span class="kw">);
  100. </span>$pdf<span class="kw">-&gt;</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">);
  101. </span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
  102. </span>$pdf<span class="kw">-&gt;</span>BasicTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
  103. </span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
  104. </span>$pdf<span class="kw">-&gt;</span>ImprovedTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
  105. </span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
  106. </span>$pdf<span class="kw">-&gt;</span>FancyTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
  107. </span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
  108. </span>?&gt;</code></pre>
  109. </div>
  110. <p class='demo'><a href='tuto5.php' target='_blank' class='demo'>[Demo]</a></p>
  111. Siendo una tabla un conjunto de celdas, lo natural es construirla de ellas. El
  112. primer ejemplo es el más básico posible: celdas con bordes simples, todas del mismo
  113. tamaño y alineadas a la izquierda. El resultado es algo rudimentario, pero es
  114. muy rápido de conseguir.
  115. <br>
  116. <br>
  117. La segunda tabla tiene algunas mejoras: cada columna tiene su propio ancho, los títulos
  118. están centrados y el texto se alinea a la derecha. Más aún, las líneas horizontales se
  119. han eliminado. Esto se consigue mediante el parámetro <code>border</code>
  120. del método <a href='../doc/cell.htm'>Cell()</a>, que especifica qué bordes de la celda deben imprimirse.
  121. En este caso, queremos que sean los de la izquierda (<code>L</code>) y los de la derecha
  122. (<code>R</code>). Seguimos teniendo el problema de la línea horizontal de fin de tabla.
  123. Hay dos posibilidades: o comprobar si estamos en la última línea en el bucle, en cuyo caso
  124. usaremos <code>LRB</code> para el parámtro <code>border</code>; o, como hemos hecho aquí,
  125. añadir la línea una vez que el bucle ha terminado.
  126. <br>
  127. <br>
  128. La tercera tabla es similar a la segunda, salvo por el uso de colores. Simplemente hemos
  129. especificado los colores de relleno, texto y línea. El coloreado alternativo de las filas
  130. se consigue alternando celdas transparentes y coloreadas.
  131. </body>
  132. </html>