diff --git a/htdocs/includes/fpdf/DolibarrPdfBarCode.class.php b/htdocs/includes/fpdf/DolibarrPdfBarCode.class.php index d6e6ea336df..37a55874f9d 100644 --- a/htdocs/includes/fpdf/DolibarrPdfBarCode.class.php +++ b/htdocs/includes/fpdf/DolibarrPdfBarCode.class.php @@ -22,6 +22,98 @@ class DolibarrPdfBarCode extends FPDF { + /* Author Olivier PLATHEY + * Licence Freeware see : http://fpdf.org/fr/script/script5.php + */ + function EAN13($x,$y,$barcode,$h=16,$w=.35) + { + $this->Barcode($x,$y,$barcode,$h,$w,13); + } + + function UPC_A($x,$y,$barcode,$h=16,$w=.35) + { + $this->Barcode($x,$y,$barcode,$h,$w,12); + } + + function GetCheckDigit($barcode) + { + //Calcule le chiffre de contrôle + $sum=0; + for($i=1;$i<=11;$i+=2) + $sum+=3*$barcode{$i}; + for($i=0;$i<=10;$i+=2) + $sum+=$barcode{$i}; + $r=$sum%10; + if($r>0) + $r=10-$r; + return $r; + } + + function TestCheckDigit($barcode) + { + //Vérifie le chiffre de contrôle + $sum=0; + for($i=1;$i<=11;$i+=2) + $sum+=3*$barcode{$i}; + for($i=0;$i<=10;$i+=2) + $sum+=$barcode{$i}; + return ($sum+$barcode{12})%10==0; + } + + function Barcode($x,$y,$barcode,$h,$w,$len) + { + //Ajoute des 0 si nécessaire + $barcode=str_pad($barcode,$len-1,'0',STR_PAD_LEFT); + if($len==12) + $barcode='0'.$barcode; + //Ajoute ou teste le chiffre de contrôle + if(strlen($barcode)==12) + $barcode.=$this->GetCheckDigit($barcode); + elseif(!$this->TestCheckDigit($barcode)) + $this->Error('Incorrect check digit'); + //Convertit les chiffres en barres + $codes=array( + 'A'=>array( + '0'=>'0001101','1'=>'0011001','2'=>'0010011','3'=>'0111101','4'=>'0100011', + '5'=>'0110001','6'=>'0101111','7'=>'0111011','8'=>'0110111','9'=>'0001011'), + 'B'=>array( + '0'=>'0100111','1'=>'0110011','2'=>'0011011','3'=>'0100001','4'=>'0011101', + '5'=>'0111001','6'=>'0000101','7'=>'0010001','8'=>'0001001','9'=>'0010111'), + 'C'=>array( + '0'=>'1110010','1'=>'1100110','2'=>'1101100','3'=>'1000010','4'=>'1011100', + '5'=>'1001110','6'=>'1010000','7'=>'1000100','8'=>'1001000','9'=>'1110100') + ); + $parities=array( + '0'=>array('A','A','A','A','A','A'), + '1'=>array('A','A','B','A','B','B'), + '2'=>array('A','A','B','B','A','B'), + '3'=>array('A','A','B','B','B','A'), + '4'=>array('A','B','A','A','B','B'), + '5'=>array('A','B','B','A','A','B'), + '6'=>array('A','B','B','B','A','A'), + '7'=>array('A','B','A','B','A','B'), + '8'=>array('A','B','A','B','B','A'), + '9'=>array('A','B','B','A','B','A') + ); + $code='101'; + $p=$parities[$barcode{0}]; + for($i=1;$i<=6;$i++) + $code.=$codes[$p[$i-1]][$barcode{$i}]; + $code.='01010'; + for($i=7;$i<=12;$i++) + $code.=$codes['C'][$barcode{$i}]; + $code.='101'; + //Dessine les barres + for($i=0;$iRect($x+$i*$w,$y,$w,$h,'F'); + } + //Imprime le texte sous le code-barres + $this->SetFont('Arial','',12); + $this->Text($x,$y+$h+11/$this->k,substr($barcode,-$len)); +} + /* * Licence See i25/info.htm */