probleme de valeur de variable

probleme de valeur de variable - PHP - Programmation

Marsh Posté le 10-01-2005 à 15:01:07    

Voila j'ai deux cas :
 
1er cas

Code :
  1. $img=AlignImg("temp/$logo.jpg",85,$_GET['X_logo'],$_GET['Y_logo'],$_GET['L_logo'],15,5,5,$_GET['pos_logo']);
  2. $pos_x=Convert2points($img['pos_x']);
  3. echo $pos_x;
  4. $pdf->addJpegFromFile("temp/$logo.jpg",$pos_x,Convert2points(InserseOrdonneesImg(55,$img['pos_y'],$img['height'])),Convert2points($img['width']),Convert2points($img['height']),100);


 
le "echo $pos_x;" me retourne une valeur calculée par la fonction Convert2points(), cette valeur me parait tout à fait cohérente.
... la valeur du $pos_x est dans les arguments de ma fonction "addJpegFromFile" qui correspond à la position de l'image en abcisses "x"
 
... le probleme c'est que quelquesoit la valeur de $pos_x... l'image apparait au centre de la page.
 
 
 
Deuxieme cas :

Code :
  1. $img=AlignImg("temp/$logo.jpg",85,$_GET['X_logo'],$_GET['Y_logo'],$_GET['L_logo'],15,5,5,$_GET['pos_logo']);
  2. //$pos_x=Convert2points($img['pos_x']);  
  3. echo $pos_x;
  4. $pdf->addJpegFromFile("temp/$logo.jpg",15,Convert2points(InserseOrdonneesImg(55,$img['pos_y'],$img['height'])),Convert2points($img['width']),Convert2points($img['height']),100);


 
$pos_x est desactivé...  
j'ai remplacé son argument dans la fonction "addJpegFromFile" par une valeur numérique "15"...
 
dans ce cas l'image est placée à 15 points du bord gauche de la page... comme je l'ai indiqué dans les arguments...
 
 
 
en résumé.. je comprends pas pourquoi une valeur numérique passe sans probleme... et qu'une variable ne passe pas
 
où est le bug ?

Reply

Marsh Posté le 10-01-2005 à 15:01:07   

Reply

Marsh Posté le 10-01-2005 à 15:04:25    

convert2points te renvoi bien un numrique et pas une chaine de caractere ??


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 10-01-2005 à 15:07:27    

j'ai deja pensé au probleme en faisant ça :
 

Code :
  1. $img=AlignImg("temp/$logo.jpg",85,$_GET['X_logo'],$_GET['Y_logo'],$_GET['L_logo'],15,5,5,$_GET['pos_logo']);
  2. $imgpos_x=Convert2points($img['pos_x']);
  3. settype($imgpos_x,double);
  4. $imgpos_y=Convert2points(InserseOrdonneesImg(55,$img['pos_y'],$img['height']));
  5. settype($imgpos_y,double);
  6. $pdf->addJpegFromFile("temp/$logo.jpg",$imgpos_x,$imgpos_y,Convert2points($img['width']),Convert2points($img['height']),100);
  7. }


 
mais j'ai toujours le même probleme... et pour la position "y" j'ai pas de probleme par contre... c là que je trouve que c'est incoherent !

Reply

Marsh Posté le 10-01-2005 à 15:44:24    

pour info :
 
addJpegFromFile
void addJpegFromFile( mixed $img, mixed $x, mixed $y, [mixed $w = 0], [mixed $h = 0])
 
(PS : j'ai retiré le "100" à la fin.. ça change rien)


Message édité par freed102 le 10-01-2005 à 15:48:04
Reply

Marsh Posté le 10-01-2005 à 15:50:07    

freed102 a écrit :

pour info :
 
addJpegFromFile
void addJpegFromFile( mixed $img, mixed $x, mixed $y, [mixed $w = 0], [mixed $h = 0])
 
(PS : j'ai retiré le "100" à la fin.. ça change rien)


 
autre exemple :
 

Code :
  1. $imgpos_x=25;
  2. $imgpos_y=30;
  3. $pdf->addJpegFromFile("temp/$logo.jpg",$imgpos_x,$imgpos_y,Convert2points($img['width']),Convert2points($img['height']));


 
là ça marche si je mets une valeur directe à $imgpos_x et $imgpos_y
.. c bizarre !

Reply

Marsh Posté le 10-01-2005 à 16:21:41    

Salut
 
Et ça ça donne koi :

Code :
  1. var_dump($pos_x;);

Reply

Marsh Posté le 10-01-2005 à 16:30:33    

ratibus a écrit :

Salut
 
Et ça ça donne koi :

Code :
  1. var_dump($pos_x;);



 
j'ai fait ça :

Code :
  1. if(!empty($_GET['logo']))
  2. {
  3.  if($_GET['ext']!="jpg" )
  4.  {
  5.  Convert2Jpeg("$logo.$ext" );
  6.  }
  7. $img=AlignImg("temp/$logo.jpg",85,$_GET['X_logo'],$_GET['Y_logo'],$_GET['L_logo'],15,5,5,$_GET['pos_logo']);
  8. $img['pos_x']=Convert2points($img['pos_x']);
  9. $img['pos_y']=Convert2points(InserseOrdonneesImg(55,$img['pos_y'],$img['height']));
  10. var_dump($img['pos_x']);
  11. $pdf->addJpegFromFile("temp/$logo.jpg",$img['pos_x'],$img['pos_y'],Convert2points($img['width']),Convert2points($img['height']));
  12. }


 
et ça me donne ça :
 
float(63.7755102041)


Message édité par freed102 le 10-01-2005 à 16:31:22
Reply

Marsh Posté le 10-01-2005 à 16:34:26    

pour GET['X_logo']=10
il me retourne : float(28.3446712018)
 
(c'est normal... 1mm = 0.3528 points)

Reply

Marsh Posté le 10-01-2005 à 16:35:23    

c incroyable ce bug !! lol ! j'y suis depuis vendredi soir !

Reply

Marsh Posté le 10-01-2005 à 16:44:37    

Et si tu cast en int ?

Reply

Marsh Posté le 10-01-2005 à 16:44:37   

Reply

Marsh Posté le 10-01-2005 à 17:07:25    

bah j'ai deja essayé... marche pas mieux et le int ça me zappe la virgule


Message édité par freed102 le 10-01-2005 à 17:07:57
Reply

Marsh Posté le 10-01-2005 à 17:53:29    

... euh personne n'a une corde ?

Reply

Marsh Posté le 10-01-2005 à 18:11:26    

Reply

Marsh Posté le 10-01-2005 à 18:22:37    

Sielfried a écrit :

et intval donne quoi ?


 

Code :
  1. if(!empty($_GET['logo']))
  2. {
  3.  if($_GET['ext']!="jpg" )
  4.  {
  5.  Convert2Jpeg("$logo.$ext" );
  6.  }
  7. $img=AlignImg("temp/$logo.jpg",85,$_GET['X_logo'],$_GET['Y_logo'],$_GET['L_logo'],15,5,5,$_GET['pos_logo']);
  8. $img['pos_x']=Convert2points($img['pos_x']);
  9. $img['pos_y']=Convert2points(InserseOrdonneesImg(55,$img['pos_y'],$img['height']));
  10. $pdf->addJpegFromFile("temp/$logo.jpg",intval ($img['pos_x']),intval ($img['pos_y']),Convert2points($img['width']),Convert2points($img['height']));
  11. }


 
... Marche toujours pas ! :(

Reply

Marsh Posté le 10-01-2005 à 18:42:00    

freed102 a écrit :

Code :
  1. if(!empty($_GET['logo']))
  2. {
  3.  if($_GET['ext']!="jpg" )
  4.  {
  5.  Convert2Jpeg("$logo.$ext" );
  6.  }
  7. $img=AlignImg("temp/$logo.jpg",85,$_GET['X_logo'],$_GET['Y_logo'],$_GET['L_logo'],15,5,5,$_GET['pos_logo']);
  8. $img['pos_x']=Convert2points($img['pos_x']);
  9. $img['pos_y']=Convert2points(InserseOrdonneesImg(55,$img['pos_y'],$img['height']));
  10. $pdf->addJpegFromFile("temp/$logo.jpg",intval ($img['pos_x']),intval ($img['pos_y']),Convert2points($img['width']),Convert2points($img['height']));
  11. }


 
... Marche toujours pas ! :(


 
 
C'est insensé ce bug !!!  :pt1cable:  :pt1cable:  :pt1cable:  
 

Code :
  1. if(!empty($_GET['logo']))
  2. {
  3.  if($_GET['ext']!="jpg" )
  4.  {
  5.  Convert2Jpeg("$logo.$ext" );
  6.  }
  7. $img=AlignImg("temp/$logo.jpg",85,$_GET['X_logo'],$_GET['Y_logo'],$_GET['L_logo'],15,5,5,$_GET['pos_logo']);
  8. $img['pos_x']=Convert2points($img['pos_x']);
  9. $img['pos_y']=Convert2points(InserseOrdonneesImg(55,$img['pos_y'],$img['height']));
  10. echo floatval ($img['pos_x']);
  11. $pdf->addJpegFromFile("temp/$logo.jpg",floatval ($img['pos_x']),floatval ($img['pos_y']),Convert2points($img['width']),Convert2points($img['height']));
  12. }


 
echo floatval ($img['pos_x']); <= il me retourne 28.3446712018
 
ça me parait pourtant super normal !!!!
 
si je tape ça :
 
$pdf->addJpegFromFile("temp/$logo.jpg",28.3446712018,floatval ($img['pos_y']),Convert2points($img['width']),Convert2points($img['height']));
 
ça marche parfaitement bien !!! ya quand même un truc louche !!! :??:  :??:  :??:

Reply

Marsh Posté le 10-01-2005 à 18:44:22    

isnumeric te renvoi bien true ??


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 10-01-2005 à 18:45:41    

echo is_numeric($img['pos_x']);
 
affiche "1"

Reply

Marsh Posté le 10-01-2005 à 18:49:14    

voici la fonction "addJpegFromFile"dans la class cpdf :
 

Code :
  1. /**
  2. * add a JPEG image into the document, from a file
  3. */
  4. function addJpegFromFile($img,$x,$y,$w=0,$h=0){
  5.   // attempt to add a jpeg image straight from a file, using no GD commands
  6.   // note that this function is unable to operate on a remote file.
  7.   if (!file_exists($img)){
  8.     return;
  9.   }
  10.   $tmp=getimagesize($img);
  11.   $imageWidth=$tmp[0];
  12.   $imageHeight=$tmp[1];
  13.   if (isset($tmp['channels'])){
  14.     $channels = $tmp['channels'];
  15.   } else {
  16.     $channels = 3;
  17.   }
  18.   if ($w<=0 && $h<=0){
  19.     $w=$imageWidth;
  20.   }
  21.   if ($w==0){
  22.     $w=$h/$imageHeight*$imageWidth;
  23.   }
  24.   if ($h==0){
  25.     $h=$w*$imageHeight/$imageWidth;
  26.   }
  27.   $fp=fopen($img,'rb');
  28.   $tmp = get_magic_quotes_runtime();
  29.   set_magic_quotes_runtime(0);
  30.   $data = fread($fp,filesize($img));
  31.   set_magic_quotes_runtime($tmp);
  32.  
  33.   fclose($fp);
  34.   $this->addJpegImage_common($data,$x,$y,$w,$h,$imageWidth,$imageHeight,$channels);
  35. }


 
et voici la fonction "addJpegImage_common"
 

Code :
  1. /**
  2. * common code used by the two JPEG adding functions
  3. *
  4. * @access private
  5. */
  6. function addJpegImage_common(&$data,$x,$y,$w=0,$h=0,$imageWidth,$imageHeight,$channels=3){
  7.   // note that this function is not to be called externally
  8.   // it is just the common code between the GD and the file options
  9.   $this->numImages++;
  10.   $im=$this->numImages;
  11.   $label='I'.$im;
  12.   $this->numObj++;
  13.   $this->o_image($this->numObj,'new',array('label'=>$label,'data'=>$data,'iw'=>$imageWidth,'ih'=>$imageHeight,'channels'=>$channels));
  14.   $this->objects[$this->currentContents]['c'].="\nq";
  15.   $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$w)." 0 0 ".sprintf('%.3f',$h)." ".sprintf('%.3f',$x)." ".sprintf('%.3f',$y)." cm";
  16.   $this->objects[$this->currentContents]['c'].="\n/".$label.' Do';
  17.   $this->objects[$this->currentContents]['c'].="\nQ";
  18. }


 
(on sait jamais si ça peut aider !)

Reply

Marsh Posté le 10-01-2005 à 18:58:41    

et voici mes fonctions à moi :
 

Code :
  1. function Convert2points($mm)
  2. {
  3. $resultat=$mm/0.3528;
  4. return $resultat;
  5. }
  6. function InserseOrdonneesImg($hauteurpage,$y,$h)
  7. {
  8. $new_y=$hauteurpage-($h+$y);
  9. return $new_y;
  10. }
  11. function Convert2Jpeg($imgsrc)
  12. {
  13.   $img="temp/$imgsrc";
  14.   $size=getimagesize($img);
  15.   //echo $savefile;
  16.   switch($size[2])
  17.   {
  18.   case 2 : $source = imagecreatefromjpeg($img);break//jpeg
  19.   case 3 : $source = imagecreatefrompng($img);break//png
  20.   case 1 : $source = imagecreatefromgif($img);break; //imagecreatefromgif($savefile);break;  //le format GIF n'est pas accepté sur cette version de PHP
  21.   }
  22.   if($size[2]==1 || $size[2]==3)
  23.   {
  24.   $img_old=$img;
  25.   $img=str_replace(substr($img,-3),"jpg",$img);
  26.   //echo $saveconverted;
  27.   imagejpeg($source,$img,100);
  28.   return $img;
  29.   }
  30. }
  31. function AlignImg($img,$pagewidth,$x,$y,$maxwidth,$maxheight,$marginright,$marginleft,$pos)
  32. {
  33. $size=getimagesize($img);
  34. //global $x_img;
  35. $x_img=array();
  36. if ($size[1]>$maxheight && $size[0]>=$maxwidth)
  37. {
  38. $x_img['height']=$maxheight;
  39. $x_img['rapport']=$x_img['height']*100/$size[1];
  40. $x_img['width']=$size[0]*$x_img['rapport']/100;
  41. }
  42. if ($size[1]>$maxheight && $size[0]<=$maxwidth)
  43. {
  44. $x_img['height']=$maxheight;
  45. $x_img['rapport']=$x_img['height']*100/$size[1];
  46. $x_img['width']=$size[0]*$x_img['rapport']/100;
  47. }
  48. elseif($size[0]>=$maxwidth)
  49. {
  50. $x_img['width']=$maxwidth;
  51. $x_img['rapport']=$x_img['width']*100/$size[0];
  52. $x_img['height']=$size[1]*$x_img['rapport']/100;
  53. }
  54. elseif($size[0]<=$maxwidth && $size[1]<=$maxheight)
  55. {
  56. $x_img['width']=$size[0];
  57. $x_img['height']=$size[1];
  58. $x_img['rapport']=100;
  59. }
  60. //echo "out : $x";
  61. if(!empty($x) || $x=="0" )
  62. {
  63. //echo "!empty : $x";
  64. $x_img['pos_x']=$x;
  65. }
  66. if(empty($x))
  67. {
  68. //echo "vide : $x<br/>";
  69. //echo "pos : $pos";
  70.  if($pos=="center" || $pos=="centre" )
  71.  {
  72.  $x_img['pos_x']=($pagewidth-$x_img['width'])/2;
  73.  }
  74.  if($pos=="droite" )
  75.  {
  76.  $x_img['pos_x']=($pagewidth-$x_img['width'])-$marginright;
  77.  }
  78.  if($pos=="gauche" )
  79.  {
  80.  $x_img['pos_x']=$marginleft;
  81.  }
  82. }
  83. if(!empty($y))
  84. {
  85. $x_img['pos_y']=$y;
  86. }
  87. if(empty($y))
  88. {
  89. $x_img['pos_y']=5;
  90. }
  91. //echo $x_img['pos_x'];
  92. return $x_img;
  93. }


Reply

Marsh Posté le 10-01-2005 à 21:34:43    

Rajoute un var_dump($x) dans addJpegFromFile et dans addJpegImage_common. Fait aussi un echo sprintf('%.3f', $x) dans cette dernière. Compare avec lorsque tu passes les valeurs en dur.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 11-01-2005 à 10:40:07    

voila le resultat :
 
$img['pos_x'] : float(28.3446712018)  
addJpegFromFile : float(28.3446712018)  
addJpegImage_common : float(28.3446712018)  
 
c quand même incroyable ce truc ! lol
 
et le sprintf()$x) retourne : 28.345


Message édité par freed102 le 11-01-2005 à 10:42:02
Reply

Marsh Posté le 11-01-2005 à 10:43:03    

et si je passe la valeur numerique directement.. je vois exactement la même chose !

Reply

Marsh Posté le 11-01-2005 à 10:48:12    

j'ai essayé de taper les valeurs directement par le "GET" (sans passer par ma fonction) :
 
$pdf->addJpegFromFile("temp/$logo.jpg",$_GET['X_logo'],$_GET['Y_logo'],Convert2points($img['width']),Convert2points($img['height']));
 
.. et ça marche toujours pas !

Reply

Marsh Posté le 11-01-2005 à 10:49:02    

hmmm...
 
fais un var_dump($this->objects) à la fin de addJpegImage_common
 
(dans les deux cas : valeur passée par variable et en dur)


Message édité par sielfried le 11-01-2005 à 10:49:26

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 11-01-2005 à 10:51:44    

$pdf->addJpegFromFile("temp/$logo.jpg","25","15",Convert2points($img['width']),Convert2points($img['height']));
 
ça marche parfaitement bien comme ça ! :( :pt1cable:

Reply

Marsh Posté le 11-01-2005 à 10:53:03    

le var_dump de $this->... retourne ça :
 
string(101) " 0.200 0.200 0.800 rg 0.000 0.000 240.930 155.896 re f q 273.000 0 0 78.000 0.000 155.896 cm /I1 Do Q"  
 
 
.. Mais là c indechiffrable ! lol

Reply

Marsh Posté le 11-01-2005 à 10:53:59    

enfin pas tant que ça :  
 
 $this->objects[$this->currentContents]['c'].="\nq";
  $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$w)." 0 0 ".sprintf('%.3f',$h)." ".sprintf('%.3f',$x)." ".sprintf('%.3f',$y)." cm";
  $this->objects[$this->currentContents]['c'].="\n/".$label.' Do';
 var_dump ( $this->objects[$this->currentContents]['c'].="\nQ" );
 
 
var_dump($this->objects); (tout court) retourne ça :
 
 
array(8) { [1]=> array(2) { ["t"]=> string(7) "catalog" ["info"]=> array(2) { ["outlines"]=> int(2) ["pages"]=> int(3) } } [2]=> array(2) { ["t"]=> string(8) "outlines" ["info"]=> array(1) { ["outlines"]=> array(0) { } } } [3]=> array(2) { ["t"]=> string(5) "pages" ["info"]=> array(4) { ["mediaBox"]=> array(4) { [0]=> int(0) [1]=> int(0) [2]=> float(240.98) [3]=> float(155.92) } ["procset"]=> int(4) ["pages"]=> array(1) { [0]=> int(6) } ["xObjects"]=> array(1) { [0]=> array(2) { ["objNum"]=> int(8) ["label"]=> string(2) "I1" } } } } [4]=> array(2) { ["t"]=> string(7) "procset" ["info"]=> array(3) { ["PDF"]=> int(1) ["Text"]=> int(1) ["ImageC"]=> int(1) } } [5]=> array(2) { ["t"]=> string(4) "info" ["info"]=> array(2) { ["Creator"]=> string(45) "R and OS php pdf writer, http://www.ros.co.nz" ["CreationDate"]=> string(10) "D:20050111" } } [6]=> array(2) { ["t"]=> string(4) "page" ["info"]=> array(3) { ["parent"]=> int(3) ["pageNum"]=> int(1) ["contents"]=> array(1) { [0]=> int(7) } } } [7]=> array(4) { ["t"]=> string(8) "contents" ["c"]=> string(101) " 0.200 0.200 0.800 rg 0.000 0.000 240.930 155.896 re f q 273.000 0 0 78.000 0.000 155.896 cm /I1 Do Q" ["info"]=> array(0) { } ["onPage"]=> int(6) } [8]=> array(3) { ["t"]=> string(5) "image" ["data"]=> string(23567)


Message édité par freed102 le 11-01-2005 à 10:57:09
Reply

Marsh Posté le 11-01-2005 à 11:07:10    

je comprends pas.. la variable passe pourtant tres bien :
 
string(101) " 0.200 0.200 0.800 rg 0.000 0.000 240.930 155.896 re f q 113.379 0 0 32.394 28.345 15.000 cm /I1 Do Q"  
 
mais ça ne s'affiche pas comme il faut !

Reply

Marsh Posté le 11-01-2005 à 11:59:10    

p'tain ! 5 jours sur le même bug ! lol ! ça craint !

Reply

Marsh Posté le 11-01-2005 à 12:14:54    

j'ai le même probleme avec  
 
$pdf->addTextWrap(15,Convert2points($Y_nom),Convert2points(30),$sizenom,"<b>".$prenom." ".$nom."</b>",$_GET['pos_nom'],Convert2points($_GET['angle_nom']));

Reply

Marsh Posté le 11-01-2005 à 12:40:31    

je recommence tout depuis le debut...
 
j'ai laissé qu'une seule commande.. desactivé toutes mes fonctions
 
j'ai fait ça :
 
$logo_x="30";
$logo_y="25";
$logo_w=$_GET['L_logo'];
$logo_h=$_GET['H_logo'];
$pdf->addJpegFromFile("temp/$logo.jpg",$logo_x,$logo_y,$logo_w,$logo_h);
$pdf->ezStream();
 
 
... ça marche parfaitement
 
 
.... je fais ça :
 
$logo_x=$_GET['X_logo'];
$logo_y=$_GET['Y_logo'];
$logo_w=$_GET['L_logo'];
$logo_h=$_GET['H_logo'];
$pdf->addJpegFromFile("temp/$logo.jpg",$logo_x,$logo_y,$logo_w,$logo_h);
$pdf->ezStream();
 
... ça marche plus !
 
... l'image reste en bas à gauche (au point 0;0)
 
http://www.clonecopy.net/php/cartesvisite/  
(bloc "logo" )


Message édité par freed102 le 11-01-2005 à 12:45:00
Reply

Marsh Posté le 11-01-2005 à 12:44:37    

NOUVELLE INFO !!!
 
... ça marche parfaitement bien sur firefox !!!!!!
 
... d'ou vient le bug ????
 
et ça marche tres bien sur IE sur un PC win98 !!!
ça marche tres bien sur IE sur win2K...
ça marche tres bien sur Safari sur mac...
 
sur IE mac je peux pas savoir car les javascripts ne fonctionnent pas ! je dois refaire une page spéciale pour IE mac
 
 
 
alors la conclusion est que ça bug sur IE winXP ou peut etre à cause du plug-in d'Acrobat 6.0 (qu'on a sur tous les pc XP)qui gere peut etre pas bien ça sur IE (je vois pas pourquoi mais bon...)
 
que faire dans ces cas là ?


Message édité par freed102 le 11-01-2005 à 13:29:30
Reply

Marsh Posté le 11-01-2005 à 14:23:24    

et voila ! tout es corrigé !!! il suffit d'ecrire le PDF avant de le lire.. et pas le faire interpreter par le browser ! et ça marche parfaitement  !!!!  :bounce:  :bounce:  :bounce:  :bounce:  
 
Merci à tous en tous cas !  :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed