[2] | 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>Links and flowing text</title>
|
---|
| 6 | <link type="text/css" rel="stylesheet" href="../fpdf.css">
|
---|
| 7 | </head>
|
---|
| 8 | <body>
|
---|
| 9 | <h1>Links and flowing text</h1>
|
---|
| 10 | This tutorial explains how to insert links (internal and external) and shows a new text writing
|
---|
| 11 | mode. It also contains a basic HTML parser.
|
---|
| 12 | <div class="source">
|
---|
| 13 | <pre><code><?php
|
---|
| 14 | <span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
|
---|
| 15 |
|
---|
| 16 | class </span>PDF <span class="kw">extends </span>FPDF
|
---|
| 17 | <span class="kw">{
|
---|
| 18 | var </span>$B<span class="kw">;
|
---|
| 19 | var </span>$I<span class="kw">;
|
---|
| 20 | var </span>$U<span class="kw">;
|
---|
| 21 | var </span>$HREF<span class="kw">;
|
---|
| 22 |
|
---|
| 23 | function </span>PDF<span class="kw">(</span>$orientation<span class="kw">=</span><span class="str">'P'</span><span class="kw">,</span>$unit<span class="kw">=</span><span class="str">'mm'</span><span class="kw">,</span>$format<span class="kw">=</span><span class="str">'A4'</span><span class="kw">)
|
---|
| 24 | {
|
---|
| 25 | </span><span class="cmt">//Call parent constructor
|
---|
| 26 | </span>$<span class="kw">this-></span>FPDF<span class="kw">(</span>$orientation<span class="kw">,</span>$unit<span class="kw">,</span>$format<span class="kw">);
|
---|
| 27 | </span><span class="cmt">//Initialization
|
---|
| 28 | </span>$<span class="kw">this-></span>B<span class="kw">=</span>0<span class="kw">;
|
---|
| 29 | </span>$<span class="kw">this-></span>I<span class="kw">=</span>0<span class="kw">;
|
---|
| 30 | </span>$<span class="kw">this-></span>U<span class="kw">=</span>0<span class="kw">;
|
---|
| 31 | </span>$<span class="kw">this-></span>HREF<span class="kw">=</span><span class="str">''</span><span class="kw">;
|
---|
| 32 | }
|
---|
| 33 |
|
---|
| 34 | function </span>WriteHTML<span class="kw">(</span>$html<span class="kw">)
|
---|
| 35 | {
|
---|
| 36 | </span><span class="cmt">//HTML parser
|
---|
| 37 | </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">);
|
---|
| 38 | </span>$a<span class="kw">=</span>preg_split<span class="kw">(</span><span class="str">'/<(.*)>/U'</span><span class="kw">,</span>$html<span class="kw">,-</span>1<span class="kw">,</span>PREG_SPLIT_DELIM_CAPTURE<span class="kw">);
|
---|
| 39 | foreach(</span>$a <span class="kw">as </span>$i<span class="kw">=></span>$e<span class="kw">)
|
---|
| 40 | {
|
---|
| 41 | if(</span>$i<span class="kw">%</span>2<span class="kw">==</span>0<span class="kw">)
|
---|
| 42 | {
|
---|
| 43 | </span><span class="cmt">//Text
|
---|
| 44 | </span><span class="kw">if(</span>$<span class="kw">this-></span>HREF<span class="kw">)
|
---|
| 45 | </span>$<span class="kw">this-></span>PutLink<span class="kw">(</span>$<span class="kw">this-></span>HREF<span class="kw">,</span>$e<span class="kw">);
|
---|
| 46 | else
|
---|
| 47 | </span>$<span class="kw">this-></span>Write<span class="kw">(</span>5<span class="kw">,</span>$e<span class="kw">);
|
---|
| 48 | }
|
---|
| 49 | else
|
---|
| 50 | {
|
---|
| 51 | </span><span class="cmt">//Tag
|
---|
| 52 | </span><span class="kw">if(</span>$e<span class="kw">{</span>0<span class="kw">}==</span><span class="str">'/'</span><span class="kw">)
|
---|
| 53 | </span>$<span class="kw">this-></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">)));
|
---|
| 54 | else
|
---|
| 55 | {
|
---|
| 56 | </span><span class="cmt">//Extract attributes
|
---|
| 57 | </span>$a2<span class="kw">=</span>explode<span class="kw">(</span><span class="str">' '</span><span class="kw">,</span>$e<span class="kw">);
|
---|
| 58 | </span>$tag<span class="kw">=</span>strtoupper<span class="kw">(</span>array_shift<span class="kw">(</span>$a2<span class="kw">));
|
---|
| 59 | </span>$attr<span class="kw">=array();
|
---|
| 60 | foreach(</span>$a2 <span class="kw">as </span>$v<span class="kw">)
|
---|
| 61 | {
|
---|
| 62 | 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">))
|
---|
| 63 | </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">];
|
---|
| 64 | }
|
---|
| 65 | </span>$<span class="kw">this-></span>OpenTag<span class="kw">(</span>$tag<span class="kw">,</span>$attr<span class="kw">);
|
---|
| 66 | }
|
---|
| 67 | }
|
---|
| 68 | }
|
---|
| 69 | }
|
---|
| 70 |
|
---|
| 71 | function </span>OpenTag<span class="kw">(</span>$tag<span class="kw">,</span>$attr<span class="kw">)
|
---|
| 72 | {
|
---|
| 73 | </span><span class="cmt">//Opening tag
|
---|
| 74 | </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">or </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">or </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">)
|
---|
| 75 | </span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>true<span class="kw">);
|
---|
| 76 | if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
|
---|
| 77 | </span>$<span class="kw">this-></span>HREF<span class="kw">=</span>$attr<span class="kw">[</span><span class="str">'HREF'</span><span class="kw">];
|
---|
| 78 | if(</span>$tag<span class="kw">==</span><span class="str">'BR'</span><span class="kw">)
|
---|
| 79 | </span>$<span class="kw">this-></span>Ln<span class="kw">(</span>5<span class="kw">);
|
---|
| 80 | }
|
---|
| 81 |
|
---|
| 82 | function </span>CloseTag<span class="kw">(</span>$tag<span class="kw">)
|
---|
| 83 | {
|
---|
| 84 | </span><span class="cmt">//Closing tag
|
---|
| 85 | </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">or </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">or </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">)
|
---|
| 86 | </span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>false<span class="kw">);
|
---|
| 87 | if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
|
---|
| 88 | </span>$<span class="kw">this-></span>HREF<span class="kw">=</span><span class="str">''</span><span class="kw">;
|
---|
| 89 | }
|
---|
| 90 |
|
---|
| 91 | function </span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>$enable<span class="kw">)
|
---|
| 92 | {
|
---|
| 93 | </span><span class="cmt">//Modify style and select corresponding font
|
---|
| 94 | </span>$<span class="kw">this-></span>$tag<span class="kw">+=(</span>$enable <span class="kw">? </span>1 <span class="kw">: -</span>1<span class="kw">);
|
---|
| 95 | </span>$style<span class="kw">=</span><span class="str">''</span><span class="kw">;
|
---|
| 96 | 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">)
|
---|
| 97 | if(</span>$<span class="kw">this-></span>$s<span class="kw">></span>0<span class="kw">)
|
---|
| 98 | </span>$style<span class="kw">.=</span>$s<span class="kw">;
|
---|
| 99 | </span>$<span class="kw">this-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span>$style<span class="kw">);
|
---|
| 100 | }
|
---|
| 101 |
|
---|
| 102 | function </span>PutLink<span class="kw">(</span>$URL<span class="kw">,</span>$txt<span class="kw">)
|
---|
| 103 | {
|
---|
| 104 | </span><span class="cmt">//Put a hyperlink
|
---|
| 105 | </span>$<span class="kw">this-></span>SetTextColor<span class="kw">(</span>0<span class="kw">,</span>0<span class="kw">,</span>255<span class="kw">);
|
---|
| 106 | </span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>true<span class="kw">);
|
---|
| 107 | </span>$<span class="kw">this-></span>Write<span class="kw">(</span>5<span class="kw">,</span>$txt<span class="kw">,</span>$URL<span class="kw">);
|
---|
| 108 | </span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>false<span class="kw">);
|
---|
| 109 | </span>$<span class="kw">this-></span>SetTextColor<span class="kw">(</span>0<span class="kw">);
|
---|
| 110 | }
|
---|
| 111 | }
|
---|
| 112 |
|
---|
| 113 | </span>$html<span class="kw">=</span><span class="str">'You can now easily print text mixing different styles: <b>bold</b>, <i>italic</i>,
|
---|
| 114 | <u>underlined</u>, or <b><i><u>all at once</u></i></b>!<br><br>You can also insert links on
|
---|
| 115 | text, such as <a href="http://www.fpdf.org">www.fpdf.org</a>, or on an image: click on the logo.'</span><span class="kw">;
|
---|
| 116 |
|
---|
| 117 | </span>$pdf<span class="kw">=new </span>PDF<span class="kw">();
|
---|
| 118 | </span><span class="cmt">//First page
|
---|
| 119 | </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
---|
| 120 | </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>20<span class="kw">);
|
---|
| 121 | </span>$pdf<span class="kw">-></span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">'To find out what\'s new in this tutorial, click '</span><span class="kw">);
|
---|
| 122 | </span>$pdf<span class="kw">-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'U'</span><span class="kw">);
|
---|
| 123 | </span>$link<span class="kw">=</span>$pdf<span class="kw">-></span>AddLink<span class="kw">();
|
---|
| 124 | </span>$pdf<span class="kw">-></span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">'here'</span><span class="kw">,</span>$link<span class="kw">);
|
---|
| 125 | </span>$pdf<span class="kw">-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
|
---|
| 126 | </span><span class="cmt">//Second page
|
---|
| 127 | </span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
---|
| 128 | </span>$pdf<span class="kw">-></span>SetLink<span class="kw">(</span>$link<span class="kw">);
|
---|
| 129 | </span>$pdf<span class="kw">-></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">);
|
---|
| 130 | </span>$pdf<span class="kw">-></span>SetLeftMargin<span class="kw">(</span>45<span class="kw">);
|
---|
| 131 | </span>$pdf<span class="kw">-></span>SetFontSize<span class="kw">(</span>14<span class="kw">);
|
---|
| 132 | </span>$pdf<span class="kw">-></span>WriteHTML<span class="kw">(</span>$html<span class="kw">);
|
---|
| 133 | </span>$pdf<span class="kw">-></span>Output<span class="kw">();
|
---|
| 134 | </span>?></code></pre>
|
---|
| 135 | </div>
|
---|
| 136 | <p class='demo'><a href='tuto6.php' target='_blank' class='demo'>[Demo]</a></p>
|
---|
| 137 | The new method to print text is <a href='../doc/write.htm'>Write()</a>. It is very close to <a href='../doc/multicell.htm'>MultiCell()</a>; the differences are:
|
---|
| 138 | <ul>
|
---|
| 139 | <li>The end of line is at the right margin and the next line begins at the left one</li>
|
---|
| 140 | <li>The current position moves at the end of the text</li>
|
---|
| 141 | </ul>
|
---|
| 142 | So it allows to write a chunk of text, alter the font style, then continue from the exact
|
---|
| 143 | place we left it. On the other hand, you cannot justify it.
|
---|
| 144 | <br>
|
---|
| 145 | <br>
|
---|
| 146 | The method is used on the first page to put a link pointing to the second one. The beginning of
|
---|
| 147 | the sentence is written in regular style, then we switch to underline and finish it. The link
|
---|
| 148 | is created with <a href='../doc/addlink.htm'>AddLink()</a>, which returns a link identifier. The identifier is
|
---|
| 149 | passed as third parameter of Write(). Once the second page is created, we use <a href='../doc/setlink.htm'>SetLink()</a> to
|
---|
| 150 | make the link point to the beginning of the current page.
|
---|
| 151 | <br>
|
---|
| 152 | <br>
|
---|
| 153 | Then we put an image with a link on it. An external link points to an URL (HTTP, mailto...).
|
---|
| 154 | The URL is simply passed as last parameter of <a href='../doc/image.htm'>Image()</a>.
|
---|
| 155 | <br>
|
---|
| 156 | <br>
|
---|
| 157 | Finally, the left margin is moved after the image with <a href='../doc/setleftmargin.htm'>SetLeftMargin()</a> and some text in
|
---|
| 158 | HTML format is output. A very simple HTML parser is used for this, based on regular expressions.
|
---|
| 159 | Recognized tags are <b>, <i>, <u>, <a> and <br>; the others are
|
---|
| 160 | ignored. The parser also makes use of the Write() method. An external link is put the same way as
|
---|
| 161 | an internal one (third parameter of Write()). Note that <a href='../doc/cell.htm'>Cell()</a> also allows to put links.
|
---|
| 162 | </body>
|
---|
| 163 | </html>
|
---|