|
|
|
|
Bonjour,
J'ai besoin de générer un pdf contenant des images de codes barre. Pour cela j'utilise fpdf et une classe trouvée sur pitoo.com: http://pit.free.fr/code_php.php
Très bien faite et parfaitement fonctionnelle, j'ai alors tester cette classe dans un fichier et comme cela est écrit sur leur site il suffit de faire:
echo "<img src=pi_barcode.php?type=EAN&code=".$_POST['codebarre12']."&height=50&readable=Y alt='aucune image'></img>";
$_POST['codebarre12']étant un code à 12 chiffres car la classe crée automatiquement le bit de control.
$file = "./CodeBarre/$codebarre.png";
/*création de l'image*/
$image=imagepng("pi_barcode.php?type=EAN&code=124578569854&height=$hcode&readable=Y");
/*enregistre l'image dans le répertoire courant*/
imagepng($image, $file);
/*on insère l'image dans le pdf*/
$x=$pdf->getX();
$y=$pdf->getY();
$pdf->SetFillColor(255,187,255);
$pdf->Cell(100,$hcode+10,"codebarre",1,0,'C',$pdf->Image($file,$x,$y,0,$hcode,'PNG'));
Re,
$im = imagecreatefrompng("pi_barcode.php?type=EAN&code=124578569854&height=$hcode&readable=Y");
imagepng($im,$file);
imagecreatefrompng créer l'image a partir d'une source, soit le fichier contenant la classe. Puis imagepng l'enregistre dans un repertoire. Mais j'ai les même problème qu'avant: Warning: imagecreatefrompng(pi_barcode.php?type=EAN&code=124578569854&height=12): failed to open stream: Invalid argument in c:\program files\easyphp1-8\www\toutpack\format_pdf.php on line 171 Warning: imagepng(): supplied argument is not a valid Image resource in c:\program files\easyphp1-8\www\toutpack\format_pdf.php on line 172 Warning: fopen(./CodeBarre/.png): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\toutpack\classfpdf\fpdf.php on line 1522 FPDF error: Can't open image file: ./CodeBarre/.png Merci de votre aide Un con qui marche ira plus loin qu'un philosophe assi! |
Bonjour,
<?php
include('pdf.php');
class PDF extends FPDF{
...
//génère le code barre
function genCode($type, $code, $height, $readable, $width, $showtype){
include('pi_barcode.php');
$type = strtoupper($type);
switch( $type ) {
case "C128C" :
if (preg_match("/^[0-9]{2,48}$/", $code)){
$tmp = strlen("$code");
if(($tmp%2)!=0) $code = "0$code";
} else {
$type = "ERR";
$code = "CODE 128C REQUIRES DIGITS ONLY";
}
case "C128" :
$carok = true;
for($i=0;$i<strlen($code);$i++) {
$tmp = ord(substr($code,$i,1)) ;
if($tmp < 32 OR $tmp > 126) $carok = false;
}
if( !$carok ) {
$type = "ERR";
$code = "UNAUTHORIZED CHARS IN 128 CODE";
}
break;
case "UPC" :
$code = "0$code";
case "EAN" :
$long = strlen( $code ) ;
$factor = 3;
$sum = 0;
if (preg_match("/^[0-9]{8}$/", $code) OR preg_match("/^[0-9]{13}$/", $code)){
// if ($long==13){
for ($index = ($long - 1); $index > 0; $index--) {
$sum += substr( $code, $index - 1, 1 ) * $factor ;
$factor = 4 - $factor ;
}
$cc = ( ( 1000 - $sum ) % 10 ) ;
if ( substr( $code, -1, 1) != $cc ) {
$type = "ERR";
$code = "CHECKSUM ERROR IN EAN/UPC CODE";
}
} elseif (preg_match("/^[0-9]{7}$/", $code) OR preg_match("/^[0-9]{12}$/", $code)){
// } elseif ($long==12){
for ($index = ($long ); $index > 0; $index--) {
$sum += substr( $code, $index - 1, 1 ) * $factor ;
$factor = 4 - $factor ;
}
$cc = ( ( 1000 - $sum ) % 10 ) ;
$code .= "$cc" ;
} else {
$type = "ERR";
$code = "THIS CODE IS NOT EAN/UPC TYPE";
}
break;
case "C25I" :
$tmp = strlen("$code");
if(($tmp%2)==0) { $code = "0$code"; $tmp++; }
case "C25" :
if (preg_match("/^[0-9]{1,48}$/", $code)){
$checksum = 0;
$factor = 3;
$tmp = strlen("$code");
for($i=$tmp-1; $i>=0; $i--) {
$checksum += (intval(substr($code,$i,1))*$factor);
$factor = 4-$factor;
}
$checksum = 10-($checksum%10);
if($checksum==10) $checksum = 0;
$code .= "$checksum";
} else {
$type = "ERR";
$code = "CODE C25 REQUIRES DIGITS ONLY";
}
break;
case "C39" :
if(preg_match("/^[0-9A-Z\-\.\$\/+% ]{1,48}$/i", $code)) {
$code = "*$code*";
} else {
$type = "ERR";
$code = "UNAUTHORIZED CHARS IN CODE 39";
}
break;
case "CODABAR" :
if(!preg_match("/^(A|B|C|D)[0-9\-\$:\/\.\+]{1,48}(A|B|C|D)$/i", $code)) {
$type = "ERR";
$code = "CODABAR START/STOP : ABCD";
}
break;
case "MSI" :
if (preg_match("/^[0-9]{1,48}$/", $code)){
$checksum = 0;
$factor = 1;
$tmp = strlen("$code");
for($i=0; $i<$tmp; $i++) {
$checksum += (intval(substr($code,$i,1))*$factor);
$factor++;
if($factor > 10) $factor = 1;
}
$checksum = (1000-$checksum)%10;
$code .= "$checksum";
} else {
$type = "ERR";
$code = "CODE MSI REQUIRES DIGITS ONLY";
}
break;
case "C11" :
if (preg_match("/^[0-9\-]{1,48}$/", $code)){
$checksum = 0;
$factor = 1;
$tmp = strlen("$code");
for($i=$tmp-1; $i>=0; $i--) {
$tmp = substr($code,$i,1);
if($tmp == "-") $tmp=10;
else $tmp = intval($tmp);
$checksum += ($tmp*$factor);
$factor++;
if($factor>10) $factor=1;
}
$checksum = $checksum%11;
if($checksum==10) $code .= $checksum . "-";
else $code .= "$checksum";
} else {
$type = "ERR";
$code = "UNAUTHORIZED CHARS IN CODE 11";
}
break;
case "POSTNET" :
if (preg_match("/^[0-9]{5}$/", $code) OR preg_match("/^[0-9]{9}$/", $code) OR preg_match("/^[0-9]{11}$/", $code)){
$checksum = 0;
$tmp = strlen("$code");
for($i=$tmp-1; $i>=0; $i--) {
$checksum += intval(substr($code,$i,1));
}
$checksum = 10-($checksum%10);
if($checksum==10) $checksum=0;
$code .= "$checksum";
} else {
$type = "ERR";
$code = "POSTNET MUST BE 5/9/11 DIGITS";
}
break;
case "KIX" :
if (preg_match("/^[A-Z0-9]{1,50}$/", $code)){
// ***** LE CODE KIX n'a pas de checksum (correction V2.02)
// $checksum = 0;
// $tmp = strlen("$code");
// for($i=$tmp-1; $i>=0; $i--) {
// $checksum += intval(substr($code,$i,1));
// }
// $checksum = 10-($checksum%10);
// if($checksum==10) $checksum=0;
// $code .= "$checksum";
} else {
$type = "ERR";
$code = "UNAUTHORIZED CHARS IN KIX CODE";
}
break;
case "CMC7" :
if(!preg_match("/^[0-9A-E]{1,48}$/", $code)) {
$type = "ERR";
$code = "CMC7 MUST BE NUMERIC or ABCDE";
}
break;
default :
$type = "ERR";
$code = "UNKWOWN BARCODE TYPE";
break;
}
// ***** Largeur par défaut
if( isset( $width ) && ( $width >= 10 ) ) { $hw = $width ; }
else { $hw = 10 ; }
// ***** Hauteur par défaut
if( isset( $height ) && ( $height > 0 ) ) { $hh = $height ; }
else { $hh = 10 ; }
// ***** Autres valeurs par défaut
if( isset( $readable ) && ( $readable == "Y" ) ) { $hr = "Y" ; }
else{ $hr = "N" ; }
if( !isset( $showtype ) ) { $showtype = "N" ; }
// ***** Création de l'objet
$objCode = new pi_barcode( $type, $code, $hh, $hr, $hw, $showtype ) ;
$objCode -> makeImage() ;
}
}
?>
Puis je l'appelle au moment ou je désire le mettre dans le pdf: /*choix d'afficher ou non les chiffres*/
if(isset($_POST['chiffre'])){
$pdf->genCode('EAN',$codebarre12, $hcode, 'Y', '', '');
}else{
$pdf->genCode('EAN',$codebarre12, $hcode, '', '', '');
}
/*on insère l'image dans le pdf*/
$file="codebarre.png";
$x=$pdf->setX(30);
$y=$pdf->getY();
$pdf->SetFillColor(255,187,255); $pdf->Cell(100,$hcode+10,"codebarre",1,0,'C',$pdf->Image($file,$x,$y,0,$hcode,'PNG'));
De plus il à donc fallu modifie la méthode makeImage dans la classe pi_barcode comme suit: //Header( "Content-type: image/png"); /*il affiche l'image imagepng($img);*/ //il enregistre l'image imagepng($img,"codebarre.png"); //il la détruit imagedestroy($img); }//fin méthode makeImage() Je met le header en commentaire car il pause problème autrement et l'image étant tout de même générer je le trouve alors inutile. Le problème maintenant est le fait que je n'ai rien qui apparait dans le pdf généré. Puis depuis peu il me fait en plus l'erreur suivante: Notice: Undefined property: HR in c:\program files\easyphp1-8\www\toutpack\pi_barcode.php on line 469 je ne comprend pas pourquoi elle n'est pas définie alors que cela marchait auparavant. Sur ce si quelqu'un a une solution à mon problème merci de m'aider, autrement j'espère que cela servira à d'autres dans le même cas que moi. Un con qui marche ira plus loin qu'un philosophe assi!
|