155 lines
12 KiB
HTML
155 lines
12 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
|
<title>Link e testo scorrevole</title>
|
|
<link type="text/css" rel="stylesheet" href="../fpdf.css">
|
|
</head>
|
|
<body>
|
|
<h1>Link e testo scorrevole</h1>
|
|
Questo tutorial spiega come inserire link (interni ed esterni) e mostrare una nuova modalità di
|
|
scrittura. Contiene anche un parser HTML minimale.
|
|
<div class="source">
|
|
<pre><code><?php
|
|
<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
|
|
|
|
class </span>PDF <span class="kw">extends </span>FPDF
|
|
<span class="kw">{
|
|
protected </span>$B <span class="kw">= </span>0<span class="kw">;
|
|
protected </span>$I <span class="kw">= </span>0<span class="kw">;
|
|
protected </span>$U <span class="kw">= </span>0<span class="kw">;
|
|
protected </span>$HREF <span class="kw">= </span><span class="str">''</span><span class="kw">;
|
|
|
|
function </span>WriteHTML<span class="kw">(</span>$html<span class="kw">)
|
|
{
|
|
</span><span class="cmt">// HTML parser
|
|
</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">);
|
|
</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">);
|
|
foreach(</span>$a <span class="kw">as </span>$i<span class="kw">=></span>$e<span class="kw">)
|
|
{
|
|
if(</span>$i<span class="kw">%</span>2<span class="kw">==</span>0<span class="kw">)
|
|
{
|
|
</span><span class="cmt">// Text
|
|
</span><span class="kw">if(</span>$<span class="kw">this-></span>HREF<span class="kw">)
|
|
</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">);
|
|
else
|
|
</span>$<span class="kw">this-></span>Write<span class="kw">(</span>5<span class="kw">,</span>$e<span class="kw">);
|
|
}
|
|
else
|
|
{
|
|
</span><span class="cmt">// Tag
|
|
</span><span class="kw">if(</span>$e<span class="kw">[</span>0<span class="kw">]==</span><span class="str">'/'</span><span class="kw">)
|
|
</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">)));
|
|
else
|
|
{
|
|
</span><span class="cmt">// Extract attributes
|
|
</span>$a2 <span class="kw">= </span>explode<span class="kw">(</span><span class="str">' '</span><span class="kw">,</span>$e<span class="kw">);
|
|
</span>$tag <span class="kw">= </span>strtoupper<span class="kw">(</span>array_shift<span class="kw">(</span>$a2<span class="kw">));
|
|
</span>$attr <span class="kw">= array();
|
|
foreach(</span>$a2 <span class="kw">as </span>$v<span class="kw">)
|
|
{
|
|
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">))
|
|
</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">];
|
|
}
|
|
</span>$<span class="kw">this-></span>OpenTag<span class="kw">(</span>$tag<span class="kw">,</span>$attr<span class="kw">);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function </span>OpenTag<span class="kw">(</span>$tag<span class="kw">, </span>$attr<span class="kw">)
|
|
{
|
|
</span><span class="cmt">// Opening tag
|
|
</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">)
|
|
</span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>true<span class="kw">);
|
|
if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
|
|
</span>$<span class="kw">this-></span>HREF <span class="kw">= </span>$attr<span class="kw">[</span><span class="str">'HREF'</span><span class="kw">];
|
|
if(</span>$tag<span class="kw">==</span><span class="str">'BR'</span><span class="kw">)
|
|
</span>$<span class="kw">this-></span>Ln<span class="kw">(</span>5<span class="kw">);
|
|
}
|
|
|
|
function </span>CloseTag<span class="kw">(</span>$tag<span class="kw">)
|
|
{
|
|
</span><span class="cmt">// Closing tag
|
|
</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">)
|
|
</span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>false<span class="kw">);
|
|
if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
|
|
</span>$<span class="kw">this-></span>HREF <span class="kw">= </span><span class="str">''</span><span class="kw">;
|
|
}
|
|
|
|
function </span>SetStyle<span class="kw">(</span>$tag<span class="kw">, </span>$enable<span class="kw">)
|
|
{
|
|
</span><span class="cmt">// Modify style and select corresponding font
|
|
</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">);
|
|
</span>$style <span class="kw">= </span><span class="str">''</span><span class="kw">;
|
|
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">)
|
|
{
|
|
if(</span>$<span class="kw">this-></span>$s<span class="kw">></span>0<span class="kw">)
|
|
</span>$style <span class="kw">.= </span>$s<span class="kw">;
|
|
}
|
|
</span>$<span class="kw">this-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span>$style<span class="kw">);
|
|
}
|
|
|
|
function </span>PutLink<span class="kw">(</span>$URL<span class="kw">, </span>$txt<span class="kw">)
|
|
{
|
|
</span><span class="cmt">// Put a hyperlink
|
|
</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">);
|
|
</span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>true<span class="kw">);
|
|
</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">);
|
|
</span>$<span class="kw">this-></span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>false<span class="kw">);
|
|
</span>$<span class="kw">this-></span>SetTextColor<span class="kw">(</span>0<span class="kw">);
|
|
}
|
|
}
|
|
|
|
</span>$html <span class="kw">= </span><span class="str">'You can now easily print text mixing different styles: <b>bold</b>, <i>italic</i>,
|
|
<u>underlined</u>, or <b><i><u>all at once</u></i></b>!<br><br>You can also insert links on
|
|
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">;
|
|
|
|
</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
|
|
</span><span class="cmt">// First page
|
|
</span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
|
</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">);
|
|
</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">);
|
|
</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">);
|
|
</span>$link <span class="kw">= </span>$pdf<span class="kw">-></span>AddLink<span class="kw">();
|
|
</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">);
|
|
</span>$pdf<span class="kw">-></span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
|
|
</span><span class="cmt">// Second page
|
|
</span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
|
|
</span>$pdf<span class="kw">-></span>SetLink<span class="kw">(</span>$link<span class="kw">);
|
|
</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">);
|
|
</span>$pdf<span class="kw">-></span>SetLeftMargin<span class="kw">(</span>45<span class="kw">);
|
|
</span>$pdf<span class="kw">-></span>SetFontSize<span class="kw">(</span>14<span class="kw">);
|
|
</span>$pdf<span class="kw">-></span>WriteHTML<span class="kw">(</span>$html<span class="kw">);
|
|
</span>$pdf<span class="kw">-></span>Output<span class="kw">();
|
|
</span>?></code></pre>
|
|
</div>
|
|
<p class='demo'><a href='tuto6.php' target='_blank' class='demo'>[Demo]</a></p>
|
|
Il nuovo metodo per mostrare il testo è <a href='../doc/write.htm'>Write()</a>. È molto simile a <a href='../doc/multicell.htm'>MultiCell()</a>; le differenze sono:
|
|
<ul>
|
|
<li>La fine della linea è al margine destro ed il testo inizia al margine a sinistra</li>
|
|
<li>The current position moves at the end of the text</li>
|
|
</ul>
|
|
Quindi per permettere di scrivere del testo, alterare lo stile del carattere, quindi continuare dal punto esatto
|
|
dove eravamo rimasti. Purtroppo però non si può giustificare il testo.
|
|
<br>
|
|
<br>
|
|
Il metodo è utilizzato sulla prima pagina per inserire un link che punti alla seconda pagina. L'inizio
|
|
della frase è scritto in testo normale, quindi si cambia in sottolineato e si conclude. Il link
|
|
è creato con <a href='../doc/addlink.htm'>AddLink()</a>, che ritorna un identificatore per il link. L'identificatore è
|
|
passato come terzo parametro di Write(). Una volta che la seconda pagina è creata, usiamo <a href='../doc/setlink.htm'>SetLink()</a> per
|
|
creare un link che punti all'inizio della pagina corrente.
|
|
<br>
|
|
<br>
|
|
Quindi inseriamo un'immagine con un link esterno su di essa. Un link esterno è semplicemente un URL. È passato come
|
|
ultimo parametro di <a href='../doc/image.htm'>Image()</a>.
|
|
<br>
|
|
<br>
|
|
Concludendo, il margine sinistro si sposta dopo l'immagine con <a href='../doc/setleftmargin.htm'>SetLeftMargin()</a> e del testo è mostrato in
|
|
formato HTML. È utilizzato un parser HTML molto semplice per questo scopo, basato su espressioni regolari.
|
|
I tag riconosciuti sono <b>, <i>, <u>, <a> e <br>; gli altri sono
|
|
ignorati. Il parser fa anche uso del metodo Write(). Un link esterno è inserito allo stesso modo di
|
|
uno interno (terzo parametro di Write()). Notare che anche <a href='../doc/cell.htm'>Cell()</a> permette di inserire link.
|
|
</body>
|
|
</html>
|