[ Index ]
 

Code source de Dolibarr 2.0.1

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/htdocs/includes/fpdf/code39ext/ -> code39.php (source)

   1  <?php
   2  require_once(FPDF_PATH.'fpdf.php');
   3  
   4  class PDF_Code39 extends FPDF {
   5  
   6  function Code39($x, $y, $code, $ext = true, $cks = false, $w = 0.4, $h = 20, $wide = true) {
   7  
   8      //Display code

   9      $this->SetFont('Arial', '', 10);
  10      $this->Text($x, $y+$h+4, $code);
  11  
  12      if($ext)
  13      {
  14          //Extended encoding

  15          $code = $this->encode_code39_ext($code);
  16      }
  17      else
  18      {
  19          //Convert to upper case

  20          $code = strtoupper($code);
  21          //Check validity

  22          if(!preg_match('|^[0-9A-Z. $/+%-]*$|', $code))
  23              $this->Error('Invalid barcode value: '.$code);
  24      }
  25  
  26      //Compute checksum

  27      if ($cks)
  28          $code .= $this->checksum_code39($code);
  29  
  30      //Add start and stop characters

  31      $code = '*'.$code.'*';
  32  
  33      //Conversion tables

  34      $narrow_encoding = array (
  35          '0' => '101001101101', '1' => '110100101011', '2' => '101100101011',
  36          '3' => '110110010101', '4' => '101001101011', '5' => '110100110101',
  37          '6' => '101100110101', '7' => '101001011011', '8' => '110100101101',
  38          '9' => '101100101101', 'A' => '110101001011', 'B' => '101101001011',
  39          'C' => '110110100101', 'D' => '101011001011', 'E' => '110101100101',
  40          'F' => '101101100101', 'G' => '101010011011', 'H' => '110101001101',
  41          'I' => '101101001101', 'J' => '101011001101', 'K' => '110101010011',
  42          'L' => '101101010011', 'M' => '110110101001', 'N' => '101011010011',
  43          'O' => '110101101001', 'P' => '101101101001', 'Q' => '101010110011',
  44          'R' => '110101011001', 'S' => '101101011001', 'T' => '101011011001',
  45          'U' => '110010101011', 'V' => '100110101011', 'W' => '110011010101',
  46          'X' => '100101101011', 'Y' => '110010110101', 'Z' => '100110110101',
  47          '-' => '100101011011', '.' => '110010101101', ' ' => '100110101101',
  48          '*' => '100101101101', '$' => '100100100101', '/' => '100100101001',
  49          '+' => '100101001001', '%' => '101001001001' );
  50  
  51      $wide_encoding = array (
  52          '0' => '101000111011101', '1' => '111010001010111', '2' => '101110001010111',
  53          '3' => '111011100010101', '4' => '101000111010111', '5' => '111010001110101',
  54          '6' => '101110001110101', '7' => '101000101110111', '8' => '111010001011101',
  55          '9' => '101110001011101', 'A' => '111010100010111', 'B' => '101110100010111',
  56          'C' => '111011101000101', 'D' => '101011100010111', 'E' => '111010111000101',
  57          'F' => '101110111000101', 'G' => '101010001110111', 'H' => '111010100011101',
  58          'I' => '101110100011101', 'J' => '101011100011101', 'K' => '111010101000111',
  59          'L' => '101110101000111', 'M' => '111011101010001', 'N' => '101011101000111',
  60          'O' => '111010111010001', 'P' => '101110111010001', 'Q' => '101010111000111',
  61          'R' => '111010101110001', 'S' => '101110101110001', 'T' => '101011101110001',
  62          'U' => '111000101010111', 'V' => '100011101010111', 'W' => '111000111010101',
  63          'X' => '100010111010111', 'Y' => '111000101110101', 'Z' => '100011101110101',
  64          '-' => '100010101110111', '.' => '111000101011101', ' ' => '100011101011101',
  65          '*' => '100010111011101', '$' => '100010001000101', '/' => '100010001010001',
  66          '+' => '100010100010001', '%' => '101000100010001');
  67  
  68      $encoding = $wide ? $wide_encoding : $narrow_encoding;
  69  
  70      //Inter-character spacing

  71      $gap = ($w > 0.29) ? '00' : '0';
  72  
  73      //Convert to bars

  74      $encode = '';
  75      for ($i = 0; $i< strlen($code); $i++)
  76          $encode .= $encoding[$code{$i}].$gap;
  77  
  78      //Draw bars

  79      $this->draw_code39($encode, $x, $y, $w, $h);
  80  }
  81  
  82  function checksum_code39($code) {
  83  
  84      //Compute the modulo 43 checksum

  85  
  86      $chars = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  87                              'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
  88                              'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
  89                              'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%');
  90      $sum = 0;
  91      for ($i=0 ; $i<strlen($code); $i++) {
  92          $a = array_keys($chars, $code{$i});
  93          $sum += $a[0];
  94      }
  95      $r = $sum % 43;
  96      return $chars[$r];
  97  }
  98  
  99  function encode_code39_ext($code) {
 100  
 101      //Encode characters in extended mode

 102  
 103      $encode = array(
 104          chr(0) => '%U', chr(1) => '$A', chr(2) => '$B', chr(3) => '$C',
 105          chr(4) => '$D', chr(5) => '$E', chr(6) => '$F', chr(7) => '$G',
 106          chr(8) => '$H', chr(9) => '$I', chr(10) => '$J', chr(11) => '£K',
 107          chr(12) => '$L', chr(13) => '$M', chr(14) => '$N', chr(15) => '$O',
 108          chr(16) => '$P', chr(17) => '$Q', chr(18) => '$R', chr(19) => '$S',
 109          chr(20) => '$T', chr(21) => '$U', chr(22) => '$V', chr(23) => '$W',
 110          chr(24) => '$X', chr(25) => '$Y', chr(26) => '$Z', chr(27) => '%A',
 111          chr(28) => '%B', chr(29) => '%C', chr(30) => '%D', chr(31) => '%E',
 112          chr(32) => ' ', chr(33) => '/A', chr(34) => '/B', chr(35) => '/C',
 113          chr(36) => '/D', chr(37) => '/E', chr(38) => '/F', chr(39) => '/G',
 114          chr(40) => '/H', chr(41) => '/I', chr(42) => '/J', chr(43) => '/K',
 115          chr(44) => '/L', chr(45) => '-', chr(46) => '.', chr(47) => '/O',
 116          chr(48) => '0', chr(49) => '1', chr(50) => '2', chr(51) => '3',
 117          chr(52) => '4', chr(53) => '5', chr(54) => '6', chr(55) => '7',
 118          chr(56) => '8', chr(57) => '9', chr(58) => '/Z', chr(59) => '%F',
 119          chr(60) => '%G', chr(61) => '%H', chr(62) => '%I', chr(63) => '%J',
 120          chr(64) => '%V', chr(65) => 'A', chr(66) => 'B', chr(67) => 'C',
 121          chr(68) => 'D', chr(69) => 'E', chr(70) => 'F', chr(71) => 'G',
 122          chr(72) => 'H', chr(73) => 'I', chr(74) => 'J', chr(75) => 'K',
 123          chr(76) => 'L', chr(77) => 'M', chr(78) => 'N', chr(79) => 'O',
 124          chr(80) => 'P', chr(81) => 'Q', chr(82) => 'R', chr(83) => 'S',
 125          chr(84) => 'T', chr(85) => 'U', chr(86) => 'V', chr(87) => 'W',
 126          chr(88) => 'X', chr(89) => 'Y', chr(90) => 'Z', chr(91) => '%K',
 127          chr(92) => '%L', chr(93) => '%M', chr(94) => '%N', chr(95) => '%O',
 128          chr(96) => '%W', chr(97) => '+A', chr(98) => '+B', chr(99) => '+C',
 129          chr(100) => '+D', chr(101) => '+E', chr(102) => '+F', chr(103) => '+G',
 130          chr(104) => '+H', chr(105) => '+I', chr(106) => '+J', chr(107) => '+K',
 131          chr(108) => '+L', chr(109) => '+M', chr(110) => '+N', chr(111) => '+O',
 132          chr(112) => '+P', chr(113) => '+Q', chr(114) => '+R', chr(115) => '+S',
 133          chr(116) => '+T', chr(117) => '+U', chr(118) => '+V', chr(119) => '+W',
 134          chr(120) => '+X', chr(121) => '+Y', chr(122) => '+Z', chr(123) => '%P',
 135          chr(124) => '%Q', chr(125) => '%R', chr(126) => '%S', chr(127) => '%T');
 136  
 137      $code_ext = '';
 138      for ($i = 0 ; $i<strlen($code); $i++) {
 139          if (ord($code{$i}) > 127)
 140              $this->Error('Invalid character: '.$code{$i});
 141          $code_ext .= $encode[$code{$i}];
 142      }
 143      return $code_ext;
 144  }
 145  
 146  function draw_code39($code, $x, $y, $w, $h){
 147  
 148      //Draw bars

 149  
 150      for($i=0; $i<strlen($code); $i++)
 151      {
 152          if($code{$i} == '1')
 153              $this->Rect($x+$i*$w, $y, $w, $h, 'F');
 154      }
 155  }
 156  }
 157  ?>


Généré le : Mon Nov 26 12:29:37 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics