Write HTML 2

This is an enhancement of the WriteHTML() method from tutorial 6


Author: Clément Lavoillotte
License: FPDF


This is an enhancement of the WriteHTML() method from tutorial 6. Supported tags are:

<b> <i> <u> (as well as <strong> and <em>)
<a href="http://www.fpdf.org/...">
<p> <br> (<tr> and <blockquote> treated like <br>)
<img src="..." width="..." [height="..."]>
<font face="..." color="...">


<?php //HTML2PDF by Clément Lavoillotte //ac.lavoillotte@noos.fr //webmaster@streetpc.tk //http://www.streetpc.tk require('fpdf.php'); //function hex2dec //returns an associative array (keys: R, G, B) from //a hex html code (e.g. #3FE5AA) function hex2dec($couleur = "#000000"){ $R = substr($couleur, 1, 2); $rouge = hexdec($R); $V = substr($couleur, 3, 2); $vert = hexdec($V); $B = substr($couleur, 5, 2); $bleu = hexdec($B); $tbl_couleur = array(); $tbl_couleur['R']=$rouge; $tbl_couleur['V']=$vert; $tbl_couleur['B']=$bleu; return $tbl_couleur; } //conversion pixel -> millimeter at 72 dpi function px2mm($px){ return $px*25.4/72; } function txtentities($html){ $trans = get_html_translation_table(HTML_ENTITIES); $trans = array_flip($trans); return strtr($html, $trans); } //////////////////////////////////// class PDF_HTML extends FPDF { //variables of html parser protected $B; protected $I; protected $U; protected $HREF; protected $fontList; protected $issetfont; protected $issetcolor; function __construct($orientation='P', $unit='mm', $format='A4') { //Call parent constructor parent::__construct($orientation, $unit, $format); //Initialization $this->B=0; $this->I=0; $this->U=0; $this->HREF=''; $this->fontlist=array('arial', 'times', 'courier', 'helvetica', 'symbol'); $this->issetfont=false; $this->issetcolor=false; } function WriteHTML($html) { //HTML parser $html=strip_tags($html, "<b><u><i><a><img><p><br><strong><em><font><tr><blockquote>"); //supprime tous les tags sauf ceux reconnus $html=str_replace("\n", ' ', $html); //remplace retour à la ligne par un espace $a=preg_split('/<(.*)>/U', $html, -1, PREG_SPLIT_DELIM_CAPTURE); //éclate la chaîne avec les balises foreach($a as $i=>$e) { if($i%2==0) { //Text if($this->HREF) $this->PutLink($this->HREF, $e); else $this->Write(5, stripslashes(txtentities($e))); } else { //Tag if($e[0]=='/') $this->CloseTag(strtoupper(substr($e, 1))); else { //Extract attributes $a2=explode(' ', $e); $tag=strtoupper(array_shift($a2)); $attr=array(); foreach($a2 as $v) { if(preg_match('/([^=]*)=["\']?([^"\']*)/', $v, $a3)) $attr[strtoupper($a3[1])]=$a3[2]; } $this->OpenTag($tag, $attr); } } } } function OpenTag($tag, $attr) { //Opening tag switch($tag){ case 'STRONG': $this->SetStyle('B', true); break; case 'EM': $this->SetStyle('I', true); break; case 'B': case 'I': case 'U': $this->SetStyle($tag, true); break; case 'A': $this->HREF=$attr['HREF']; break; case 'IMG': if(isset($attr['SRC']) && (isset($attr['WIDTH']) || isset($attr['HEIGHT']))) { if(!isset($attr['WIDTH'])) $attr['WIDTH'] = 0; if(!isset($attr['HEIGHT'])) $attr['HEIGHT'] = 0; $this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT'])); } break; case 'TR': case 'BLOCKQUOTE': case 'BR': $this->Ln(5); break; case 'P': $this->Ln(10); break; case 'FONT': if (isset($attr['COLOR']) && $attr['COLOR']!='') { $coul=hex2dec($attr['COLOR']); $this->SetTextColor($coul['R'], $coul['V'], $coul['B']); $this->issetcolor=true; } if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist)) { $this->SetFont(strtolower($attr['FACE'])); $this->issetfont=true; } break; } } function CloseTag($tag) { //Closing tag if($tag=='STRONG') $tag='B'; if($tag=='EM') $tag='I'; if($tag=='B' || $tag=='I' || $tag=='U') $this->SetStyle($tag, false); if($tag=='A') $this->HREF=''; if($tag=='FONT'){ if ($this->issetcolor==true) { $this->SetTextColor(0); } if ($this->issetfont) { $this->SetFont('arial'); $this->issetfont=false; } } } function SetStyle($tag, $enable) { //Modify style and select corresponding font $this->$tag+=($enable ? 1 : -1); $style=''; foreach(array('B', 'I', 'U') as $s) { if($this->$s>0) $style.=$s; } $this->SetFont('', $style); } function PutLink($URL, $txt) { //Put a hyperlink $this->SetTextColor(0, 0, 255); $this->SetStyle('U', true); $this->Write(5, $txt, $URL); $this->SetStyle('U', false); $this->SetTextColor(0); } }//end of class ?>


This example allows to enter some HTML code in a form and generate the corresponding PDF:
<?php require('html2pdf.php'); if(isset($_POST['text'])) { $pdf=new PDF_HTML(); $pdf->SetFont('Arial', '', 12); $pdf->AddPage(); $pdf->WriteHTML($_POST['text']); $pdf->Output(); exit; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>HTML2PDF</title> <style type="text/css"> input, textarea { font-family: lucida console; font-size: 9pt; border: 1px solid #B0B0B0; } body { font-family: lucida console; font-size: 9pt; background-color: #F0F0F0; } </style> </head> <body> <h1>HTML2PDF</h1> <div style="border: 1px solid black"> Supported tags are the following: <ul type="square"> <li>&lt;br&gt; and &lt;p&gt;</li> <li>&lt;b&gt;, &lt;i&gt; and &lt;u&gt;</li> <li>&lt;img&gt; (src and width (or height) are mandatory)</li> <li>&lt;a&gt; (href is mandatory)</li> <li>&lt;font&gt;: possible attributes are <ul> <li>color: hex color code</li> <li>face: available fonts are: arial, times, courier, helvetica, symbol</li> </ul> </li> </ul> To display these tags without interpreting them, use &amp;lt; and &amp;gt; </div><br> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" target="_blank"> Content:<br> <textarea name="text" cols="80" rows="15"></textarea><br><br> <input type="submit" value="Generate PDF"> </form> </body> </html>
With this code:

<font face="times">The </font><b><font color="#7070D0">FPDF</font></b><font face="times"> logo:</font>
<img src="logo.png" width="104">

you get this result.




http://www.fpdf.org/en/script/script42.php, zuletzt abgerufen 02.10.2016 15:11