// // This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. // // To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/1.0/ // // or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. // // Francais (brouillon): http://creativecommons.org/projects/international/fr/translated-license // ////////////////////////////////////////////////////////////////////////////////////////////////////// // Création d'un fichier PDF contenant tous écrits d'un journal // v0.1.2 if(!is_object($journal)) die("Indisponible"); define('FPDF_FONTPATH','export/font/'); require('../classes/fpdf.php'); require_once('../classes/ecrits.php'); require_once('../classes/fonctions.php'); $ecrits = new ecrits(); 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 PDF extends FPDF { //variables du parseur html var $B; var $I; var $U; var $HREF; var $fontList; var $issetfont; var $issetcolor; function PDF($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; } ////////////////////////////////////// //Parser html function WriteHTML($html) { //Parseur HTML $html=strip_tags($html,"


"); //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(ereg('^([^=]*)=["\']?([^"\']*)["\']?$',$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']) and (isset($attr['WIDTH']) or 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']) and $attr['COLOR']!='') { $coul=hex2dec($attr['COLOR']); $this->SetTextColor($coul['R'],$coul['V'],$coul['B']); $this->issetcolor=true; } if (isset($attr['FACE']) and 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' or $tag=='I' or $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; } } if($tag=='P') $this->Ln(10); } 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); } function Footer() { $this->SetY(-15); $this->SetFont('Arial','',9); $this->SetTextColor(128); $bas = stripslashes($this->journal[titre]).' - '.$this->journal[url].' - Page '.$this->PageNo().'/{nb}'; $this->Cell(0,10,$bas,0,0,'C'); } function TitreEcrit($titre,$date) { $this->SetFont('Arial','B',16); $this->Cell(0,6,stripslashes($titre),B,1,'L',0); $this->Ln(0); $this->SetFont('Courier','',11); $this->Cell(0,5,"Le ".date_fr("j F Y à G\hi",$date),0,1,'R',0); $this->Ln(0); } function CorpsEcrit($txt) { $this->SetFont('Times','',12); //$this->MultiCell(0,5,$txt); $this->WriteHtml($txt); $this->Ln(10); } function AjouterEcrit($titre,$texte,$date) { $this->TitreEcrit($titre,$date); $this->CorpsEcrit($texte); } function Sommaire() { $this->AddPage(); $this->SetFont('Arial','B',28); $this->Cell(0,6,$this->journal['titre'],0,1,'C',0); $this->Ln(); $this->SetFont('Courier','',12); $this->Cell(0,6,$this->journal['url'],'T',1,'C',0); $this->Ln(); $som = $this->journal['sommaire']; foreach($som as $ecrit) { $this->SetFont('Arial','B',11); $this->Cell(60,6,date_fr("j F Y à G\hi",$ecrit['date']),0,0,'L',0); $this->SetFont('Arial','',11); $this->Cell(0,6,stripslashes($ecrit['titre']),0,1,'L',0); $this->Ln(0); } $this->AddPage(); } } $pdf = new PDF(); $id = $journal->courant['id']; $journal->courant['url'] = id2url($id); $titre = $journal->courant['titre']; $liste_mois = $ecrits->liste_mois($id); $lst = array(); foreach($liste_mois as $mois) { $liste[$mois] = $ecrits->liste($id,$mois,TRUE,TRUE); $lst = array_merge($lst,$liste[$mois]); } $pdf->journal = $journal->courant; $pdf->journal['sommaire'] = $lst; //foreach($lst as $l) print_r($l); $pdf->AliasNbPages(); $pdf->SetTitle($titre); $pdf->SetAuthor($id); $pdf->Sommaire(); foreach($liste as $mois) { foreach($mois as $ecrit) { $rec = $ecrit; $pdf->AjouterEcrit($rec['titre'],$rec['texte_html'],$rec['date']); } } if(!empty($saveToFile)) $pdf->Output($saveToFile); else die("Unknow method"); ?>