Générer un pdf à partir de code HTML

Messages postés
624
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
14 décembre 2009
- - Dernière réponse : cs_putch
Messages postés
624
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
14 décembre 2009
- 7 déc. 2005 à 08:51
Voila mon souci, je suis en train de faire une fonction qui génére un fichier pdf à partir de code HTML passé en paramètre :



function pdf($html) {

...

}



j'utilise la classe FPDF mais par contre je ne sais par où débuter pour transformer le contenu de $html en du texte affichable dans un pdf.



$html contient entre autres balises de passage à la ligne, tableau, ..., et ca je ne sait pas trop comment m'en occuper ...



merci de votre aide :)
Afficher la suite 

7 réponses

Messages postés
172
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
19 juin 2009
0
Merci
Je t'invite à consulter le tutoriel sur http://www.fpdf.org/

Jonathan
Commenter la réponse de cs_tweeder
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
0
Merci
Ouep exact, FPDF a sa propre syntaxe !

ex :

$pdf->SetFont('Arial','B',16);

$pdf->Image("monImage.jpg",12,10,24.4,16);

$pdf->Cell(0,16,"Voici le texte",1,2,'C');

$pdf->SetFont('Arial','BU',12);

etc ....



tu ne pourras donc pas directement mettre ton code HTML, va falloir tout reformatter !

allé a+++
Commenter la réponse de cs_djagger
Messages postés
624
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
14 décembre 2009
1
0
Merci
c'est la justement que je bloque !



j'en suis à la lecture des balises et donc

qu'est ce que je dois faire si c'est un TABLE, un TR ou un TD et de meme pour les fins de ses balises ...

function OpenTag($tag,$attr)


{

//Balise ouvrante

if($tag= ='B' or $tag=='I' or $tag=='U')

$this->SetStyle($tag,true);

if($tag=='A')

$this->HREF=$attr['HREF'];

if($tag=='BR')

$this->Ln(4);

if($tag=='IMG')

$this->PutLink($attr['SRC'],'[ Image ]');

if($tag=='FONT')

{

switch(strtolower($attr['COLOR']))

{


case "red":
$this->SetTextColor(255,0,0);
break;


case "darkred":
$this->SetTextColor(139,0,0); break;


case "orange":
$this->SetTextColor(255,165,0); break;


case "brown":
$this->SetTextColor(165,42,42); break;


case "yellow":
$this->SetTextColor(255,255,0); break;


case "green":
$this->SetTextColor(0,128,0); break;


case "olive":
$this->SetTextColor(128,128,0); break;


case "cyan":
$this->SetTextColor(0,255,255); break;


case "blue":
$this->SetTextColor(0,0,255); break;


case
"darkblue": $this->SetTextColor(0,0,139); break;


case "indigo":
$this->SetTextColor(75,0,130); break;


case "violet":
$this->SetTextColor(238,130,238); break;


case "white":
$this->SetTextColor(0,0,0); break;


case "black":
$this->SetTextColor(0,0,0); break;


case
"cadetblue": $this->SetTextColor(95,158,160);
break;


case "coral":
$this->SetTextColor(255,127,80); break;


case "crimson":
$this->SetTextColor(220,20,60); break;


case "tomato":
$this->SetTextColor(255,99,71); break;


case
"seagreen": $this->SetTextColor(46,139,87); break;


case
"darkorchid": $this->SetTextColor(153,50,204);
break;


case
"chocolate": $this->SetTextColor(210,105,30);
break;


case
"deepskyblue": $this->SetTextColor(0,191,255);
break;


case "gold":
$this->SetTextColor(255,215,0); break;


case "grey":
$this->SetTextColor(128,128,128); break;


case
"midnightblue":$this->SetTextColor(25,25,112); break;


case
"darkgreen": $this->SetTextColor(0,100,0); break;


default:
$this->SetTextColor(0);

}

switch(strtolower($attr['SIZE']))

{


case '7':
$this->SetFont('Arial','',6); break;


case '9':
$this->SetFont('Arial','',7); break;


case '12':
$this->SetFont('Arial','',8); break;


case '18':
$this->SetFont('Arial','',10); break;


case '24':
$this->SetFont('Arial','',12); break;


default:
$this->SetFont('Arial','',9);

}

}

if($tag=='TD')

{

???

}

}



function CloseTag($tag)

