1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
use emberlabs\Barcode\BarcodeBase;
require APPPATH.'/views/barcodes/BarcodeBase.php';
require APPPATH.'/views/barcodes/Code39.php';
require APPPATH.'/views/barcodes/Code128.php';
require APPPATH.'/views/barcodes/Ean13.php';
require APPPATH.'/views/barcodes/Ean8.php';
class Barcode_lib
{
private $CI;
private $supported_barcodes = array('Code39' => 'Code 39', 'Code128' => 'Code 128', 'Ean8' => 'EAN 8', 'Ean13' => 'EAN 13');
public function __construct()
{
$this->CI =& get_instance();
}
public function get_list_barcodes()
{
return $this->supported_barcodes;
}
public function get_barcode_config()
{
$data['company'] = $this->CI->config->item('company');
$data['barcode_content'] = $this->CI->config->item('barcode_content');
$data['barcode_type'] = $this->CI->config->item('barcode_type');
$data['barcode_font'] = $this->CI->config->item('barcode_font');
$data['barcode_font_size'] = $this->CI->config->item('barcode_font_size');
$data['barcode_height'] = $this->CI->config->item('barcode_height');
$data['barcode_width'] = $this->CI->config->item('barcode_width');
$data['barcode_quality'] = $this->CI->config->item('barcode_quality');
$data['barcode_first_row'] = $this->CI->config->item('barcode_first_row');
$data['barcode_second_row'] = $this->CI->config->item('barcode_second_row');
$data['barcode_third_row'] = $this->CI->config->item('barcode_third_row');
$data['barcode_num_in_row'] = $this->CI->config->item('barcode_num_in_row');
$data['barcode_page_width'] = $this->CI->config->item('barcode_page_width');
$data['barcode_page_cellspacing'] = $this->CI->config->item('barcode_page_cellspacing');
$data['barcode_generate_if_empty'] = $this->CI->config->item('barcode_generate_if_empty');
return $data;
}
public function validate_barcode($barcode)
{
$barcode_type = $this->CI->config->item('barcode_type');
$barcode_instance = $this->get_barcode_instance($barcode_type);
return $barcode_instance->validate($barcode);
}
public static function barcode_instance($item, $barcode_config)
{
$barcode_instance = Barcode_lib::get_barcode_instance($barcode_config['barcode_type']);
$is_valid = empty($item['item_number']) && $barcode_config['barcode_generate_if_empty'] || $barcode_instance->validate($item['item_number']);
if (!$is_valid)
{
$barcode_instance = Barcode_lib::get_barcode_instance();
}
$seed = Barcode_lib::barcode_seed($item, $barcode_instance, $barcode_config);
$barcode_instance->setData($seed);
return $barcode_instance;
}
private static function get_barcode_instance($barcode_type='Code128')
{
switch($barcode_type)
{
case 'Code39':
return new emberlabs\Barcode\Code39();
break;
case 'Code128':
default:
return new emberlabs\Barcode\Code128();
break;
case 'Ean8':
return new emberlabs\Barcode\Ean8();
break;
case 'Ean13':
return new emberlabs\Barcode\Ean13();
break;
}
}
private static function barcode_seed($item, $barcode_instance, $barcode_config)
{
$seed = $barcode_config['barcode_content'] !== "id" && !empty($item['item_number']) ? $item['item_number'] : $item['item_id'];
if( $barcode_config['barcode_content'] !== "id" && !empty($item['item_number']))
{
$seed = $item['item_number'];
}
else
{
if ($barcode_config['barcode_generate_if_empty'])
{
$seed = $barcode_instance->generate($seed);
}
else
{
$seed = $item['item_id'];
}
}
return $seed;
}
private function generate_barcode($item, $barcode_config)
{
try
{
$barcode_instance = Barcode_lib::barcode_instance($item, $barcode_config);
$barcode_instance->setQuality($barcode_config['barcode_quality']);
$barcode_instance->setDimensions($barcode_config['barcode_width'], $barcode_config['barcode_height']);
$barcode_instance->draw();
return $barcode_instance->base64();
}
catch(Exception $e)
{
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
public function generate_receipt_barcode($barcode_content)
{
try
{
$barcode = $this->get_barcode_instance();
$barcode->setData($barcode_content);
$barcode->setQuality(100);
$barcode->setDimensions(200, 30);
$barcode->draw();
return $barcode->base64();
}
catch(Exception $e)
{
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
public function display_barcode($item, $barcode_config)
{
$display_table = "<table>";
$display_table .= "<tr><td align='center'>" . $this->manage_display_layout($barcode_config['barcode_first_row'], $item, $barcode_config) . "</td></tr>";
$barcode = $this->generate_barcode($item, $barcode_config);
$display_table .= "<tr><td align='center'><img src='data:image/png;base64,$barcode' /></td></tr>";
$display_table .= "<tr><td align='center'>" . $this->manage_display_layout($barcode_config['barcode_second_row'], $item, $barcode_config) . "</td></tr>";
$display_table .= "<tr><td align='center'>" . $this->manage_display_layout($barcode_config['barcode_third_row'], $item, $barcode_config) . "</td></tr>";
$display_table .= "</table>";
return $display_table;
}
private function manage_display_layout($layout_type, $item, $barcode_config)
{
$result = '';
if($layout_type == 'name')
{
$result = $this->CI->lang->line('items_name') . " " . $item['name'];
}
elseif($layout_type == 'category' && isset($item['category']))
{
$result = $this->CI->lang->line('items_category') . " " . $item['category'];
}
elseif($layout_type == 'cost_price' && isset($item['cost_price']))
{
$result = $this->CI->lang->line('items_cost_price') . " " . to_currency($item['cost_price']);
}
elseif($layout_type == 'unit_price' && isset($item['unit_price']))
{
$result = $this->CI->lang->line('items_unit_price') . " " . to_currency($item['unit_price']);
}
elseif($layout_type == 'company_name')
{
$result = $barcode_config['company'];
}
elseif($layout_type == 'item_code')
{
$result = $barcode_config['barcode_content'] !== "id" && isset($item['item_number']) ? $item['item_number'] : $item['item_id'];
}
return character_limiter($result, 40);
}
public function listfonts($folder)
{
$array = array();
if (($handle = opendir($folder)) !== FALSE)
{
while (($file = readdir($handle)) !== FALSE)
{
if(substr($file, -4, 4) === '.ttf')
{
$array[$file] = $file;
}
}
}
closedir($handle);
array_unshift($array, $this->CI->lang->line('config_none'));
return $array;
}
public function get_font_name($font_file_name)
{
return substr($font_file_name, 0, -4);
}
}
?>