_attributes = [ 'code' => null, 'type' => null, 'file' => null, 'scale' => 1, 'height' => 30, 'rotate' => 0, 'color' => '000', ]; } public function __set($name, $value) { $setter = 'set' . $name; if (method_exists($this, $setter)) { // set property $this->$setter($value); return; } } public function __get($name) { $getter = 'get' . $name; if (method_exists($this, $getter)) { // read property return $this->$getter(); } } public function setAttribute($name, $value) { if ($value === null) return; $this->_attributes[$name] = $value; } public function getAttribute($name) { return $this->_attributes[$name]; } public function setAttributes($attrs = []) { array_merge($this->_attributes, $attrs); } public function getAttributes() { return $this->_attributes; } public function setCode($value) { $this->setAttribute('code', $value); return $this; } public function getCode() { return $this->getAttribute('code'); } public function setType($value) { $this->setAttribute('type', $value); return $this; } public function getType() { return $this->getAttribute('type'); } public function setFile($value) { $this->setAttribute('file', $value); return $this; } public function getFile() { return $this->getAttribute('file'); } public function setScale($value) { $this->setAttribute('scale', $value); return $this; } public function getScale() { return $this->getAttribute('scale') * $this->_scalePx; } public function setHeight($value) { $this->setAttribute('height', $value); return $this; } public function getHeight() { return $this->getAttribute('height') * $this->_heightPx; } public function setRotate($value) { $value = abs($value); if ($value != 0 && $value%90 != 0) return $this; $this->setAttribute('rotate', $value); return $this; } public function getRotate() { return $this->getAttribute('rotate'); } public function setColor($value) { $this->setAttribute('color', $value); return $this; } public function getColor() { return $this->getAttribute('color'); } public function getBarcode() { return new Barcode1D($this->code, $this->type); } public function getHexColor() { $color = $this->color; return '#'.$color; } public function getRgbColor() { $color = $this->color; if (strlen($color) > 3) { $r = hexdec(substr($color, 0, 2)); $g = hexdec(substr($color, 2, 2)); $b = hexdec(substr($color, 4, 2)); } else { $r = hexdec(substr($color, 0, 1).substr($color, 0, 1)); $g = hexdec(substr($color, 1, 1).substr($color, 1, 1)); $b = hexdec(substr($color, 2, 1).substr($color, 2, 1)); } return [$r, $g, $b]; } public function getBarcodeHtmlData() { $bcd = $this->barcode->getBarcodeArray(); $rotate = $this->rotate; $color = $this->hexColor; if ($rotate == 0 || $rotate%180 == 0) { $w = $this->scale; $h = $this->height; $barcodeData = '
'."\n"; // print bars $x = 0; foreach ($bcd['bcode'] as $k => $v) { $bw = round(($v['w'] * $w), 3); $bh = round(($v['h'] * $h / $bcd['maxh']), 3); if ($v['t']) { $y = round(($v['p'] * $h / $bcd['maxh']), 3); // draw a vertical bar $barcodeData .= '
 
'."\n"; } $x += $bw; } $barcodeData .= '
'."\n"; } else { $w = $this->height; $h = $this->scale; $barcodeData = '
'."\n"; // print bars $y = 0; foreach ($bcd['bcode'] as $k => $v) { $bw = round(($v['h'] * $w / $bcd['maxh']), 3); $bh = round(($v['w'] * $h), 3); if ($v['t']) { $x = round(($v['p'] * $h / $bcd['maxh']), 3); // draw a vertical bar $barcodeData .= '
 
'."\n"; } $y += $bh; } $barcodeData .= '
'."\n"; } return $barcodeData; } public function getBarcodePngData() { $bcd = $this->barcode->getBarcodeArray(); $rotate = $this->rotate; $color = $this->rgbColor; if ($rotate == 0 || $rotate%180 == 0) { $w = $this->scale; $h = $this->height; if (function_exists('imagecreate')) { $png = imagecreate(($bcd['maxw'] * $w), $h); $bgcol = imagecolorallocate($png, 255, 255, 255); // imagecolortransparent($png, $bgcol); $fgcol = imagecolorallocate($png, $color[0], $color[1], $color[2]); } else { return false; } // print bars $x = 0; foreach ($bcd['bcode'] as $k => $v) { $bw = round(($v['w'] * $w), 3); $bh = round(($v['h'] * $h / $bcd['maxh']), 3); if ($v['t']) { $y = round(($v['p'] * $h / $bcd['maxh']), 3); // draw a vertical bar if ($imagick) { $bar->rectangle($x, $y, ($x + $bw - 1), ($y + $bh - 1)); } else { imagefilledrectangle($png, $x, $y, ($x + $bw - 1), ($y + $bh - 1), $fgcol); } } $x += $bw; } } else { $w = $this->height; $h = $this->scale; if (function_exists('imagecreate')) { $png = imagecreate($w, ($bcd['maxw'] * $h)); $bgcol = imagecolorallocate($png, 255, 255, 255); // imagecolortransparent($png, $bgcol); $fgcol = imagecolorallocate($png, $color[0], $color[1], $color[2]); } else { return false; } // print bars $y = 0; foreach ($bcd['bcode'] as $k => $v) { $bw = round(($v['h'] * $w / $bcd['maxh']), 3); $bh = round(($v['w'] * $h), 3); if ($v['t']) { $x = round(($v['p'] * $h / $bcd['maxh']), 3); imagefilledrectangle($png, $x, $y, ($x + $bw - 1), ($y + $bh - 1), $fgcol); } $y += $bh; } } if ($this->file === null) { ob_start(); imagepng($png); $barcodeData = ob_get_clean(); } else { preg_match("/\.png$/", $this->file, $output); if (count($output) == 0) throw new \Exception('Incorrect file extension format.'); $filePath = explode(DIRECTORY_SEPARATOR, $this->file); if (count($filePath) == 1 ) { $savePath = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.$this->file; } else { $savePath = $this->file; } if (!@imagepng($png, $savePath)) throw new \Exception('Not found save path.'); $barcodeData = file_get_contents($savePath); } imagedestroy($png); return $barcodeData; } public function getBarcodeSvgData() { $bcd = $this->barcode->getBarcodeArray(); $rotate = $this->rotate; $color = $this->hexColor; if ($rotate == 0 || $rotate%180 == 0) { $w = $this->scale; $h = $this->height; $repstr = array("\0" => '', '&' => '&', '<' => '<', '>' => '>'); $barcodeData = '<'.'?'.'xml version="1.0" standalone="no"'.'?'.'>'."\n"; $barcodeData .= ''."\n"; $barcodeData .= ''."\n"; $barcodeData .= "\t".''.strtr($bcd['code'], $repstr).''."\n"; $barcodeData .= "\t".''."\n"; // print bars $x = 0; foreach ($bcd['bcode'] as $k => $v) { $bw = round(($v['w'] * $w), 3); $bh = round(($v['h'] * $h / $bcd['maxh']), 3); if ($v['t']) { $y = round(($v['p'] * $h / $bcd['maxh']), 3); // draw a vertical bar $barcodeData .= "\t\t".''."\n"; } $x += $bw; } $barcodeData .= "\t".''."\n"; $barcodeData .= ''."\n"; } else { $w = $this->height; $h = $this->scale; $repstr = array("\0" => '', '&' => '&', '<' => '<', '>' => '>'); $barcodeData = '<'.'?'.'xml version="1.0" standalone="no"'.'?'.'>'."\n"; $barcodeData .= ''."\n"; $barcodeData .= ''."\n"; $barcodeData .= "\t".''.strtr($bcd['code'], $repstr).''."\n"; $barcodeData .= "\t".''."\n"; // print bars $y = 0; foreach ($bcd['bcode'] as $k => $v) { $bw = round(($v['h'] * $w / $bcd['maxh']), 3); $bh = round(($v['w'] * $h), 3); if ($v['t']) { $x = round(($v['p'] * $h / $bcd['maxh']), 3); // draw a vertical bar $barcodeData .= "\t\t".''."\n"; } $y += $bh; } $barcodeData .= "\t".''."\n"; $barcodeData .= ''."\n"; } if ($this->file != null) { preg_match("/\.svg$/", $this->file, $output); if (count($output) == 0) throw new \Exception('Incorrect file extension format.'); $filePath = explode(DIRECTORY_SEPARATOR, $this->file); if (count($filePath) == 1 ) { $savePath = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.$this->file; } else { $savePath = $this->file; } if (!@file_put_contents($savePath, $barcodeData)) throw new \Exception('Not found save path.'); } return $barcodeData; } public function renderHTML() { $barcodeData = $this->getBarcodeHtmlData(); header('Content-Type: text/html'); header('Content-Length: '.strlen($barcodeData)); header('Cache-Control: no-cache'); header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); echo $barcodeData; } public function renderPNG() { $barcodeData = $this->getBarcodePngData(); header('Content-Type: image/png'); header('Content-Length: '.strlen($barcodeData)); header('Cache-Control: no-cache'); header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); echo $barcodeData; } public function renderSVG() { $barcodeData = $this->getBarcodeSvgData(); header('Content-Type: image/svg+xml'); header('Content-Length: '.strlen($barcodeData)); header('Cache-Control: no-cache'); header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); echo $barcodeData; } }