tuto5.htm 13 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>Tableaux</title>
  6. <link type="text/css" rel="stylesheet" href="../fpdf.css">
  7. </head>
  8. <body>
  9. <h1>Tableaux</h1>
  10. Ce tutoriel montre comment réaliser des tableaux simplement.
  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">//Chargement des données
  17. </span><span class="kw">function </span>LoadData<span class="kw">(</span>$file<span class="kw">)
  18. {
  19. </span><span class="cmt">//Lecture des lignes du fichier
  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>chop<span class="kw">(</span>$line<span class="kw">));
  24. return </span>$data<span class="kw">;
  25. }
  26. </span><span class="cmt">//Tableau 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">//En-tête
  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">//Données
  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">//Tableau amélioré
  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">//Largeurs des colonnes
  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">//En-tête
  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">//Données
  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>0<span class="kw">,</span><span class="str">','</span><span class="kw">,</span><span class="str">' '</span><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>0<span class="kw">,</span><span class="str">','</span><span class="kw">,</span><span class="str">' '</span><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">//Trait de terminaison
  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">//Tableau coloré
  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">//Couleurs, épaisseur du trait et police grasse
  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">//En-tête
  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>1<span class="kw">);
  75. </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
  76. </span><span class="cmt">//Restauration des couleurs et de la police
  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">//Données
  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>0<span class="kw">,</span><span class="str">','</span><span class="kw">,</span><span class="str">' '</span><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>0<span class="kw">,</span><span class="str">','</span><span class="kw">,</span><span class="str">' '</span><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="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">);
  92. }
  93. }
  94. </span>$pdf<span class="kw">=new </span>PDF<span class="kw">();
  95. </span><span class="cmt">//Titres des colonnes
  96. </span>$header<span class="kw">=array(</span><span class="str">'Pays'</span><span class="kw">,</span><span class="str">'Capitale'</span><span class="kw">,</span><span class="str">'Superficie (km²)'</span><span class="kw">,</span><span class="str">'Pop. (milliers)'</span><span class="kw">);
  97. </span><span class="cmt">//Chargement des données
  98. </span>$data<span class="kw">=</span>$pdf<span class="kw">-&gt;</span>LoadData<span class="kw">(</span><span class="str">'pays.txt'</span><span class="kw">);
  99. </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">);
  100. </span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
  101. </span>$pdf<span class="kw">-&gt;</span>BasicTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
  102. </span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
  103. </span>$pdf<span class="kw">-&gt;</span>ImprovedTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
  104. </span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
  105. </span>$pdf<span class="kw">-&gt;</span>FancyTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
  106. </span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
  107. </span>?&gt;</code></pre>
  108. </div>
  109. <p class='demo'><a href='tuto5.php' target='_blank' class='demo'>[Démo]</a></p>
  110. Un tableau n'étant qu'un ensemble de cellules, il est naturel de les construire à partir de
  111. ces dernières. Le premier est réalisé de la manière la plus élémentaire qui soit : de simples
  112. cellules encadrées, toutes de la même taille et alignées à gauche. Le résultat est
  113. rudimentaire mais très rapide à obtenir.
  114. <br>
  115. <br>
  116. Le deuxième tableau apporte quelques améliorations : chaque colonne a sa propre largeur, les
  117. titres sont centrés et les nombres cadrés à droite. De plus, les traits horizontaux ont été
  118. enlevés. Ceci est réalisé grâce au paramètre <code>border</code> de la méthode <a href='../doc/cell.htm'>Cell()</a>, qui
  119. permet de spécifier quels bords de la cellule doivent être tracés. Dans le cas présent, on
  120. désire les bords gauches (<code>L</code>) et droits (<code>R</code>). Reste le problème du trait
  121. horizontal final pour refermer le tableau. Il y a deux possibilités : soit tester dans la
  122. boucle si on se trouve sur la dernière ligne, auquel cas on utilise <code>LRB</code> pour le
  123. paramètre <code>border</code> ; soit, comme c'est fait ici, ajouter le trait une fois la boucle
  124. terminée.
  125. <br>
  126. <br>
  127. Le troisième tableau est semblable au deuxième mais utilise des couleurs. Il suffit pour cela
  128. de préciser les couleurs de fond, de texte et de trait souhaitées. L'alternance de couleur
  129. pour les lignes est obtenue en utilisant des cellules à fond alternativement coloré et
  130. transparent.
  131. </body>
  132. </html>