* Copyright (C) 2004-2009 Laurent Destailleur * * PHP-Barcode 0.3pl2 * * PHP-Barcode generates * - Barcode-Images using libgd2 (png, jpg, gif) * - HTML-Images (using 1x1 pixel and html-table) * - silly Text-Barcodes * * PHP-Barcode encodes using * - a built-in EAN-13/ISBN Encoder * - genbarcode (by Folke Ashberg), a command line * barcode-encoder which uses GNU-Barcode * genbarcode can encode EAN-13, EAN-8, UPC, ISBN, 39, 128(a,b,c), * I25, 128RAW, CBR, MSI, PLS * genbarcode is available at www.ashberg.de/bar * * The newest version can be found at http://www.ashberg.de/bar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /* CONFIGURATION */ /* ******************************************************************** */ /* COLORS */ /* ******************************************************************** */ $bar_color=Array(0,0,0); $bg_color=Array(255,255,255); $text_color=Array(0,0,0); /* ******************************************************************** */ /* FONT FILE */ /* ******************************************************************** */ /* location the the ttf-font */ /* the file arialbd.ttf isn't included! */ /* SAMPLE1 : * use arialbd.ttf located in same directory like the script * which includes/requires php-barcode.php */ //$font_loc=dirname($_SERVER["PATH_TRANSLATED"])."/"."arialbd.ttf"; /* SAMPLE2 : * use font specified by full-path */ if (defined('DOL_DEFAULT_TTF_BOLD')) $font_loc=constant('DOL_DEFAULT_TTF_BOLD'); /* Automatic-Detection of Font if running Windows * kick this lines if you don't need them! */ // DOL_CHANGE LDR if (isset($_SERVER['WINDIR']) && @file_exists($_SERVER['WINDIR'])){ $font_loc=$_SERVER['WINDIR']."\Fonts\arialbd.ttf"; } if (empty($font_loc)) die('DOL_DEFAULT_TTF_BOLD must de defined with full path to a TTF font.'); /* ******************************************************************** */ /* GENBARCODE */ /* ******************************************************************** */ /* location of 'genbarcode' * leave blank if you don't have them :( * genbarcode is needed to render encodings other than EAN-12/EAN-13/ISBN */ // DOL_CHANGE LDR if (defined('PHP-BARCODE_PATH_COMMAND')) $genbarcode_loc=constant('PHP-BARCODE_PATH_COMMAND'); else $genbarcode_loc = $conf->global->GENBARCODE_LOCATION; //dol_syslog("genbarcode_loc=".$genbarcode_loc." - env_windows=".$_SERVER['WINDIR']); /* CONFIGURATION ENDS HERE */ require("encode_bars.php"); /* build-in encoders */ /* * barcode_outimage(text, bars [, scale [, mode [, total_y [, space ]]]] ) * * Outputs an image using libgd * * text : the text-line (:: ...) * bars : where to place the bars (...) * scale : scale factor ( 1 < scale < unlimited (scale 50 will produce * 5400x300 pixels when * using EAN-13!!!)) * mode : png,gif,jpg, depending on libgd ! (default='png') * total_y: the total height of the image ( default: scale * 60 ) * space : space * default: * $space[top] = 2 * $scale; * $space[bottom]= 2 * $scale; * $space[left] = 2 * $scale; * $space[right] = 2 * $scale; */ function barcode_outimage($text, $bars, $scale = 1, $mode = "png", $total_y = 0, $space = ''){ global $bar_color, $bg_color, $text_color; global $font_loc; /* set defaults */ if ($scale<1) $scale=2; $total_y=(int)($total_y); if ($total_y<1) $total_y=(int)$scale * 60; if (!$space) $space=array('top'=>2*$scale,'bottom'=>2*$scale,'left'=>2*$scale,'right'=>2*$scale); /* count total width */ $xpos=0; $width=true; for ($i=0;$i\n"; print "
\n"; print "
\n"; print "Short HOWTO
\n"; print "
\n"; print "Debian: # apt-get install php4-gd2
\n"; print "
\n"; print "SuSE: ask YaST
\n"; print "
\n"; print "OpenBSD: # pkg_add /path/php4-gd-4.X.X.tgz (read output, you have to enable it)
\n"; print "
\n"; print "Windows: Download the PHP zip package from php.net, NOT the windows-installer, unzip the php_gd2.dll to C:\PHP (this is the default install dir) and uncomment 'extension=php_gd2.dll' in C:\WINNT\php.ini (or where ever your os is installed)
\n"; print "
\n"; print "
\n"; print "The author of php-barcode will give not support on this topic!
\n"; print "
\n"; print "
\n"; print "Folke Ashberg's OpenSource PHP-Barcode
\n"; return ""; } $im=imagecreate($total_x, $total_y); /* create two images */ $col_bg=ImageColorAllocate($im,$bg_color[0],$bg_color[1],$bg_color[2]); $col_bar=ImageColorAllocate($im,$bar_color[0],$bar_color[1],$bar_color[2]); $col_text=ImageColorAllocate($im,$text_color[0],$text_color[1],$text_color[2]); $height=round($total_y-($scale*10)); $height2=round($total_y-$space['bottom']); /* paint the bars */ $width=true; for ($i=0;$i:: ...) * bars : where to place the bars (...) */ function barcode_outtext($code,$bars){ $width=true; $xpos=$heigh2=0; $bar_line=""; for ($i=0;$i:: ...) * bars : where to place the bars (...) * scale : scale factor ( 1 < scale < unlimited (scale 50 will produce * 5400x300 pixels when * using EAN-13!!!)) * total_y: the total height of the image ( default: scale * 60 ) * space : space * default: * $space[top] = 2 * $scale; * $space[bottom]= 2 * $scale; * $space[left] = 2 * $scale; * $space[right] = 2 * $scale; */ function barcode_outhtml($code, $bars, $scale = 1, $total_y = 0, $space = ''){ /* set defaults */ $total_y=(int)($total_y); if ($scale<1) $scale=2; if ($total_y<1) $total_y=(int)$scale * 60; if (!$space) $space=array('top'=>2*$scale,'bottom'=>2*$scale,'left'=>2*$scale,'right'=>2*$scale); /* generate html-code */ $height=round($total_y-($scale*10)); $height2=round($total_y)-$space['bottom']; $out= ''."\n". ''."\n". ''."\n". ''."\n". '
'."\n". ''; $width=true; for ($i=0;$i0) $out.=""; $width=false; continue; } if (preg_match("/[a-z]/", $val)){ //hoher strich $val=ord($val)-ord('a')+1; $h=$height2; }else $h=$height; $w=$val*$scale; if ($w>0) $out.=''; $width=true; } $out.= ''. '
'."\n"; //for ($i=0;$i".$line[$i+1]." "; return $out; } /* barcode_encode_genbarcode(code, encoding) * encodes $code with $encoding using genbarcode * * return: * array[encoding] : the encoding which has been used * array[bars] : the bars * array[text] : text-positioning info */ function barcode_encode_genbarcode($code,$encoding){ global $genbarcode_loc; /* delete EAN-13 checksum */ if (preg_match("/^ean$/i", $encoding) && strlen($code)==13) $code=substr($code,0,12); if (!$encoding) $encoding="ANY"; $encoding=preg_replace("/[\\\|]/", "_", $encoding); $code=preg_replace("/[\\\|]/", "_", $code); $cmd=$genbarcode_loc." \"" .str_replace("\"", "\\\"",$code)."\" \"" .str_replace("\"", "\\\"",strtoupper($encoding))."\""; //print "'$cmd'
\n"; $fp=popen($cmd, "r"); if ($fp){ $bars=fgets($fp, 1024); $text=fgets($fp, 1024); $encoding=fgets($fp, 1024); pclose($fp); } else return false; $ret=array( "encoding" => trim($encoding), "bars" => trim($bars), "text" => trim($text) ); if (!$ret['encoding']) return false; if (!$ret['bars']) return false; if (!$ret['text']) return false; return $ret; } /* barcode_encode(code, encoding) * encodes $code with $encoding using genbarcode OR built-in encoder * if you don't have genbarcode only EAN-13/ISBN is possible * * You can use the following encodings (when you have genbarcode): * ANY choose best-fit (default) * EAN 8 or 13 EAN-Code * UPC 12-digit EAN * ISBN isbn numbers (still EAN-13) * 39 code 39 * 128 code 128 (a,b,c: autoselection) * 128C code 128 (compact form for digits) * 128B code 128, full printable ascii * I25 interleaved 2 of 5 (only digits) * 128RAW Raw code 128 (by Leonid A. Broukhis) * CBR Codabar (by Leonid A. Broukhis) * MSI MSI (by Leonid A. Broukhis) * PLS Plessey (by Leonid A. Broukhis) * * return: * array[encoding] : the encoding which has been used * array[bars] : the bars * array[text] : text-positioning info */ function barcode_encode($code,$encoding){ global $genbarcode_loc; if ( ((preg_match("/^ean$/i", $encoding) && ( strlen($code)==12 || strlen($code)==13))) || (($encoding) && (preg_match("/^isbn$/i", $encoding)) && (( strlen($code)==9 || strlen($code)==10) || (((preg_match("/^978/", $code) && strlen($code)==12) || (strlen($code)==13))))) || (( !isset($encoding) || !$encoding || (preg_match("/^ANY$/i", $encoding) )) && (preg_match("/^[0-9]{12,13}$/", $code))) ){ /* use built-in EAN-Encoder */ $bars=barcode_encode_ean($code, $encoding); } else if (file_exists($genbarcode_loc)){ /* use genbarcode */ $bars=barcode_encode_genbarcode($code, $encoding); } else { print "php-barcode needs an external programm for encodings other then EAN/ISBN
\n"; print "
    \n"; print "
  • download gnu-barcode from www.gnu.org/software/barcode/\n"; print "
  • compile and install them\n"; print "
  • download genbarcode from www.ashberg.de/bar/\n"; print "
  • compile and install them\n"; print "
  • specify path the genbarcode in php-barcode.php\n"; print "
\n"; print "
\n"; print "Folke Ashberg's OpenSource PHP-Barcode
\n"; return false; } return $bars; } /* barcode_print(code [, encoding [, scale [, mode ]]] ); * * encodes and prints a barcode * * return: * array[encoding] : the encoding which has been used * array[bars] : the bars * array[text] : text-positioning info */ function barcode_print($code, $encoding="ANY", $scale = 2 ,$mode = "png" ){ // DOLCHANGE LDR Add log dol_syslog("php-barcode.php:barcode_print $code $encoding $scale $mode"); $bars=barcode_encode($code,$encoding); if (!$bars) { // DOLCHANGE LDR Return error message instead of array $error='Bad Value '.$code.' for encoding '.$encoding; dol_syslog('php-barcode.php:barcode_print '.$error, LOG_ERR); return $error; } if (!$mode) $mode="png"; if (preg_match("/^(text|txt|plain)$/i",$mode)) print barcode_outtext($bars['text'],$bars['bars']); elseif (preg_match("/^(html|htm)$/i",$mode)) print barcode_outhtml($bars['text'],$bars['bars'], $scale,0, 0); else barcode_outimage($bars['text'],$bars['bars'],$scale, $mode); return $bars; } ?>