. */ namespace App\Services\LabelSystem; use App\Entity\LabelSystem\LabelOptions; use App\Services\LabelSystem\Barcodes\BarcodeContentGenerator; use Com\Tecnick\Barcode\Barcode; final class BarcodeGenerator { private $barcodeContentGenerator; public function __construct(BarcodeContentGenerator $barcodeContentGenerator) { $this->barcodeContentGenerator = $barcodeContentGenerator; } public function generateSVG(LabelOptions $options, object $target): ?string { $barcode = new Barcode(); switch ($options->getBarcodeType()) { case 'qr': $type = 'QRCODE'; break; case 'datamatrix': $type = 'DATAMATRIX'; break; case 'code39': $type = 'C39'; break; case 'code93': $type = 'C93'; break; case 'code128': $type = 'C128A'; break; case 'none': return null; default: throw new \InvalidArgumentException('Unknown label type!'); } $bobj = $barcode->getBarcodeObj($type, $this->getContent($options, $target)); return $bobj->getSvgCode(); } public function getContent(LabelOptions $options, object $target): ?string { switch ($options->getBarcodeType()) { case 'qr': case 'datamatrix': return $this->barcodeContentGenerator->getURLContent($target); case 'code39': case 'code93': case 'code128': return $this->barcodeContentGenerator->get1DBarcodeContent($target); case 'none': return null; default: throw new \InvalidArgumentException('Unknown label type!'); } } }