{

//Balise fermante

if($tag =='B' or $tag=='I' or $tag=='U')

$this->SetStyle($tag,false);

if($tag=='A')

$this->HREF='';

if($tag=='FONTC')

{

$this->SetTextColor(0);

}

if($tag=='FONTS')

{

$this->SetFont('Arial','',8);

}

}
Commenter la réponse de cs_putch
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
0
Merci
ah bah là faut matter la doc ! :p
Commenter la réponse de cs_djagger
Messages postés
624
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
14 décembre 2009
1
0
Merci
c'est ce que je fais mais pour les tableaux je cale grave !

je vois bien que chaque "case" sera une cellule => avec la methode Cell() mais pour construire ca ...
Commenter la réponse de cs_putch
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
0
Merci
$pdf->Cell(100,6,"AAA",'TLR');

$pdf->Cell(45,6,"BBB",'TLR');

$pdf->Cell(45,6,"CCC",'TLR');

$pdf->Cell(v,6,"DDD",'TLR');

$pdf->ln(4);

$pdf->Cell(45,6,"AAA",'LR');


$pdf->Cell(45,6,"BBB",'LR');


$pdf->Cell(45,6,"CCC",'LR');


$pdf->Cell(45,6,"DDD",'LR');

$pdf->ln(4);

$pdf->Cell(45,6,"AAA",'BLR');


$pdf->Cell(45,6,"BBB",'BLR');


$pdf->Cell(45,6,"CCC",'BLR');


$pdf->Cell(45,6,"DDD",'BLR');

$pdf->ln(4);

45: largeur de la colonne

6 : hauteur de la colonne

T B L R : top bottom left right pour la bordure !



c'est pas plus compliqué ...
Commenter la réponse de cs_djagger
Messages postés
624
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
14 décembre 2009
1
0
Merci
euh merci mais ca repond pas à ma question.... (peut etre c'est moi qui m'explique mal...)

mon probleme etais de generer un pdf en ANALYSANT le code HTML passé en paramètre



bon je crois avoir la solution, voila le mon bout de code qui fonctionne à première vue



function WriteHTML($html)

{

//Parseur HTML


$html=strip_tags($html,"
<tr><hr><td><tr><table>");
//enleve les balises non reconnus


$html=str_replace("\n",'',$html);

//remplace les
retours chariots par un espace


$html=str_replace("\t",'',$html);

//remplace les
retours chariots par un espace


$a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
//explose la chaine

foreach($a as $i=>$e)

{

if($i%2==0)

{

//Text

if($this->HREF)



$this->PutLink($this->HREF,$e);

elseif($this->tdbegin) {



if(trim($e)!='' and $e!="&nbsp;") {




$this->Cell($this->tdwidth,$this->tdheight,$e,$this->tableborder,'',$this->tdalign,$this->tdbgcolor);

}



elseif($e=="&nbsp;") {




$this->Cell($this->tdwidth,$this->tdheight,'',$this->tableborder,'',$this->tdalign,$this->tdbgcolor);

}

}

else



$this->Write(5,stripslashes($e));

}

else

{

//Balise

if($e{0}=='/')



$this->CloseTag(strtoupper(substr($e,1)));

else

{

//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)

{

switch($tag){

case 'TABLE': // TABLE-BEGIN


if( isset($attr['BORDER']))
$this->tableborder=$attr['BORDER'];

else $this->tableborder=0;

break;

case 'TR': //TR-BEGIN

break;

case 'TD': // TD-BEGIN


if( isset($attr['WIDTH']))
$this->tdwidth=($attr['WIDTH']/4);


else $this->tdwidth=40; // par
defaut longueur à 6


if( isset($attr['HEIGHT']))
$this->tdheight=($attr['HEIGHT']/6);


else $this->tdheight=6; // par
defaut hauteur à 6

if( isset($attr['ALIGN'])) {



$align=$attr['ALIGN'];



if($align=="left") $this->tdalign="L";



if($align=="center") $this->tdalign="C";



if($align=="right") $this->tdalign="R";

}


else $this->tdalign="L"; //
par defaut alignement à gauche

if( isset($attr['BGCOLOR'])) {



$coul=hex2dec($attr['BGCOLOR']);




$this->SetFillColor($coul['R'],$coul['G'],$coul['B']);



$this->tdbgcolor=true;

}

$this->tdbegin=true;

break;

}

}



function CloseTag($tag)

{

if($tag=='TD') { // TD-END

$this->tdbegin=false;

$this->tdwidth=0;

$this->tdheight=0;

$this->tdalign="L";

$this->tdbgcolor=false;

}

if($tag=='TR') { // TR-END

$this->Ln();

}

if($tag=='TABLE') { // TABLE-END

$this->tableborder=0;

}

}
Commenter la réponse de cs_putch