Problème superposition images FPDF

Résolu/Fermé
zoubila44 Messages postés 110 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 24 juillet 2015 - 27 mai 2015 à 12:46
zoubila44 Messages postés 110 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 24 juillet 2015 - 29 mai 2015 à 09:51
Bonjour tout le monde,

J'ai un souci, voila j'ai une chaine de caractère ($chaine) contenant soit du texte, soit une image ( sous forme <img src=''>), le problème c'est que je ne sais ce qu'il y'a dans $chaine, donc j'ai reussi a gerer le truc pour generer mes images et mon text,

seul problème les images apparaissent en haut du pdf et non entre les phrase de text

je ne peux pas mettre des coordonnées en dure dans le code parce que je traite plusieurs chaines de caractère et je les affiches les unes a la suite des autres

et les images ( dans l'exemple j'en ai deux) se superposent dans le coin supérieur gauche de mon pdf

Je voudrait:
http://hpics.li/3336b71 => pdf que j'obtient
http://hpics.li/3ea613e => pdf que j'aimerais obtenir

Voici mon code:

<?php 

require('FPDF/fpdf.php');

$chaine="Salut tout le monde, je vais vous montrer les images de guitare et de basse tout d'abord voici la <span>guitare</span> <img src='images/guitare.png' width='50' height='50'/> ensuite va venir la <span> basse </span> <img src='images/basse.jpg' width='50' height='50' />, à toi de jouer";

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetXY('','');
$pdf->SetFont('Helvetica','B',16);
$pdf->SetFillColor(6,211,248);
$pdf->SetTextColor(243,11,180);
$pdf->Cell(0,10,'INSTRUMENTS',1,1,'C',TRUE);

$pdf->Ln(10);
$pdf->SetFillColor(20,150,50);
$pdf->SetTextColor(255,255,255);
$pdf->Cell(0,10,'voici differents instruments',0,1,'L',TRUE);
$pdf->Ln(40);

if (strpos($chaine, '<img ')!=FALSE) {

$tab = filtreQuest($chaine);


foreach ($tab as $key => $value) {

if (is_array($value)==TRUE) {

$pdf->Image($value['src'],'','',$value['width'],$value['height']);
$pdf->Ln(5);

}
else{

$pdf->MultiCell(0,10,$value,1,1,'L',FALSE);
$pdf->Ln(5);

}

}

}else{
$pdf->MultiCell(0,10,$chaine,1,1,'L',FALSE);
$pdf->Ln(5);
}

$pdf->Output();


function filtreQuest($chaine){
$chaine=str_replace('<span>', '', $chaine);
$chaine=str_replace('</span>', '', $chaine);
$chaine=str_replace('à', 'a', $chaine);
$chaine=str_replace('é', 'e', $chaine);

if(strpos($chaine, '<img')){
$chaine=str_replace('<', '|', $chaine);
$chaine=str_replace('/>', '|', $chaine);
$tab=explode('|', $chaine);
foreach ($tab as $key => $value) {

if (strpos($value, 'img ')===0) {
$text[$key]=f_get_info_image($value);
} else{
$text[$key]=$value;
}

}

}
return $text;
}


function f_get_info_image($imgBalise){

$res=array('src'=>'','height'=>'', 'width'=>'');

$imgBalise = str_replace('"', '|', $imgBalise);
$imgBalise = str_replace("'", '|', $imgBalise);

$pos_src=strpos($imgBalise, 'src=|');
if($pos_src===false){}else{
$endPosSrc=strpos($imgBalise, "|",$pos_src+5);
$res["src"]=substr($imgBalise, $pos_src+5, $endPosSrc-($pos_src+5));
}
$pos_h=strpos($imgBalise, 'height=|');
if($pos_h===false){}else{
$endPosH=strpos($imgBalise, "|",$pos_h+8);
$res["height"]=substr($imgBalise, $pos_h+8, $endPosH-($pos_h+8));
}
$pos_w=strpos($imgBalise, 'width=|');
if($pos_w===false){}else{
$endPosW=strpos($imgBalise, "|",$pos_w+7);
$res["width"]=substr($imgBalise, $pos_w+7, $endPosW-($pos_w+7));
}

return $res;
}



?>


J'ai pris une chaine de cractère bidon avec des images bidons mais cela donne un aperçu de ce que j'ai à traiter

J'ai peur de ne pas mettre fait comprendre, ne pas hésitez à demander plus d'explications

Merci d'avance

2 réponses


        $image = $value['src'];
 $largeur_img = $value['width'];
 $hauteur_img = $value['height'];
        $pdf->Cell( 40, ($hauteur_img+3), $pdf->Image($image,$pdf->GetX(), $pdf->GetY(), $largeur_img,$hauteur_img), 0, 1, 'L', false );
   $pdf->Ln(1);


http://s000.tinyupload.com/?file_id=48922656315373566330

http://www.fpdf.org/fr/doc/cell.htm

là je pense que tu dois jouer avec les options pour trouver la bonne proportion avec le texte et les images...

Ou simplement utiliser un plugin du genre write_html
http://www.fpdf.org/fr/script/script42.php

qui permet d'envoyer ton html dans le pdf.

Bonne continuation.
2
zoubila44 Messages postés 110 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 24 juillet 2015 6
29 mai 2015 à 09:51
Merci beaucoup ça marche de mon coter aussi !

Merci du temps passer en recherche et bonne continuation aussi
0
J'ai corrigé, avec la solution trouvé ici : http://stackoverflow.com/questions/3471441/inserting-an-image-with-php-and-fpdf

j'ai testé ton code et ça fonctionne chez moi.

j'ai fait quelques changements par rapport à ton code...
foreach ($tab as $key => $value) {

    if (is_array($value)) {

       //
        $image = $value['src'];
 
        $pdf->Cell( 40, 40, $pdf->Image($image, $pdf->GetX(), $pdf->GetY(), 33.78), 0, 0, 'L', false );
      //$pdf->Image($value['src'],0,10,$value['width'],$value['height']);
      $pdf->Ln(20);

    }
    else{

      $pdf->MultiCell(0,10,$value,1,1,'L',FALSE);

      $pdf->Ln(5);

    }

  }
0
zoubila44 Messages postés 110 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 24 juillet 2015 6
28 mai 2015 à 12:43
Salut Kalo et merci de ta réponse !

Je n'ai pas eu le temps de tester je fais ca des que possible, mais dans la ligne
 $pdf->Cell( 40, 40, $pdf->Image($image, $pdf->GetX(), $pdf->GetY(), 33.78), 0, 0, 'L', false );


le 33.78 correspond a quoi ?

car dans mes images html je recupere la source/height/width et je dois les utilisé :s
dans ce que je vois je n'ai pas l'impression que cela se passe ainsi

je t'en dis plus des que je l'ai tester

merci encore de ta réponse
0
Kalo > zoubila44 Messages postés 110 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 24 juillet 2015
28 mai 2015 à 21:42
http://www.fpdf.org/fr/doc/image.htm

33.78 c'est la largeur (que j'ai copié du site précédemment cité)...
0
zoubila44 Messages postés 110 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 24 juillet 2015 6
28 mai 2015 à 14:05
Code tester
les images se mettent en dessous du texte

http://hpics.li/5009fc8

voila les petites modifs que j'avais trouver j'arrive à un pdf a peu près similaire au tiens

<?php 

require('FPDF/fpdf.php');

$chaine="Salut tout le monde, je vais vous montrer les images de guitare et de basse tout d'abord voici la <span>guitare</span> <img src='images/guitare.png' width='50' height='50'/> ensuite va venir la <span> basse </span> <img src='images/basse.jpg' width='50' height='50' />, à toi de jouer";

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetXY('','');
$pdf->SetFont('Helvetica','B',16);
$pdf->SetFillColor(6,211,248);
$pdf->SetTextColor(243,11,180);
$pdf->Cell(0,10,'INSTRUMENTS',1,1,'C',TRUE);

$pdf->Ln(10);
$pdf->SetFillColor(20,150,50);
$pdf->SetTextColor(255,255,255);
$pdf->Cell(0,10,'voici differents instruments',0,1,'L',TRUE);
$pdf->Ln(40);

if (strpos($chaine, '<img ')!=FALSE) {

$tab = filtreQuest($chaine);


foreach ($tab as $key => $value) {
$x=$pdf->GetX();
$y=$pdf->GetY();
if (is_array($value)==TRUE) {

$pdf->Image($value['src'],$x,$y+10,$value['width'],$value['height']);
$pdf->Ln($value['height']);


}
else{
$pdf->SetXY($x,$y);
$pdf->MultiCell(0,10,$value,1,1,'L',FALSE);
$pdf->Ln(5);

}

}


}else{
$pdf->SetXY($x,$y);
$pdf->MultiCell(0,10,$chaine,1,1,'L',FALSE);
$pdf->Ln(5);
}

$pdf->Output();


function filtreQuest($chaine){
$chaine=str_replace('<span>', '', $chaine);
$chaine=str_replace('</span>', '', $chaine);
$chaine=str_replace('à', 'a', $chaine);
$chaine=str_replace('é', 'e', $chaine);

if(strpos($chaine, '<img')){
$chaine=str_replace('<', '|', $chaine);
$chaine=str_replace('/>', '|', $chaine);
$tab=explode('|', $chaine);
foreach ($tab as $key => $value) {

if (strpos($value, 'img ')===0) {
$text[$key]=f_get_info_image($value);
} else{
$text[$key]=$value;
}

}

}
return $text;
}


function f_get_info_image($imgBalise){

$res=array('src'=>'','height'=>'', 'width'=>'');

$imgBalise = str_replace('"', '|', $imgBalise);
$imgBalise = str_replace("'", '|', $imgBalise);

$pos_src=strpos($imgBalise, 'src=|');
if($pos_src===false){}else{
$endPosSrc=strpos($imgBalise, "|",$pos_src+5);
$res["src"]=substr($imgBalise, $pos_src+5, $endPosSrc-($pos_src+5));
}
$pos_h=strpos($imgBalise, 'height=|');
if($pos_h===false){}else{
$endPosH=strpos($imgBalise, "|",$pos_h+8);
$res["height"]=substr($imgBalise, $pos_h+8, $endPosH-($pos_h+8));
}
$pos_w=strpos($imgBalise, 'width=|');
if($pos_w===false){}else{
$endPosW=strpos($imgBalise, "|",$pos_w+7);
$res["width"]=substr($imgBalise, $pos_w+7, $endPosW-($pos_w+7));
}

return $res;
}



?>
0