colonymech / docs / www / colonyscout / internal / fpdf16 / tutorial / tuto6.htm @ f59acf11
History | View | Annotate | Download (12.2 KB)
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">|| </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">) |
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">|| </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">) |
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 |
{ |
98 |
if(</span>$<span class="kw">this-></span>$s<span class="kw">></span>0<span class="kw">) |
99 |
</span>$style<span class="kw">.=</span>$s<span class="kw">; |
100 |
} |
101 |
</span>$<span class="kw">this-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span>$style<span class="kw">); |
102 |
} |
103 |
|
104 |
function </span>PutLink<span class="kw">(</span>$URL<span class="kw">,</span>$txt<span class="kw">) |
105 |
{ |
106 |
</span><span class="cmt">//Put a hyperlink |
107 |
</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">); |
108 |
</span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>true<span class="kw">); |
109 |
</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">); |
110 |
</span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>false<span class="kw">); |
111 |
</span>$<span class="kw">this-></span>SetTextColor<span class="kw">(</span>0<span class="kw">); |
112 |
} |
113 |
} |
114 |
|
115 |
</span>$html<span class="kw">=</span><span class="str">'You can now easily print text mixing different styles: <b>bold</b>, <i>italic</i>, |
116 |
<u>underlined</u>, or <b><i><u>all at once</u></i></b>!<br><br>You can also insert links on |
117 |
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">; |
118 |
|
119 |
</span>$pdf<span class="kw">=new </span>PDF<span class="kw">(); |
120 |
</span><span class="cmt">//First page |
121 |
</span>$pdf<span class="kw">-></span>AddPage<span class="kw">(); |
122 |
</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">); |
123 |
</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">); |
124 |
</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">); |
125 |
</span>$link<span class="kw">=</span>$pdf<span class="kw">-></span>AddLink<span class="kw">(); |
126 |
</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">); |
127 |
</span>$pdf<span class="kw">-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">); |
128 |
</span><span class="cmt">//Second page |
129 |
</span>$pdf<span class="kw">-></span>AddPage<span class="kw">(); |
130 |
</span>$pdf<span class="kw">-></span>SetLink<span class="kw">(</span>$link<span class="kw">); |
131 |
</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">); |
132 |
</span>$pdf<span class="kw">-></span>SetLeftMargin<span class="kw">(</span>45<span class="kw">); |
133 |
</span>$pdf<span class="kw">-></span>SetFontSize<span class="kw">(</span>14<span class="kw">); |
134 |
</span>$pdf<span class="kw">-></span>WriteHTML<span class="kw">(</span>$html<span class="kw">); |
135 |
</span>$pdf<span class="kw">-></span>Output<span class="kw">(); |
136 |
</span>?></code></pre> |
137 |
</div>
|
138 |
<p class='demo'><a href='tuto6.php' target='_blank' class='demo'>[Demo]</a></p> |
139 |
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: |
140 |
<ul>
|
141 |
<li>The end of line is at the right margin and the next line begins at the left one</li> |
142 |
<li>The current position moves at the end of the text</li> |
143 |
</ul>
|
144 |
So it allows to write a chunk of text, alter the font style, then continue from the exact |
145 |
place we left it. On the other hand, you cannot justify it. |
146 |
<br>
|
147 |
<br>
|
148 |
The method is used on the first page to put a link pointing to the second one. The beginning of |
149 |
the sentence is written in regular style, then we switch to underline and finish it. The link |
150 |
is created with <a href='../doc/addlink.htm'>AddLink()</a>, which returns a link identifier. The identifier is |
151 |
passed as third parameter of Write(). Once the second page is created, we use <a href='../doc/setlink.htm'>SetLink()</a> to |
152 |
make the link point to the beginning of the current page. |
153 |
<br>
|
154 |
<br>
|
155 |
Then we put an image with a link on it. An external link points to an URL (HTTP, mailto...). |
156 |
The URL is simply passed as last parameter of <a href='../doc/image.htm'>Image()</a>. |
157 |
<br>
|
158 |
<br>
|
159 |
Finally, the left margin is moved after the image with <a href='../doc/setleftmargin.htm'>SetLeftMargin()</a> and some text in |
160 |
HTML format is output. A very simple HTML parser is used for this, based on regular expressions. |
161 |
Recognized tags are <b>, <i>, <u>, <a> and <br>; the others are |
162 |
ignored. The parser also makes use of the Write() method. An external link is put the same way as |
163 |
an internal one (third parameter of Write()). Note that <a href='../doc/cell.htm'>Cell()</a> also allows to put links. |
164 |
</body>
|
165 |
</html>
|