tuto6.htm 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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>Enlaces y texto flotante</title>
  6. <link type="text/css" rel="stylesheet" href="../fpdf.css">
  7. </head>
  8. <body>
  9. <h1>Enlaces y texto flotante</h1>
  10. Este tutorial explica cómo incluir enlaces (internos y externos) y muestra una nueva
  11. manera de imprimir texto. También incluye un intérprete rudimentario de HTML.
  12. <div class="source">
  13. <pre><code>&lt;?php
  14. <span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
  15. class </span>PDF <span class="kw">extends </span>FPDF
  16. <span class="kw">{
  17. protected </span>$B <span class="kw">= </span>0<span class="kw">;
  18. protected </span>$I <span class="kw">= </span>0<span class="kw">;
  19. protected </span>$U <span class="kw">= </span>0<span class="kw">;
  20. protected </span>$HREF <span class="kw">= </span><span class="str">''</span><span class="kw">;
  21. function </span>WriteHTML<span class="kw">(</span>$html<span class="kw">)
  22. {
  23. </span><span class="cmt">// Intérprete de HTML
  24. </span>$html <span class="kw">= </span>str_replace<span class="kw">(</span><span class="str">"\n"</span><span class="kw">,</span><span class="str">' '</span><span class="kw">,</span>$html<span class="kw">);
  25. </span>$a <span class="kw">= </span>preg_split<span class="kw">(</span><span class="str">'/&lt;(.*)&gt;/U'</span><span class="kw">,</span>$html<span class="kw">,-</span>1<span class="kw">,</span>PREG_SPLIT_DELIM_CAPTURE<span class="kw">);
  26. foreach(</span>$a <span class="kw">as </span>$i<span class="kw">=&gt;</span>$e<span class="kw">)
  27. {
  28. if(</span>$i<span class="kw">%</span>2<span class="kw">==</span>0<span class="kw">)
  29. {
  30. </span><span class="cmt">// Text
  31. </span><span class="kw">if(</span>$<span class="kw">this-&gt;</span>HREF<span class="kw">)
  32. </span>$<span class="kw">this-&gt;</span>PutLink<span class="kw">(</span>$<span class="kw">this-&gt;</span>HREF<span class="kw">,</span>$e<span class="kw">);
  33. else
  34. </span>$<span class="kw">this-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span>$e<span class="kw">);
  35. }
  36. else
  37. {
  38. </span><span class="cmt">// Etiqueta
  39. </span><span class="kw">if(</span>$e<span class="kw">[</span>0<span class="kw">]==</span><span class="str">'/'</span><span class="kw">)
  40. </span>$<span class="kw">this-&gt;</span>CloseTag<span class="kw">(</span>strtoupper<span class="kw">(</span>substr<span class="kw">(</span>$e<span class="kw">,</span>1<span class="kw">)));
  41. else
  42. {
  43. </span><span class="cmt">// Extraer atributos
  44. </span>$a2 <span class="kw">= </span>explode<span class="kw">(</span><span class="str">' '</span><span class="kw">,</span>$e<span class="kw">);
  45. </span>$tag <span class="kw">= </span>strtoupper<span class="kw">(</span>array_shift<span class="kw">(</span>$a2<span class="kw">));
  46. </span>$attr <span class="kw">= array();
  47. foreach(</span>$a2 <span class="kw">as </span>$v<span class="kw">)
  48. {
  49. if(</span>preg_match<span class="kw">(</span><span class="str">'/([^=]*)=["\']?([^"\']*)/'</span><span class="kw">,</span>$v<span class="kw">,</span>$a3<span class="kw">))
  50. </span>$attr<span class="kw">[</span>strtoupper<span class="kw">(</span>$a3<span class="kw">[</span>1<span class="kw">])] = </span>$a3<span class="kw">[</span>2<span class="kw">];
  51. }
  52. </span>$<span class="kw">this-&gt;</span>OpenTag<span class="kw">(</span>$tag<span class="kw">,</span>$attr<span class="kw">);
  53. }
  54. }
  55. }
  56. }
  57. function </span>OpenTag<span class="kw">(</span>$tag<span class="kw">, </span>$attr<span class="kw">)
  58. {
  59. </span><span class="cmt">// Etiqueta de apertura
  60. </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">)
  61. </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>true<span class="kw">);
  62. if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
  63. </span>$<span class="kw">this-&gt;</span>HREF <span class="kw">= </span>$attr<span class="kw">[</span><span class="str">'HREF'</span><span class="kw">];
  64. if(</span>$tag<span class="kw">==</span><span class="str">'BR'</span><span class="kw">)
  65. </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>5<span class="kw">);
  66. }
  67. function </span>CloseTag<span class="kw">(</span>$tag<span class="kw">)
  68. {
  69. </span><span class="cmt">// Etiqueta de cierre
  70. </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">)
  71. </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>false<span class="kw">);
  72. if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
  73. </span>$<span class="kw">this-&gt;</span>HREF <span class="kw">= </span><span class="str">''</span><span class="kw">;
  74. }
  75. function </span>SetStyle<span class="kw">(</span>$tag<span class="kw">, </span>$enable<span class="kw">)
  76. {
  77. </span><span class="cmt">// Modificar estilo y escoger la fuente correspondiente
  78. </span>$<span class="kw">this-&gt;</span>$tag <span class="kw">+= (</span>$enable <span class="kw">? </span>1 <span class="kw">: -</span>1<span class="kw">);
  79. </span>$style <span class="kw">= </span><span class="str">''</span><span class="kw">;
  80. foreach(array(</span><span class="str">'B'</span><span class="kw">, </span><span class="str">'I'</span><span class="kw">, </span><span class="str">'U'</span><span class="kw">) as </span>$s<span class="kw">)
  81. {
  82. if(</span>$<span class="kw">this-&gt;</span>$s<span class="kw">&gt;</span>0<span class="kw">)
  83. </span>$style <span class="kw">.= </span>$s<span class="kw">;
  84. }
  85. </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span>$style<span class="kw">);
  86. }
  87. function </span>PutLink<span class="kw">(</span>$URL<span class="kw">, </span>$txt<span class="kw">)
  88. {
  89. </span><span class="cmt">// Escribir un hiper-enlace
  90. </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">,</span>0<span class="kw">,</span>255<span class="kw">);
  91. </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>true<span class="kw">);
  92. </span>$<span class="kw">this-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span>$txt<span class="kw">,</span>$URL<span class="kw">);
  93. </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>false<span class="kw">);
  94. </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">);
  95. }
  96. }
  97. </span>$html <span class="kw">= </span><span class="str">'Ahora puede imprimir fácilmente texto mezclando diferentes estilos: &lt;b&gt;negrita&lt;/b&gt;, &lt;i&gt;itálica&lt;/i&gt;,
  98. &lt;u&gt;subrayado&lt;/u&gt;, o ¡ &lt;b&gt;&lt;i&gt;&lt;u&gt;todos a la vez&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;!&lt;br&gt;&lt;br&gt;También puede incluir enlaces en el
  99. texto, como &lt;a href="http://www.fpdf.org"&gt;www.fpdf.org&lt;/a&gt;, o en una imagen: pulse en el logotipo.'</span><span class="kw">;
  100. </span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
  101. </span><span class="cmt">// Primera página
  102. </span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
  103. </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>20<span class="kw">);
  104. </span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">'Para saber qué hay de nuevo en este tutorial, pulse '</span><span class="kw">);
  105. </span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'U'</span><span class="kw">);
  106. </span>$link <span class="kw">= </span>$pdf<span class="kw">-&gt;</span>AddLink<span class="kw">();
  107. </span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">'aquí'</span><span class="kw">,</span>$link<span class="kw">);
  108. </span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
  109. </span><span class="cmt">// Segunda página
  110. </span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
  111. </span>$pdf<span class="kw">-&gt;</span>SetLink<span class="kw">(</span>$link<span class="kw">);
  112. </span>$pdf<span class="kw">-&gt;</span>Image<span class="kw">(</span><span class="str">'logo.png'</span><span class="kw">,</span>10<span class="kw">,</span>12<span class="kw">,</span>30<span class="kw">,</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'http://www.fpdf.org'</span><span class="kw">);
  113. </span>$pdf<span class="kw">-&gt;</span>SetLeftMargin<span class="kw">(</span>45<span class="kw">);
  114. </span>$pdf<span class="kw">-&gt;</span>SetFontSize<span class="kw">(</span>14<span class="kw">);
  115. </span>$pdf<span class="kw">-&gt;</span>WriteHTML<span class="kw">(</span>$html<span class="kw">);
  116. </span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
  117. </span>?&gt;</code></pre>
  118. </div>
  119. <p class='demo'><a href='tuto6.php' target='_blank' class='demo'>[Demo]</a></p>
  120. El nuevo método para imprimir texto es <a href='../doc/write.htm'>Write()</a>.
  121. Se parece mucho a <a href='../doc/multicell.htm'>MultiCell()</a>; las diferencias son:
  122. <ul>
  123. <li>El límite de la línea está en el margen derecho y la siguiente línea
  124. empieza en el izquierdo</li>
  125. <li>La posición actual se establece al final del texto</li>
  126. </ul>
  127. Así que le permite escribir un texto, alterar el estilo de la fuente, y continuar
  128. en el punto exacto donde lo dejó. Sin embargo, no puede justificar el texto simultáneamente
  129. a derecha y a izquierda.
  130. <br>
  131. <br>
  132. Este método se usa en la primera página para añadir un enlace que apunta a la segunda página.
  133. El principio de la frase se escribe en un estilo normal, después cambiamos a subrayado y la
  134. terminamos. El enlace se crea con <a href='../doc/addlink.htm'>AddLink()</a>, que devuelve el identificador del enlace.
  135. El identificador se pasa como tercer parámetro a Write(). Una vez que la segunda página se
  136. ha creado, usamos <a href='../doc/setlink.htm'>SetLink()</a> para hacer que el enlace apunte al principio de la
  137. página actual.
  138. <br>
  139. <br>
  140. Deespués ponemos una imagen con un enlace en ella. Un enlace externo apunta a una URL.
  141. La URL se pasa como el último parámetro de <a href='../doc/image.htm'>Image()</a>.
  142. <br>
  143. <br>
  144. Finalmente, el margen izquierdo se modifica después de la imagen con <a href='../doc/setleftmargin.htm'>SetLeftMargin()</a> y se
  145. escribe texto en formato HTML. Se utiliza un intérprete HTML para esto, basado en les expresiones
  146. regulares. Las etiquetas reconocidas son &lt;b&gt;, &lt;i&gt;, &lt;u&gt;, &lt;a&gt; y &lt;br&gt;;
  147. las demás se ignoran. El intérprete también usa el método Write(). Se pone un enlace externo de la
  148. misma manera que uno interno (como tercer parámetro de Write()). Observe que <a href='../doc/cell.htm'>Cell()</a> también
  149. permite incluir enlaces.
  150. </body>
  151. </html>