123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- <?php
- //HTML2PDF par Clément Lavoillotte
- //ac.lavoillotte@noos.fr
- //webmaster@streetpc.tk
- //http://www.streetpc.tk
- require('fpdf.php');
- // fonction hex2dec
- // retourne un tableau associatif (clés : R,V,B) à
- // partir d'un code html de couleur hexa (ex : #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 -> millimètre en 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 pdfHtml extends FPDF
- {
- //variables du parseur html
- var $B;
- var $I;
- var $U;
- var $HREF;
- var $fontList;
- var $issetfont;
- var $issetcolor;
- function PDF_HTML($orientation='P', $unit='mm', $format='A4')
- {
- //Appel au constructeur parent
- $this->FPDF($orientation,$unit,$format);
- //Initialisation
- $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)
- {
- //Parseur HTML
- $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)
- {
- //Texte
- if($this->HREF)
- $this->PutLink($this->HREF,$e);
- else
- $this->Write(5,stripslashes(txtentities($e)));
- }
- else
- {
- //Balise
- if($e[0]=='/')
- $this->CloseTag(strtoupper(substr($e,1)));
- else
- {
- //Extraction des attributs
- $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)
- {
- //Balise ouvrante
- 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)
- {
- //Balise fermante
- 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)
- {
- //Modifie le style et sélectionne la police correspondante
- $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)
- {
- //Place un hyperlien
- $this->SetTextColor(0,0,255);
- $this->SetStyle('U',true);
- $this->Write(5,$txt,$URL);
- $this->SetStyle('U',false);
- $this->SetTextColor(0);
- }
- }//fin classe
- ?>
|